cainiaoblog 23.2.191 → 23.2.193

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 CHANGED
@@ -1 +1 @@
1
- 1A399589A7FA0F24D60BD94F13E5AE8115690C5A589A312CDB7990FA047720BC82797471F64DD1F668BAAEA97B424AFC036B654B211B783DBD8EBEF0187D49B74FE42AD36551C46026A4763B7D2C5DA9434AE8AB15CDFD43FC924E60FE0F53BA18468531EF46D9137414A3BA203652DA5138ED819550C8013131BCA455D9DD52218372692E708E2A9A9A6273F7495DCE1CDDFAB4A01F7986FEC02B993AC0130210257B818DE3A4302A387F4224C0941C0CEBC1609C68A74DD2C614106F1ED6E6010FD1FA3F703D60016FC52FFA1D5928C480D4B5AE83FB824319ACCA8AABCCA056CCFC7626E140FDD7D93C355816C9022345D4B500F2DACEDD22FD2B73F92E038FE12487D9B3290AAED27160B8005D3CCEB482E7797823990C7FAA3C55D54DC373F6AF71C5A50C4EBD7BCE0D45AE006C24733131F4E3E56FBCF6AE2337BD64D5D5996EEB65FE7F7247E0119C19D2B0FCB201F4D6E70CE8552B76B4B7C13CDCC3219F5E62C61C3551A8E683888862D247C18EFA2B958654C68EEB6B70E0895FBB7590725BDF2DFB6B31F41873D38C08564BE80FE33A86839E1D1F8FCBD9224DDE5411DDF04D48FDE3481287EC7D7456DC75C2EFD5E7F2FFF2150AC310C462032C4FEECE38E827982419B02F20D0941FC909E859E8F2D34ECB2BD0F28857A14490700542D4DF5F90857C4F7F674256928068834170BF4E7EB985251383159125FCF0057C9A80AF7E4181A39CB0481313DC23F86B886D63FBD1D71FCFE962F8041A660E7D46B58FAF136F70B190060CB1ECA335CC044F4825E90DA3A79BE88E31480D0BCFFA4B921724C693049A8BCE898F6B77B1B3085DE9AA3CA43BA63CC580A2DE0D7FD4D0BFBE903683CDBAF92D0D40B4432ECECE5CE35E7F7A2CA9242AB15CEBC1D3A75AE20E1E35437FC615B39EE45AC09AC9A16EB5CFBB7787D4A8B9C0D56A2B5806562774F9494750E07D4BA0ECE4EB2AA7CA8D0356C79E01E33950711814BDA1F8C78BE4AFD32628E618973C6D04818FA930C08628266F27DD95CD6F91D16375E2DB08A324B080185062F74E8738E871840AE8FE1CF0207D3D79FFE9C006B32723359FC25DE9D5431617D930BFA9F12F03F854740349F20CD814C0F9956F34AD1D2019EF4241A17C2054F4EB71364733E31D99C6A961EAC07B8418A56B327960CB99E8410BE95BE732B5463A0C00EF98BE228200B6AD8A9A16320C6141E74D0C35D3B74EAFFDCC9DB9DB01CF2AD488788DEAACE6670BC936E051FCDA8CD523EB7D8F745AC0024BAFB55A0C69919766430048A772A3FF0BA727CD1C5AA4511DA2FAF726D9BBB15BED0A6B26A8D5B85954DD49AFCE1A4BEBE5DAA9F1BA747AD61CF414ADA792AA03770EC0FFEB7E6F3036BAF4E7D15BB3EDFFA7E5D2A2641785290259EC2553F0A85EB332E34C303B0EDBDC651308940100C09BA60B3D99AB01898E168CCB9C60A479CB52A375D15A25C77A42CFCD39EB5E2884569951B2B7D46FF859CA601FBFCFF53D139545D638A28888C8360D3F3A96C3485925889DBAF83B939BE35A81A26A4C33F965C0354A967546DB2EF8163CDBEE987BABD0782F86C1DCD8CE44A0A2768DDB7175E8532EE075ABE920EA6D534F17196402A06D4A607C7DB4E95550EBF03E1707D645F74CE2C59C188F85E83D9102A0AF19F1A21565C226FB2C70148B2110D26C29C74CDE39B5E80AA5A421653BF9A06E3A03BF163CFFDB4F3E2DA5A3DE25744D4EB41DFFF16AE05D2616AAC5CD0430F5817DF2C8C4CBCC64783B3D70625C6FC8E7352B8681DFE36E17681C0EE711699D1A81E684A3CDACF740F1F3F6EF71DD3000F790B1A62D6A9EBCEBE7313FE6EC0C41F61DCB519741568DF1F10362EA57D6E024079933456E33A19915EDA40E605D6A8498FBD441E4172E89C62F98823A2E02416A2476ADC0221ECACB0BC7B718BAA86D3FC3854CA0C376E5B658601EB52116FBF3DDD8FC0F402513E8022A09644D590E2FDD917FFCF8E25B2721F3BBFD56C2F5C9E2D1CD0DAE0DF943C8E892A39145D02004B5632AC5CB09E66A8E9A0784978C30A67929EEEB00B9B580B719CEB87710C5C665DC7B1711041DD4AA06F91FBB9DB8DA2E5E7FF4B371CA9E6033AF2F3462CDD692FF2B76C01BDBD34736D197E7CB192E5AF03F6754551DDF67A6A633E9B561D15F544B6DF64A4EC53BEB87136D4DD370B5B42129D1EEA9E0CCCB6CFC3062FC0C63959642D556050E14E2679F227E61F3C6DCA3647D82B0C01DE1D07BA63DF6678D8F29A4FDB770D8C01AB288B884D74C6516A00C542D020C8D3A732B3192DC7782545643A12D613D12D5586BE2FFA0ACE23AAE59534ABEC29C18298F14F1F551BD01EC6DA20A58D42C4936318566C33E232DE0AE0D0189C35D58C19C53630B128B30B8FB707201F81A3B9676A9BF30F2DC46C9EF295D0F5C49C7F326E85D82F4B4B4815CFC8A30A8B6F789C82080B5940357A85E2755B1F385C5ACBE44F0443B91F15B4EA36B56E9563C977CABD653F18AB967B195CDF3CBF359C8F20251F5D1C9A09F7E61D313909250CBEA8DDBBD57E5E82A3DDFB6007BD9A4BBA7CBB2F426F63469CE52E0C870A6A9778AEE20EB908EB13B86858E1F5D4F3AADDBBE9D3B571901E9130D5C879DC8AE5ED97B6167722E43DCCBD80DC0A7CCACD1B6C66F6D57E602173076AF8FCEF9DC27D7D10DC341D0EC85E9C13C307D2F25E7A9600909F8521D1CD298C97AAF14A3DBB7CCB2E8DF722C0DC15975DB15733B21FE34923A6A4D7484F1A781679A17EA698F8A730253890314566606274462C7BFC4FFB900D72D4F10AA915E3AE25EBE1060D75AAA9A46BA25995CF170E7AB8B720EC7BD36BF2CDC31B09640124FA4AFAA44ECCA98EE8C01995B9DC3A33B4598AB1EC877C0F1ECE8EC763CA10239BBF87A1951F76372964B6C925983D0737E70360F543DC4228AB8CD3D5840B5AF1F3FAA4C41DEE1963AE430A7CE3D7A9C716FC0840B65B9E81053638CBD5935632DDACB0305F0E9F02371BD9BD9ED657B1F79315A909CC6F4F7DF1E09F318BB1C9C52CF430A83070C633F04D8FF5ED530386695A7086B3D7336AF8BCD2983CD2267A5FCDF4E914F9BEB005A472BBEF8015EA8D3AB81C98E1E4C31DC263E3783B6FDACE71FBCB1D82FCC67F14205E1B9EFD534D3A74E80F32847E190BDF88040DAF4DCD2093BFB3B97B0CF5E5F1FE68B798514B25F3FBE6C3984DBB861AAE46919FCC6688BF2D8DA221FD1ACCB92A0A884ACB95BD65B6C4B4AC29A580DB529F1B996E1D4D53FCECAADF7BEDAF60282CBE52AB21D4EA8B7C891083F105C5497692D8802157A96432AD3FD73F52C290A70B0CD869946713AB05926423A0D48169509FCF9C94E3D13E512D51D1D13F087BCE4A7126AC1A41F9A9F4D5EA1886C8CF3975587EB1B6A36356A577027033A62F3C4A31A3B921411028F99CA319F584A39F71BEB43959B262DBBD04F36835EC2AB6DEB711DD2E5D93A0F0D23089BCE26DEA155E0640D19B627E58B1659FEFFF353AEF812C83E1989706E0ADFA225226D5199F35ED74AFF1015AA18364625935D523D6F8BF3DC1ABEFDC59C06A7D4DCF4486B98F73E2D6E75673EB93DF7F5B484FA1DE1E034E944E20FE107A2C69BC83293649C78E6FAB11E9EA68CA5C120EBD0F5C18AF08B0B1890A7BE762F19D2EA7B92EEB7AD876D0A85B49F6E9B97C7CFE35C087BADE591997F739CCA263F41B8770214EA071B7F7E9224F64E45C5CCC8F073CF194683881B49F95BA41841BADF54B1A2B00E5F69AA8D8358F884FC1B3AE32B71E4975F0D2779281B10A00A3FB92ABF2B8AF185947460EB832CFC00CC6322BB29F24D89BF4F83FA979997AAF0AA853F140F2063BA2F4496ADB6A8D45EEA154F43888306D3ECDF11410E463526E0A322E88A1DFC994FCB2BB447E394417A6C912E7045F29E8BC567D2B25513CE64AC0195AA941ACB24ED572FE0E090A04CCB1D3AD69CE60018806A7150F44FD6AE92D5DE2CA2BBF02F2E2FDAF1B0F42F79FB61F4C3A15033FE7B3A220DFE059BECE342DB8A48D0B666D6FF42E4B639569F685462F2A3B9ADDD39D4236C5C6829DDDB64991C3822685914B678907DE7391E1FB92E3446B92EA37E9BEFE52114579268063308A827AC551634B0D8D25AE60349FC83508C70080A53F907DC32C8A7C4C22C0398245A1C11ED78195B4174BD3EF0B4CDF064073EF588D205484E18FED6B3D955BD2E8A86291E7519CE8AC0CC5FB4ACA40B90FE29F0F8CC82D51A14C02B3459BCAEE4796608F6BA5DE47017ACBCD11628B25CFF998C6DCC62AF326BD36B88046153149D7EE67FA15D13DC4CEC95ECE9D2A01E0BD8B46816E4073CA19C85927182D3D3187485E78A9AA85D4ADA94BBC5A543077BEBACE26308E23370FA21EF89C7885A07747DBC6605C4755329C3C1B2A1A5CAB3BA6E3A6B539DC7964A7DE84C499A6EB4CEB3EDA33C4F2061E5FA142B4030A58353A72329B0CD35F4F1E98395085DA426EBCAE3F13E3C8DEDA883402B4126DB4DFB76A1241E2852CDF3CC400D8F4E50FA5224B58292C228C82022651AB49B732852924AF071DDA90A456CCF3929738DEF9B68648FCBE8F0B4746ED133BDBBCB0BED85BC1607EC8FCDE9D8B94DB244552B2690A236C4805920DAFA0043FCFBB4D5A7230ED1A065D358368E9DD9E929E33D46D62F024578A1811782FE6AB469D98759FD0312C26253E83D62872F700D9F62E642C30510DC289212A9D76B05727E092A979DEA9845C11C5F18FE251B8B59D541DB1CE57460B7F0570933C76C5630508B102902401707E9B91FC0BCE580BC4D0C0406C8017B8016D7600BC774571EC60208BAAD546517BE79F31ECC36B5917D203EE9F3947420F665A4FAF20D69370214BAD1E9E00DAF6BE26B8FDB40F3A9C114D907D65A0B24469AA6BD51DB4E819487FFE5E2A7C549F450873C45C9AFBEBA8A99D8561E84C99B894E34747A44CADA5D574F433206CF21A0C6F4D421D6F90F2205027ECEF37CA30CFFB2D4F5F76A3E26DD398C37B0D5395ED98C3D083D8BD655602B636F13A2C6E8D6181BC35995F75787BEEAB2E551B4DD7AB757ED91AFBF018D88350F50BF504E1FCF7FDD372B64EEB2DFE3EB446A3687D5CC99E16F614AE7D04B23BC32530059EC0E5CCD74379F145D8E3B084C0BD7193B03D16D404FF857B911DD9A5FD1CA6CB392A13472A77FAF937650ECA53AA887632ED279AE45300E0C057884ED09D06385FB55F134981BEC77E8C614A857A56799B9D1A17233322F2E3FD54411ABA62B728E35C850A58F4280092DA45C5575EC66B41A7931F0E025AA30317AB6188D25F718A84D044017D27ABBE904F2E373264654307F07C97DBD704C6BE1E2A24527E6515A68AEFC4167CD9A5A2E139B2DC2C93AF21677C730CEC35234D974D87D54B4956A40AD89F66DF868BF38C8E22AEAC36AC44AAD7331F3D399833FD25FF1D832C99A96A8BE7B4326038699A38F0640E3706C232EFE3F1B6F4DF556A568DAC62F06BC74EB27B8876C89E92C88BD529DAF5D7098413D611F6F2A1BF6C362F951509D813CE13D77FFD6701AAC4B7DE72FA9E86A376C17F0677EEFC21198384276ED927C7DBEE6956D63445C021D79013E6211E1DAE33B8F557657F268A65723350DE6F7EF375A86A12C829936CD13FF9A967D9B6D3800ABA63660210A15C6AF2DB85F10C95CBED897E459800D3E859A0F30E8447585B2E48A61C242DB562E5D287E8E1E347EA26AA5CBA7C78A2DBDFFF25CF6C97AEAB63B0D30082F5A1C87536F248603D41FA49C29B6346EDC3194A6B13D0D2DE9D763CCFEE054E5369C3F1FF3DE9841F351CDA4616A8BA7714EEFAF1B688CC7B56BAD6B9D1EDBF44C7F47857DC68057B7CC91AEC53B6B8E901FDBEC9A685A44D69F37C92A54533152BA750B4764C7971D2147C20C4DDEBFEC9A9DAB123EEDA161ACCA52CB0F283B73119D5A599AC2379EBFBB6C561EAD11AB0157F408441CCEC39197F560661395219FF3D662EC368E9D8B7C30699AAFFBCCF407964B491EE6C45D31513E3E120FBCBC70A727C45084907E787C6AAA54B753C84F4127D750F28CB2DC988660151AA61AFC8B2E09E89CCE17A11E74F0190D00257E069C3FB471479C1359795B7732C7371E07B508A5CD0BB4244F8F703F77B80AAC0F532AD364E8300601BD2D2176CB652BEDF821A4E96380F15F968BAD4AA2AC1F3EE5415F3CF8FB707E68CE81DD3F972DE6F21B2D0C7989DFAD5CC35559A91D3A497C095867E3BFF891A3299532AFFBD95DB732E05DA028E9D73B6059EBA077BD3EFBD17B77AA21FF1766E6B8B68E6C69C9517B991221C1615A53B2759CA7CD53FC5E35504A6D66FA44FC10D261C7716EAE6B9122E92EF80621B6A46564119D19E3CA7F2B384786B5E124323B9445A2F0342BA956D6670E03FBDDA6AC6D3B786C2710FE5BB75F423904007A6BA04E3060998D2AE04485A575717FE638100965026BE4B5665157FD38F44995F069765912057A48D80656417B1E51EFDA1982E8D64713C2A148708474FF0B2C2E9003EEE5E907A7363A4B0DBFD1A60EFC989D715FE527D8C49919DB5677D49611F4F0E6715A9E4F8C3E6CA8CDD74C254753B8D3D2D0911B4A3DC45EC1E09652E1A0AE908DC54F82A6C0E25A546AFE59F1296186CEC6684CC6F17000B7C97103C55E8E90022418E41CC02E5E06D5E4BA96A99EAEF3783A86C1CF68EAF6208810247A56DDC0FEFDE67B3ED1975062B5233824E54A654B9E1119813CE2BAC58E86BA858F76C5AD09BBEF2E27F87387F5F3F0FB2812AE4896B497BDD64AA5972BA7AD7AF9F46C91E03CE4CD3DDDE42D9B0114D846F0C9B50E4A5202D7A217FD4F0B6702C3D3F46627E03C049D69C478350133D33CB072F8901C68748C4248CBE540E0B233E1C7696DE74AD7650311665F7D3763F8D6F0ABFC4C54BF105129A9777E43B8D131BFB02B1EAE5F7C703327551211DFBCAF4C1FED29332CED6D34AA2138F02C1D8910668409E2D1E80F112F9D271375BBF73A0184C6EF3E45B8DD7C6B6417C1E35D52A9FBD8DC206A23784D8AAC5EE1B32919091EF967758642BA6202EAF82125B224909D7D11D38251D6CC70DDA0EEAFBD0FF99FD07C460E7BF2B25E7ADA1611FE890DC3D92E03AA2F9C645E01E41C47F1ED3D03BC8DF81580A1D4C9ED6E67F531EBE830CD067037397E8B65DD7D8A3574BBE741F8DD1F0560DC88C695FBE0E258FDD62F25335A439A9C730A57B9005B9CEA6D48E9BF9AACBD7DA411AAC047719A29D8717F9C5521BBE84ED74404A759B3D5A1087CCFCA37A6D38C020D644A024E317D4D307045DD4834C7EDA26FD6F65EFBAE3A896A51D3DDF2B0A1B62AB210221CF5CAF649286D86DB29345401CBEE9FE20520CA48E304CBFDB00A0777A576AC3A3576A2B1E7F5979B70A2BE0F9E054F62BE136466928A44DA390BB326BA2258CEEEC8D2612A7AA3062479A3286406A3C62610A405DDE3CBDC02508ABC6B5CD54CDFB0F6763A5A2EB81AFB180E6017D26BB053CE680F66017DE8A8A3B4DBC529DFC07FCB5992BC21EB847A8B05BF09C4D7C5274B16DF7962478B16DD82799862861D0C353203B333245503816720F439184809B84CC2E8F31B1ED89372EAB9AF56F85A1CEF28CAE096FB6A7FD8B7CAAC5F66DADA11501EDD9FE7ECECE27A4CBF4EDCA926A9A086F75B5E43376BAD2B6826DB67B13062A26A820688792266E1F06513EBE1C7F697407917C3C1DE796CDFA639095264408B8732264A15DB2ABB4BCEC52D09BF34621142566A49DD6449AA24ACF26CCD7CAC49DA89E4758F9FA426BEAE334DC43DB870FCDCFA544539D81DB1504031FDEB70D759B28BB3AC9EE264CC2F57994CEE5D7F4F00A0B0ED98FCF34168D4B3D0E77A540C2D17AEBB592173E258BC0A56C34E4A1BC55C3468C3F8160258DAF0091EB74183F2797E23D7A5FEE38BD180235867FABD32934AEF04EEEF3BCDEFEBA05E1224CEF717266A3F49A66D4CDEFF587D083761712653E7901536B6C32ADDA85F873E2E02D13DC93C78E22C2F94FFEAFA15983509456C4BADFF73CC43041ACE27EC799D0BF13B27A24938C9346036AF1A2493030BBAF79C14CF2226FB120DFBCD82F476FCB8BE3FF7C247EEA038268EF02DD39917383C413BE7D57710486A20A89CE7933F42DB02304FB5686CF1533B6B45BC8506112053F8899D15413E6C6627E1C78C562FF9B6FBA8CBCC641C087E4416A7D7EE2270493C5C24E9BCA6E73F5E300E284E361AC75985C128A30671B95E0A7164981B8AF9FF81A2894631B4A175E075F427D9FAF6F37511569DB3A198802A51803A429AAF94FFFC1AE9D80E140342E873F506620DCE09C14AFBD4CDD7FC263293D4CECBB82C8698AAEFBEFC172DEBB35F24D2EBB981D26934325C52521FA2887DA1828DF1075892C89CD029B9FC47C62B94CA1FA9B45D511C08E2D25260DC65134527938EC6EF9715B69741FE7DB3CB699AEA6400290758987A080D3BB00F335DB80634C541CF4DBD43009B2E2DD4770E6C7CA1906BD8F16C69B29BFD711020D542D92AA09A8847C4EA002D7D4F2226F8835D1D4FCAA50FB9739002EC47FA6ED1A137F3E8383DC486346C1F13207D3B979E25FAAF5FEE67EABE47631AF220AC5B4FCF04DADCA2C16481E3775022DC70D32385C135F032CF9861F30F6C11D749E63BDF69152FDED6ACF6EF7B8D9D200611F0E9422358EAC23BCB36BA093F9459B17DC8CFC8E3966AEBD6917C4AEDC85CE4C206E71ADB921B853D552CDBE5F8FDEC052D98D0CECA066B13C091B21C58DD2C390636A82E2507AB104F981CEADFA08AD96FC86F874FC5870E670ACFF9F6B15E82F5629415DFF1BFBE529D205D361DD8094B70E7FBB8F139857E10E973332567AD26B75BD3DE680E74FF54B8C4E81141CA50F58FD86D9DF7A2C7D7500BD5EE4D6B47FBF00DFCE03EDDD6CB27D236D6A784A22792189097E02CBAB6ACAA885AFF19486CFE147E42ACD3AC3AFC4B45B4572540FDC87B2F160BA08168ECE8052B9A1D171CAB63ED8D87D488A8D587C087D83361E80A43B49985CE34515A0FD0CA30D4D7A04AF4A1BACF02C0FEA0901289A04DE587708D0EA5805584FFA64E01515A3BB0B5B309D80E2D24069876397040AF69D04B78635B10298A0BB991D5E19F7EE6C81C9E0A39FF9A7028C4EDED1109DB50A034576191880299402333B72139FE27F856BA175C4A714B7E8B761C7A04A060677245A69184A82A7596E6B5754E7DA2956414105B0F1402863ACBEDE8841B522C05B308750AA2531A7AC8D5DBC6FD4C10B631F3BF146E6BFB76FB05B3C65464AB1197745C8C73D3AA7D8B47B3D2B097AFB493C15459867ED85EBEC3A09DF95547412F199533728159247B98612ACF8AC156CE77B98502B12F1110D99BDB7ED286C2D21314062D2534288872F910CA92B158B2F20696449490062654CB7B7C7E97458C868A591BDEF8635EBBA0ECD9AD36C682F5A86ACB587AB0DA985D0A01B95894B4A63562A8C30EA328E0B64A8BE719C720B7BD6C240E9F8597D63392F9CB9D55BCEBAEFA31D5CEF22E1DA3BD5E41246755E772E30439834250D9E639360B29FDA68C2AAF656EC181B7E4A084AB3481D2234A3CA8AF9FF24534A9CFABC4F6000281C4E2D057D1BA5BB7E22C558625A60A3EF98C7B783552DC5C2C20486E38A284EDE80C9685E0ED803EAD7AE405C2D4592494B88EDD8692E6F14D11941524B17619AA8B566BFE0EDD3E250FEBECFFF809E598C804E14FAA18A208A557DBA15D3D27FDE74586386AE32906AEDC0E8335499106701B0179BE9DCC5DD21C03491AB499BF75573277B6D98077F9DC413F658EA72EBD27504F8DCFCB29CAD22BAE6D033B4951350C0AAE50A6293AE8A3EA1BD9A53C24262F63909BCAFA8FC674939896A43A8A587628E8FF7E768F6E2C9A559C782CC9110CD9DB66A3E1C19F919B451C0B2FACB36E0DDC74CACFA130EDCCAE0B9D5D086D17BD6EE936547337CAF9A1518F38FC413AAC9B124BC3775509EC629A09FC9879DB55DB3B252951DA1881DDF19F719CA6244A038EE95AAF8668D88345DB8E6C12FE65F714291783590E0B48F837A21A4DF12A7C3092C0D292589E2B70DE6B6EDB403C1C760C45787A0E3D4625A1A5DBA08F936A4AEB83E0F00AC818F039F24E750D18349373BC20610A6415EF1FAB3C368EED95AA880887ACFBD2FC2F33AD213936F741E9B94B0CD84AFFC1004DAD2F05DD81CC8BDA214F281AD8634FA678A7FAE59DF110C2E56427F3AE301F91A054C589F16BFAD3FA1B33FB9B16498AE93F52BCD7DDC6108A87FB557EC32449AD06E9582D8F84A3DE8589E5B785B33F613F16591733F6062EC14E58A651E2B57C2FBF88695A39AA701A784D23D6906F3F14DDC7CCA6A4A2BE5751AA42B956E004489C2428899360E40244B9718E53135A0CF0A59CF329CD485EC78ADFF1FE0F1124A14C67DB0103C430F5FD3E6BE8469FACF966A3DD73263B1549187A37D6DBA7C53392980F25678FBF66D12D923208667DDC860C84B7207EAE17F3E0082029B37F2E7D1A80A16369B7A4AF970F9D73FD0D4A6D907DF197F1F29360838A75EE1F3B929A7F4ECC2F9FAB57743FBAD7A660B85592D873E202BCD572EB83FE0E7041F7B15DED4A62F9E09A63078EC7AE748C8A430D021C09CA273EA0956F740E6390939E9C0ED7B7D05C04FE90F2FF5AB01BF50A2C5291AA953A27CC572A96BD2E9B4FDA7D815E3C0505DF8CCBFE3105F12172ACBCD7B67895E1498E2843C554F77D4F93A35FAF3BC8C6571D66E6E87B4A29058AA1E3D855FA2CF7BE4CB4627A5F71E4DC3D2F0F09EF5176288A4CF0455369FEFD1D36C67A3A0B2E068FA6E0A0E78E96D9CE2B69670D1FBD34C18888FCBFCB6762465F12CCA96D1289114FF4A3B2583FCBFA2B1538BC3128E4D7EF112E3D08F040CE8DB05509C8E84802B4618250BB3E0F7D5C6EF2560E20C1407CFAE2F08E915BFB1A3154FFADA658E34627B2A23EA92D4CA798B347BB6810345EEF0B80C6992188DB90FD6AA9CD176BEEE0BEABBD8792E1605BDBC5BDBFF54FA8493332226D004417F25A6D254E4AB48B7B61129DB6D4FDE9D14E86BD3D2E7528F31F2FC4F5544140DA675419770DCB3DB0198D611C7FB14A1E8452B4A0CA477CFA8E21859E4D974D1916CDA3F6007CBB56D2958873507A6FE824F4B91A9CAB161E1281E2EC1602D89FED04D8D7387AB6EBC4E33BB9DDC16CA01EC79DB93A846E321705C1C6046B4F50CA2F0F492C6FC82E563C7057A0452B164636FE650E32BAD2072526761D07EB673955DAAC0F8B3820F782D58855E0CDAD8359887FECEBAA1FEA8CD251F05A75524D58440AA5F45ADE077E00AFC9C0773045E14538E181076896A60065A5D96D5099DFD2DACED3D5C0C1EAEDD24BB94AAA77808E92383EA1AC4B2E4E5E873CCEA751164E4D5AD924E6B70F1D57AC951CD2AF9C5D92A6D7E50DC468CA05444D313B509EA524C38FC98474BC962FDC690843FE4109CC49771DB04E47A3C6F473111EF4951D053D4746A570DA0388845CC6203509877601C7E63156B571FFFEE2FC5214D82FEFD8D8FE615B28905F2ADA36AD39D3049467C2674B9F8444C49DF30AA62424B02FBB6775CAACE70BE327E67635A38F3C821BA91BB78ABFCF3A165A782E1D3E90C79C5B0C26CE83365A516934BCC78391A64F444434B31BAC3E6989CBFB33AFF0ABDB5C463C2904CCDBCEAC2513BB774DA0F57862ED2A152AAE2514B3A2498B0761AC506AD647B7E5683C9479F56E05A8EB0EEAAB04673F4FCCD3C3EF3E8CC099659AD5AD8C2ED1BA9423AEE0CF40AF81EABD455D82F0FA9E1F555CA49F42F8D54245A346CB6478B2208383640ED0238FB32E4229E8A10A305DAD4346B985856575F88ED40869E30ABDA31B3D665803B970EAE2DBA92672D728A05CFC00263CEB1E822B3F47B2E290F8E6D0FC8C687D80C245E5FFEBB12FFC411060EB83B37F64459428FC7DE2D62DFB59D63126066E62DD98DEE25C10BCE68E5720609BBA467E33950D11FF3316002C7C8C8C40FF30973961276D2138B4C84B981D05D0C7EB3414187758C3196C4784B74C3DF00E4C020CAB6AE2012A18BF12BB190D492894E0734BB2B43F05D3EEFBC836D2F3E1961B51549CBB8D2E0EE385FA413D8FF3C635F393133900F2FABBE33CABF54E20335693347EEF9D824A52748523710E9970564A387D756F198503C9A5AA4FA9D6978836D1D0C2387B24D2D5AE4F8A81CAC48730CDC902F8E51BD22C42D11A61B6BB0FA8ABCE9D219782765C44EBFC0BC2DBBF9E0159F71419EDA2418E4D924B09402E75048EF11149E877C5C35931AA33776E17C22995E551290B13EE06770353BBECA4F8F60ED4EDDC177D5FAB4D1383B70B55520A7C19706064258990D70D6EDD616851E14B63B9551F3E1E0017967A477351E22528168F9740389133F86A0CDE2A086AE3FCC711F3F5A82FFBFF0BA9C30074FBB847FFE89005C1253F2C87235279AD5FD00DF10FED943425EC92A742C5EBE809359535DEC9C291354C6B23A3A9B8A9D34180EEEEC2660A145B92851C1B185CD1AE1B063B40F261C94318DB608103ECB17874520405464EC189BC1611000FEDD9303523D93B177A9140FB60A46D6ABEBC0DE81E99B3F5E70F78494ECB199D6BDC48753DECDE32F9F8345C53BC380B3098D35FE673C4D0837F9C2E82F74983C3FD288CAC2E4FC1B2AC243A561262CDA4735639C1F80294115F031626E5CC56AE0EF92E8A3560F672411F31211DC61EA1BC9BB261BF98B6FB69977E5F08DEF34420519A5680542D28211B9399CD342D4268772DBEC1F2A04B75B56A50A56A5C96459818ACAD1F0A9AC47ED2F34175FD7E236868A41964939D4D0ECD746C43632B7FAEE9E27714D980D93279F09134F5A77EEB7E3883C267CF2B6732793D4A54BDF4F1668CF1E385F9A9DEE38DBE60BE9396BFE8A7FD85A9FD94F89A8D6DE99364CAB5DA952247C2D5B04F3F37705C8F4A5504E0270232D45C763D6C70BCD07E63C67449EADB758E899A76DB15860649A06668E03872AD5E2FBF74C14BC75AF0B940FDECFAC9FAD8BD7D7DAD0A8E0418BDF60993AB6F4528EF4015C2039699F02D6816F24E0F31A5E029B03A875CF433625C3469CF91F27536867D1BD21D37B0279BF231CDA8A9BDF9185DE06483AAA5610C972E3C149999ACA7605C7EA8880758C7A70DEDBFB06C766996462DEE84F0A549AF08E888F81FF86C074BE52AEAAF46720370B36ED17EC3581436120676206B78FDF87EEBEB6A78CB2C2E25047A75455FA5C0832ACDCF047B039929C5BABABDC3847D09D14DBEBC98B0A03A4F8E9C378A61A79C22A4E6767444A63279D102DF6D8AEDC446CFEE3D0605C93C2100D9143EA9912BC96F3D661C33D8DC8A894FB0765E285FB1ED6729929B0C7AD3374E8DB8F28EFBA9ED0733BB2396FBEA1133666118D3E011FC7C832AC07887A6A330A16D65736DAEA16BB0733204139F171A18735C3232B255261730DD04DE96BA2CC322BB9D3E743955BD843F5695587FC2CB4C5C7139E1FE6519E9635DE13B2C6B89A3596DF516C1928E1D8B3E112450CFE1B3BDF6D04CB32922633F74802FDCF824CCA857EB1A7566A400BFFF737A544A968429E61D9732023756792F583A78B511A392B652E0C10BB3CE9D28D1D3496181E325022E54BB71A43B188D11F849D9BA2BC23A36B838BDB9603B0964BFA0B2622B9DBAB671B69A2D704DEE27272155C9B7FD9FDACA8747E3979B595A55C8E87FC220A1959D2B5C616FF7FE628619B3F01FA2BA57DEEFF432EF1769FCB82FB2C7C004A427B483573539627F6ED8179A279C85F4DE06B9DB43C37E8EB9FBD5160A9BB263F4854572644769EEB21720425FE6A21890F262DAB359683715DC58D5DBB6A198EA4F3A1D515A1EAA2EE32C094267FCF9FC3EBE61D9898AFC71FEDFE3FC30769236CB7ACA684332E3294153613C7B87F0AFB751094BA31E7F64BA7FE0FEA53F5D4AFCE8058A6F1704DF96300D2EDD3432DC26F837FAE18B7D5A1CCF5C1370095520DD2BD1DE33FFEF1E8265BE514FEE9CC2155308443A9CF6C80928288CB616D0F425C8D6EE8CF9D464278746CF9EA5BDBE327DADFC1D2113BCF4FC2942DC908A3E35A813891F89F7C2F5C420051497BF8CD221D813F6789A70DCE3D86452F4541CEFECD917909531D518BF6F378356739A7C256FCE9B0044807E5D51F34FD64F4AAA1203C9356D69756E8F6F0926FDE7B693E9364717E43DB634B2DDC0F60DFE35F0F72AD1E832BF21E8C7B4D091EA0CB2C6B2F7E99ACF7D92EE9C21643CDE2012CB57F6684FA8D7C6C988FC1FFB4B0FCDAAC554E01A65805B150EB3275E003010B912F0468FA6E17CD98C9CAE29712845176E1DBB0FDBA61548F9BE086DC6E773975CBBA4905116AE5DA1296089432540325FF513EEEFB3984D7B2ED1DC3598FD1E4C0DA0FB594E1CDAB551C6F3FF1833BDB11F530130BE5A9721D0F9043EE3C276998AE8091DBFF22C1AAD4C371C6819BA71365A309FF9193AC7E48009493C9143005DB5486F79530942B9EE0AB591BEAFB097E7CC078BAF2B454BD4D5666365F5A26728B4AE98BDC2420B02F50C0A202F1A4A56C0532A9FEB681C5CD1A46E1988EABFBB7529C59B87DF69C43C1A4E8D2FAADB2A3750486B17F6047D150A74249C0ADFAA4AD043443608D6C703CCAB9108F90F9901D4377BAE6C97CDE60967D14E3EC6B10D98E9F104C8E63AEB603F3CA2440FD13DC057F9D652DE412B75593F784AEFB50AB0C011132F19BDA07BCCEC1811C425F721F3E61307E9AF93BB1EC89CE57F138BADD798A1D5F86A481FAA060B7A84824D263A8CBC706A614636295801B8D5455D78503738ED91F9EC09D989D53DBB520977BCF7D2CFEFFA4960959E6AC1860CAF1383E5A30EA096663FC770C4BA520C34268D63FD84D4EA80BDEFF9FDFCD1EB2B25A524528216591708D399D395466865662EF0AAF4A6E51ACDD82BC506D5D299D12D36F35DA06A1CD0278022445654A8CC20937DF4A21053529E27962315CF3CF1739ACB7EF3281011A4A93451922BFF5C8A1C547EE3BEA535B0DA13FB1EC5D98D05B16C1561FC6FC53E8F2D8A61D7B9236D322BE6FA894ECD789EBF68F46821092E18FC5F753503B469E1F2BC82DD1E72144E6E55BBF31B121B8EC8443E34C6199EB5C5862BC779B6FF4A9E78E06EE0E38C88FE937E473BDF5B0FC4EEE87D80AC5E76F57AC89553F49708C98C867FCE270B610A3DD90DC976AFFE65FF3B1DC862138943D9AB96505F67637A568F681EFF9A12FB0304C316207BD1FE3B45D8FAB834145F2047D0BA8A62C54F396252CDF0E6B62BFCF1078ED7FFEF9ACE7B4C23AA03B65466D99E0D5D6892405BFFACE394D85354DE555417ADD4603B6CCA2BCDAAB109D9761652703EA2A560F057C4346E02F5C7637CE96DC613C1991EE75FDB9ABD7172C9CE9FE106454E0ED8726893D1DEDD984C6A1FA7A9985D1EE7297DBACB0E5CF4E60B9524886E33985D7634E0C2318B82B338FBEFE91FB003310C62023D4EB2802BF9ABCE6E3D9F6410C43C39283F7CA8B47C763CEB79FADFE5A8E4B19433BA3AA2A72369FFFE76C2C5C350CEA071FD90C0936426033AE25D3CF4CEDC2029AF574CECFCFF6CAC81CCAA370CB457118E934F79E3B97B14D6EE38EFEEF3961A7EED8B7E75D28B8085ECD9C19CB21960BB5AA7BB29584B74F616111C7982C62D1B12D5E7356ED837DE641961A49BD2F7F6DA86EC43585F1BDBBC8A4D797927B63ED2F26487C423A72C46A207661CCE3D979A3804D9C208EA5D5D60EE790D255BD8E13E2E95E7072D0C0203E3BEC088A6FE25DD32925809C30E5741FC88D97E4C745D572AACCAEBBAFAE6A151BD633EB917FB9B149A65B837BA7B28E0C5ABE578E66F80541CF457A76D2C387B5ED611C683CC4A990E26C772BE2BA7C5C1004C78FE328C8C48FC250F3CF7337BC4F3A837FF086610E440729540CD282F7673C9FC7E41947DF425204A4F16F1E447BCBF9AFDCCA5271E87F1F82E63183674A743D7C4A4498CD44EF5943F83FEE1E796E1C80BD8A2B042D6CB3E1ED83F952C30EF466E3BD2414A5C25841A72BB96C920E6F7B9EB3F980C47FDE70700296A8BCB4A527459B8486560840B27BDB13CCC89994AC7DA93220EB165F920B2C174B6AADCE21FC0BCAF47DA9D732E637A3E795AC18A47E62EF46D628A917456C79967EA3A3DF8C44A8C784B9F64DE8D412A41F28084D9540C6B16F566652D0B575BFAF5F4046A665241CEDE872B26A2D3994F1414C686F5AF0104211ED5673CB3D3C76F9DA75812E77AC9235DA573F066C6A5252F6124AD3604B6F41E5C005061358B9F1754E31A018C0D57CAFB47AE201F23387EC5E0EB0D0B7E5E172F02D0CD9D7890D09E2A1C05D6DD4D1331CDE89C2D58E04F3E65CF53731945926E725423C5EB7A9DA4F77CB445636D3965360199B9855A46072556DAA2FCE88DF87121AC00602E06921A61055DF3950F61C7B99CCD2BA63B957636BAEF1DF677CEFDCFDD18649CC5EE1CEFCC94970742690B43861F610F398D90C30E6BB280C41D0BDD5CA1FFE176A96376DA325B4B3C4F8761C16CA26AF620D55394B9FAD73AD0A9E79CEE74B2849A11DF918EDD8C4E9490A27730CCC37C8F96B42D9C665387B4B90599C762454E9B7315886E46E9200682E4F4543F7E0BD7DD8D2B2B3ADD28CB28E910236F4B88ECC8031B5E0478AA5221A4CC3083A16328F1401181AB61C8D4927760EDBC2544972926188A53A4C1371B924C4DA5FD656E8000C4D7E115A58D232B0544D67602812CC7F2F4DFDC0A50A667B83F0C2D5485B5B3EA2FC8F939EE718B4371EC8B588704B55D75BCF1DDD75163747485C5534545489756E277477FD6E695F9B4BBA6EE952FC73C9E6A6E79F1E5467ABB7ADA9957D34506AF09383F61EC9B9AF2E701D29C7DA8378E18CF8FCC23735AB6EDE34C446F15510EE77D2941BEEED10801DCA5EEA80DE237927CDA66F0BE538206BFD5F8A34724777A78E29720D20C2931F281802996DED62C671696B9F273B9AC37A03E877126337B73E65245E2F3FCDB2FA259013B797BB6A1D177337B06F40822B4E4380FFB79A982ED37D3D8553BBA94F7A1751709B60CEA13882955B90B5099CA022771E48F57E2B0915B6BD67612B045821DEC15EAA45AEAE570AEA064C032B21ED11912A763E61B11A32B651FBB66D9EE6863C5D92613D11374589506055F9B17A0DA6DFC9C884055A438F44BDEF006DD084A98715AF0AC1AB3C214047E5CA518A9EA881DCFB796186F5AFA07F0E7D1F6DDA10A17321AE891A4FBD6BFAC23985C1CD3884A02FFDEEE2B3139AA17DFBE727FC4293D322741D09BC93C23B69CD4F0A0696538E665BA68ADF683ADD4E6D0597F02B92A27DAF33B1CBE5AA2539C5FC1EB024857CEDF3591E2708FA16FDCA37F00F16485F6BA1FE4B1C670645D628A9E3176B18B1CA1538377C09B3C30145B1CB6799B7848F455F94F873F64602A94C6AA35BCA5611212A4CEA2DB843759CA0A3F2494C3432142CE85179CA3B3B197ABDF0462F34313F7EF80F96C20DF30B3D5CD8337BF7BA4C95E302FEE2F8DB4D36B12D94CFF15086443991BA29247A712BA9CF9080FCDDF2AA6ECFCC83E1A46DE7427AB04753FD7A5D573FFAA1759E419D45A823A7E6FB4D233FB7B500B23C250AAA12E1A2B7075647701712FCAE64D5AA6CCA48D02BA576D4F7518DE3499460E98940B01E48A06CA5691CC500CD28C7E51312BF1404082D2D6734F89C65A03D2BCAF5040FAE6E279A76FF86F22B516B8C21C0C76598F1665715E802F99A0A52DAAD9C7E44C6B6CFF672876C2DEA15E88DF2A0D59EFFCDA73501254317BE0E1F7F86434B80CF9ED09100D61EE5411D708E5C744E099A7357CF42CDD1543011B10849F920B450CB39BD3D0F6AD1CB70407F1C4FD61EBDB66F690CC2F082A1A08022043097D846C146EE3967D2D0B70182C55900518BFD58C7134B4F5EEC7408D93E6C45BFC0C356BEC5D326479B459941F5C2BC6888F4D4536C912D91BECF0E0D8AC303BAE7BE2D90870B8B0C82372374F8E8355228203659B7A54EE557378048A8A7B9DB1F04E9CA09C551A327CC9B8622A0FD3E808A576D1DF5F1AD64B2172AAB16AF0F837C356318D395EBB6FB2E2F36ED022F3F564D9108FB656B1974E7DAA09D82678CABD564E39876F654799D89123D535C6E7246098D3E7A0F45D0306AA900261C38DF0A66EA2C18BA1ABE5C6D5389A5212F8B1046A0DB2FF639938B46D1951D1B6E24734004C62A41A8903B18C933A2F2FB166EBCF8D37A5A443D5EBE955DCB5E675E03EC0A494B23FE6919015F4DFD15F362A3C68E385CBB2EE56D3AB3DD73169D892D019BD499C3F9D44BA915B9261E7ABAEBA494F95482578D69D2C2D33984B41AA6E3C38D1F6531B11518CE131FDAC1928DD6AEDB42C3DCAA89AF167AA5CB3EA845E28E3B903F30F1ED5F4F973AFF9B343E8F2DE37AFD4E65770D346AE15BE7AD81E2B477184C12BA1795BC6952B881393BB9A6309270E588ACE04132AD6FD9E1F739D0FE6699006E9298A183EA087C4B9E8E57671B104EE5F90B78B93939D4DC3987090EF242D4F192164A2E08E1B0DF95B8104FB10DE
1
+ 1A399589A7FA0F24D60BD94F13E5AE8115690C5A589A312CDB7990FA047720BC82797471F64DD1F668BAAEA97B424AFC036B654B211B783DBD8EBEF0187D49B74FE42AD36551C46026A4763B7D2C5DA9434AE8AB15CDFD43FC924E60FE0F53BA18468531EF46D9137414A3BA203652DA5138ED819550C8013131BCA455D9DD52218372692E708E2A9A9A6273F7495DCE1CDDFAB4A01F7986FEC02B993AC0130210257B818DE3A4302A387F4224C0941C0CEBC1609C68A74DD2C614106F1ED6E6010FD1FA3F703D60016FC52FFA1D5928C480D4B5AE83FB824319ACCA8AABCCA056CCFC7626E140FDD7D93C355816C9022345D4B500F2DACEDD22FD2B73F92E038FE12487D9B3290AAED27160B8005D3CCEB482E7797823990C7FAA3C55D54DC373F6AF71C5A50C4EBD7BCE0D45AE006C24733131F4E3E56FBCF6AE2337BD64D5D5996EEB65FE7F7247E0119C19D2B0FCB201F4D6E70CE8552B76B4B7C13CDCC3219F5E62C61C3551A8E683888862D247C18EFA2B958654C68EEB6B70E0895FBB7590725BDF2DFB6B31F41873D38C08564BE80FE33A86839E1D1F8FCBD9224DDE5411DDF04D48FDE3481287EC7D7456DC75C2EFD5E7F2FFF2150AC310C462032C4FEECE38E827982419B02F20D0941FC909E859E8F2D34ECB2BD0F28857A14490700542D4DF5F90857C4F7F674256928068834170BF4E7EB985251383159125FCF0057C9A80AF7E4181A39CB0481313DC23F86B886D63FBD1D71FCFE962F8041A660E7D46B58FAF136F70B190060CB1ECA335CC044F4825E90DA3A79BE88E31480D0BCFFA4B921724C693049A8BCE898F6B77B1B3085DE9AA3CA43BA63CC580A2DE0D7FD4D0BFBE903683CDBAF92D0D40B4432ECECE5CE35E7F7A2CA9242AB15CEBC1D3A75AE20E1E35437FC615B39EE45AC09AC9A16EB5CFBB7787D4A8B9C0D56A2B5806562774F9494750E07D4BA0ECE4EB2AA7CA8D0356C79E01E33950711814BDA1F8C78BE4AFD32628E618973C6D04818FA930C08628266F27DD95CD6F91D16375E2DB08A324B080185062F74E8738E871840AE8FE1CF0207D3D79FFE9C006B32723359FC25DE9D5431617D930BFA9F12F03F854740349F20CD814C0F9956F34AD1D2019EF4241A17C2054F4EB71364733E31D99C6A961EAC07B8418A56B327960CB99E8410BE95BE732B5463A0C00EF98BE228200B6AD8A9A16320C6141E74D0C35D3B74EAFFDCC9DB9DB01CF2AD488788DEAACE6670BC936E051FCDA8CD523EB7D8F745AC0024BAFB55A0C69919766430048A772A3FF0BA727CD1C5AA4511DA2FAF726D9BBB15BED0A6B26A8D5B85954DD49AFCE1A4BEBE5DAA9F1BA747AD61CF414ADA792AA03770EC0FFEB7E6F3036BAF4E7D15BB3EDFFA7E5D2A2641785290259EC2553F0A85EB332E34C303B0EDBDC651308940100C09BA60B3D99AB01898E168CCB9C60A479CB52A375D15A25C77A42CFCD39EB5E2884569951B2B7D46FF859CA601FBFCFF53D139545D638A28888C8360D3F3A96C3485925889DBAF83B939BE35A81A26A4C33F965C0354A967546DB2EF8163CDBEE987BABD0782F86C1DCD8CE44A0A2768DDB7175E8532EE075ABE920EA6D534F17196402A06D4A607C7DB4E95550EBF03E1707D645F74CE2C59C188F85E83D9102A0AF19F1A21565C226FB2C70148B2110D26C29C74CDE39B5E80AA5A421653BF9A06E3A03BF163CFFDB4F3E2DA5A3DE25744D4EB41DFFF16AE05D2616AAC5CD0430F5817DF2C8C4CBCC64783B3D70625C6FC8E7352B8681DFE36E17681C0EE711699D1A81E684A3CDACF740F1F3F6EF71DD3000F790B1A62D6A9EBCEBE7313FE6EC0C41F61DCB519741568DF1F10362EA57D6E024079933456E33A19915EDA40E605D6A8498FBD441E4172E89C62F98823A2E02416A2476ADC0221ECACB0BC7B718BAA86D3FC3854CA0C376E5B658601EB52116FBF3DDD8FC0F402513E8022A09644D590E2FDD917FFCF8E25B2721F3BBFD56C2F5C9E2D1CD0DAE0DF943C8E892A39145D02004B5632AC5CB09E66A8E9A0784978C30A67929EEEB00B9B580B719CEB87710C5C665DC7B1711041DD4AA06F91FBB9DB8DA2E5E7FF4B371CA9E6033AF2F3462CDD692FF2B76C01BDBD34736D197E7CB192E5AF03F6754551DDF67A6A633E9B561D15F544B6DF64A4EC53BEB87136D4DD370B5B42129D1EEA9E0CCCB6CFC3062FC0C63959642D556050E14E2679F227E61F3C6DCA3647D82B0C01DE1D07BA63DF6678D8F29A4FDB770D8C01AB288B884D74C6516A00C542D020C8D3A732B3192DC7782545643A12D613D12D5586BE2FFA0ACE23AAE59534ABEC29C18298F14F1F551BD01EC6DA20A58D42C4936318566C33E232DE0AE0D0189C35D58C19C53630B128B30B8FB707201F81A3B9676A9BF30F2DC46C9EF295D0F5C49C7F326E85D82F4B4B4815CFC8A30A8B6F789C82080B5940357A85E2755B1F385C5ACBE44F0443B91F15B4EA36B56E9563C977CABD653F18AB967B195CDF3CBF359C8F20251F5D1C9A09F7E61D313909250CBEA8DDBBD57E5E82A3DDFB6007BD9A4BBA7CBB2F426F63469CE52E0C870A6A9778AEE20EB908EB13B86858E1F5D4F3AADDBBE9D3B571901E9130D5C879DC8AE5ED97B6167722E43DCCBD80DC0A7CCACD1B6C66F6D57E602173076AF8FCEF9DC27D7D10DC341D0EC85E9C13C307D2F25E7A9600909F8521D1CD298C97AAF14A3DBB7CCB2E8DF722C0DC15975DB15733B21FE34923A6A4D7484F1A781679A17EA698F8A730253890314566606274462C7BFC4FFB900D72D4F10AA915E3AE25EBE1060D75AAA9A46BA25995CF170E7AB8B720EC7BD36BF2CDC31B09640124FA4AFAA44ECCA98EE8C01995B9DC3A33B4598AB1EC877C0F1ECE8EC763CA10239BBF87A1951F76372964B6C925983D0737E70360F543DC4228AB8CD3D5840B5AF1F3FAA4C41DEE1963AE430A7CE3D7A9C716FC0840B65B9E81053638CBD5935632DDACB0305F0E9F02371BD9BD9ED657B1F79315A909CC6F4F7DF1E09F318BB1C9C52CF430A83070C633F04D8FF5ED530386695A7086B3D7336AF8BCD2983CD2267A5FCDF4E914F9BEB005A472BBEF8015EA8D3AB81C98E1E4C31DC263E3783B6FDACE71FBCB1D82FCC67F14205E1B9EFD534D3A74E80F32847E190BDF88040DAF4DCD2093BFB3B97B0CF5E5F1FE68B798514B25F3FBE6C3984DBB861AAE46919FCC6688BF2D8DA221FD1ACCB92A0A884ACB95BD65B6C4B4AC29A580DB529F1B996E1D4D53FCECAADF7BEDAF60282CBE52AB21D4EA8B7C891083F105C5497692D8802157A96432AD3FD73F52C290A70B0CD869946713AB05926423A0D48169509FCF9C94E3D13E512D51D1D13F087BCE4A7126AC1A41F9A9F4D5EA1886C8CF3975587EB1B6A36356A577027033A62F3C4A31A3B921411028F99CA319F584A39F71BEB43959B262DBBD04F36835EC2AB6DEB711DD2E5D93A0F0D23089BCE26DEA155E0640D19B627E58B1659FEFFF353AEF812C83E1989706E0ADFA225226D5199F35ED74AFF1015AA18364625935D523D6F8BF3DC1ABEFDC59C06A7D4DCF4486B98F73E2D6E75673EB93DF7F5B484FA1DE1E034E944E20FE107A2C69BC83293649C78E6FAB11E9EA68CA5C120EBD0F5C18AF08B0B1890A7BE762F19D2EA7B92EEB7AD876D0A85B49F6E9B97C7CFE35C087BADE591997F739CCA263F41B8770214EA071B7F7E9224F64E45C5CCC8F073CF194683881B49F95BA41841BADF54B1A2B00E5F69AA8D8358F884FC1B3AE32B71E4975F0D2779281B10A00A3FB92ABF2B8AF185947460EB832CFC00CC6322BB29F24D89BF4F83FA979997AAF0AA853F140F2063BA2F4496ADB6A8D45EEA154F43888306D3ECDF11410E463526E0A322E88A1DFC994FCB2BB447E394417A6C912E7045F29E8BC567D2B25513CE64AC0195AA941ACB24ED572FE0E090A04CCB1D3AD69CE60018806A7150F44FD6AE92D5DE2CA2BBF02F2E2F7CD6496E9021586FB766B6126F6DE796028989FFCE0D58FABC18C666ECF9A4EBB194C4B6AF0AB0471DC16FF69C5AC02D3BE0056F411225189D9959331142EAE86EE061996D4641CAA8897AE05C9B67DCC38ED53CCF25F5321B2910C096E34AE1BFCA2F818AA702C7948B3E8440F76CDC80EEF2F964514CC940244C7219A9689DF006FB90DC96ED3914CFEF66AD69B65259FEB26E4F0254BA9FEDFFC968B40A675994764079A08FB3140C21FF34C1A569B6E27C4C003EF1378D478089B5EF9A71E16B052453590ED82DCB390686F48594A25B1FCC4145AC71F4A3445B95519A8A5E7227125171E6D9299AF02BE105BF84AF2FF01131F13FFAC16C6513AE71A122C3AB6797F80B9A38CFA9EBBDC822F50BAC5A024C10CEAE2A8234002C60B678232365EEA34B05115F3F3A26CEB8DD9B1C437D3C7387A49C59D1BF812A8D4E11A38915D2CB230281296349DCAB679680E768A297C78FB6E0B038C0BCD5E06BE867AA69DDA903959E64C79A24A1920BFC087A401713F12B3EBF89C0B6178FC67C30311B03B1C7CD27E32CE116F6266D70E554966B6067802FE4738B7A321CF3B1BFE7A908E9464E4FAAD96539AEDC2016A9D2344298DA3E161143A207C61F3EAAD2BA5A7ECDF377152A91E7317E693CEB3866E60B5129C72B4360EC7E7348B86D87A2EA3ADBA8DFC40368DA3D8B779ABB63FEA246A335028727742FF16C8E6F33922CE2A3BF724A9D47F8711B8A00374580AF6AAE0A00111A422D41E3D2181321787BD55DE6E215591CD38F197D29130EAE95E23440481E3DB1252473E7F5B3D1F87BA35C9D3313DA78DC56ED7D054EFCB542C85555206546B48BC5720135A7A1A2BFDA2B10804289E0289CEBAE5077EAEDC0F7EE85051DA0BA831C5E9D1F28673EE1AEFF878B61F242D291B06CA1A9AAB7B265A727700CBDDA5E5CC6FF7D000A8EF210D8F31582EF1F98F2A68855F65A26D7EF6A55E8BA9DB77C288E6EEE14685E4A27BC08330197219E07D937E9E3A7476848A12AC42B4DD0A095B64B3624818942AA9908B66682F21A5DA6A1659691A4DAA3FDFE4FA54A8A69250271D24C5B147B09EC8794ED7BC94BDFC13B3061FBFCBDD9D5125FD770E72C6653851FE0EB07402E95EC4530850BC1A1CFD7AEAC4B299B3E01754DC6BB5A28FDEE7B9EF9AAF896415FD5168104B1CC78BB7081F5F38262EA6B8FD00515B3ABF662E169081D751B0FF570E630DB5D0C0A8BF1D9EC5611F7C759F6BD1316BF183682CB2B56D7A7752936A4CF31DD4863BDB216E862C7B082037A90DA382D53933CFBA2ECEFB7AD4D3A21CCB920D2B1F707F4725BE0A0384D245EF962F4ECE41DC837143FB290914330DB6722B48E807377BC2084BC8DA627E3137E566514F99C2C417D3A8F38ACA20643504F5843AC457997F35F9DA35CEC83BE9BFB744317B8E0A6529DDF4D80D13E5AFBE77DAB3D1A70C5ECE1ED0CCA7CC044343EFA1879B31596ED7A60D7BB3C4E23FF0679757E152F3BB3822F34FAA2C25A1F0F2F8441D8BF32C78A5DEC4B346D8A43950DECEB5F591C1EEDF0C2CECCE334760CAFCF2AB8C706B52CE67BB9E55F4B505FE63F2A9593932D2DC8614AAFFA035996EB4AD4A19444FFD2502EEB98D9112B50618164403A749EE0DF819862FB25BA8217E69A79055BCC64F52D40FC59CF007B1CBE7B1393DD3B107E45AB94C02C970B2C2E3F78DA39215338F7D415C34F81C803C10E840B5E467A0A07E02EC126FD9D6BADC609CA41B4AC836BDD5321F4F108F79C9246D157AE6624265D149E06C14CEA17ACBF8488BB427565FB7885AF177C0DC92D12B1B44FFE3F9C1404039C895CC86089E4A3CE34251ABB419A48CAB4AEA58D6EBA29C94B09104E7DB7CBDE51F8B9E0CE4774AFAF4EB86523B57305366951858E20E54D1903E71205844009BF245689F1A2C1A06D68FE3F544C864F1D628799D2EAD8039FF75A359DC1BA631CEC322D42192DE13206440736B56220D9443DB03CE912598CB105F847303B14C684B4E96472A9A1C54A39676E0BB80CD972BC210DB2EA173698CA241EEF789100D1BD40106D01F6ABE39B6579D279293238B585B9FF2E1465E6E2EEC0F7E5AC1F11762C059483AE60C6DD315A1C20D8447F6373AC3A9B89D2B5C4FCC932619A19AC3895CFF47174B1ECC2452CD529C70E91F146B3C94A75ADC6E530800F84DB1BF1017E61609DD0BA38C21F934330EF52ADD2369638959401A027C880B17C0EB658AF539A86EDAF386EEB92FEFEDD5B27D695689E1BB46B12CCF3139C7921156FC169AB3BAEBCD9642D3FED13A1C9015C98E44F989FFC75CC096E583FF4D0D1E46032699D0B0B8797A4C863F077B9573347B08926D4B08AC2B07B09A31C416CECCCEFE8F743C963F3795BAC6767332A402026D25AF5C31C8931C5881DA75C22A4EE02F5B90F64722A931D96172A5E731996DC92250202BD57E35EC539827D1E8FB9AEB312569E01C0B85B4E6F2CC4D4EC031E84D170DF5AA12A94649574E711D9DF2A4C952CDDB780F149990671505EB664848D19D6C7E92C5663D8D85F9EC015D19D386323013954F7F2E48A4315EEE746BC02C70D61A38A8D154DC3CC5DDA269610AACDBE83C6FC99D553DCFDDC6966001E4444092038361F7F37FFC52594D11F78D7AB2590AB8BF1C6025217C73AD84A9D693992BBCF803534C72E1F75609C00D7390644E5CB0BE13E4CBDCDC1E6ACAB478B4FA1D861873D0468211DF8385CF35F0BA07DDA0BDC5E4FEB4F4B599DF46ADCDD4577B025B7275AB0786B244AE589A7A35DE0A12DA3DC28821C0FEDE76EC5AA80F60983644DD63D95302A090654E3BC0088C5D434C26D07055229702C556277D40EEAD04315C7E62C6EF208BC0A1C3F679EFDBDF733F136C42AE97A78D6B629653BDB2C4483694F6742C05B0C2630FD77154125DED050E6790AE1C9ADABF1CBDB86F27C07D36A0DB2067AA751D6631F2D300589D3F5728DB7B2730D9D3E97A6D8501069A1D294B000AF38C02F8AD6BCC5CF88491B8695D4EDC9A44B2C5C6DDC9484841609AFEA7E8F3F667D7762A25CF2F2C5DECC290BC0971C520CF502FD7C3B3775E94DB093752B704B0C8503C0121055BFE23C0B721B32A875C0187A5858C90A5C7EE057C12E3D3C0353C8EB7321E2682F3E04CE14ABCE63ED67BC868DAFDF8C3FF62870ED6AEA4B3C9C995C5A26BD685989E573CF194FD04505E73295A56367FE48CBEFA075C305F00C95D9DB41D0B8408E31CC024D9038D49280F439E99F693DC0140FB9C3CDA1022711D5EEF5A36BB147CC18C52986B0A007A14ACA7CEEFDC5F98A894523D0C93DBD0026C9CF5F01F8B8945C72530CB4385697011743F28AF2075E32DB57D5CA8224D476DE46316378C77FB4981F9E4530E4B206CE460653843EAE99A791EC19893330D6AE8142117BE7012398CC8C8B92A262E59AA2077C49B12A316E1E6620B59D4961596B622B122F9A904383D936124B1D06BBEF886162ECC5540ED68E05580D81B714F336F88524F85BDEAEDE32E275820BEAF1DC4B78E32C985EDC6B7F39C62C0448C7EC08AAB2697E8A8FBDF90A9BC97D5D8F13FC1A425508815B951CE84A2580C9EF3FB1229C3D0F0CD7C8F73A839DA455BA1518953CEADBFEF097DCCBADDB992464E4DB708027686EAFAD4BC057D110DEC16786D29AB7A40CDEEEFA57994DDB7B24C9E65D15E7A3069CBB88C7AECE3AFD96B88A74E95E7E662D2ECD617B821B3F24E45D63FD0180B5E1A4724448BE3DFEC8FEFDD7AB6E813EFD848B7184C596DB14644EE4E2D0C788589671EA7EA25E31A7EC7B0B10E64D28EC2A7B047DEEC3E50379668410E906B3053BE2A881236C3C065EF2739C87A35015523CAD0F03B3A7E9952F393458A020AC0D0ECD08E5F817F61E9CA28BD0EF8314FBE4C4AF945D43DD49E73F1C092AFB78259A4ACBA964AB7AB518CD4C386D21CD7B9ECDF84156FE54EF02FF61667FB4C49F1BA63B76E18CCFC0C63F87220AA5BD14197320653A1436B243C3CCE9057A1D587CD32E13EB9126EEEF5F60904298C5D02FB30CA4E37FF10EBE07518FE4603133C120DB21DB2D86137E7F25F1DACFCF3608BCB5386EE27B98C722CF9E8B97BEE5DA9FB12C4535FC6DA6D22ED792E12A508AE72EA79DC6D4B711285E3D1C852F245DF0CD45AE728A1470D06CB9B979B1A1273F3B54DDA4617BC34FBD2D26F10DAC72843A98CEC0E214E7592728A4790C3002E83525CD01FC51C00D49BE98772673AFB39A607B034232F921168893C4DB6741B06A7C2F1617367A97044F70744A1DC2C71FF24F03E665E8511690148BEAEBF93B95C3CADD3FB99B0FC5806BBEB48D6C3E83DE306B498B847BE2815E35C866B689A79158294FB24C53B4DC5F3A05027A46CC6F1383251AE00799D7A6602ABB3437348C2AA913B8A588CFA15AE40E374AF78E085ED78C4C1F7DE43E1AE052B87EABA89C787CE2711588D04872BC5DB2807DC9EA57B2AE4F036F8B9279855C780EF160441FC952A235D2BC2201F902D6DC7646AB34C99DD21383754D6DCD54B152E704BBFE158A67C05348F6FA8554EEF5881DAF408F9934313600FD193277782F58C3FA88F5B154712CBACF0E01FEC444AF6B834AE30911BCF668557E1B0A0279AF34775E89F3CBFD28F7A9EEB7473408C24FBCF75733071ED6809AB358C021F9871AC3D4304AAE77DD80AE59BF7F7CE0BE201D27A395915C6BCDC27CE1E7C1C0AB2198B3911841A7DA42C912E24C569DD359F41FAA5A97EE09E41768AAD4D959C9749D8F317A523ACBC9D47320E58D609DF617DA26925B208CBE34D9F1862A9D64F4CD6A1F8B6C3F83E85F78A666A50353FA2EF6F6A454ADE1F23390FF493DDB1128B509C883FCB0A5F23C5F3ABA29DCA5F94D97197897B92DC4B3BF004AB4E107489E5069D92202E41F3E86AC2EE27D9CB35DF31AC8BAE95ABBE899A41DB2137D5B0152A652A8CD1CC2FC223839A24E2E3366252F7D52F20C073676BAA7CE9E593517C5C8D0285CF35353E8BDDAC605D14A98ED2626D2899B244924E577A78C8074261B570B375307B5E1466CCF7033F803CA7A210E56D7B7BA203CBDF80D291C3B03AC171C0FB4525B23749A357A4D2F9B9C45C0FBD1594F4E13F0379423431F58BC5A5A32E4BD02DDF90F282A7FF3DE1B40B446D66EDC2CB54D0A5F0095CE3B7C64C45CBFE0EA343165FB3B7F4E6DE55963F81B6923661D3F16293232BBC754051B4A6F8064A4151E3A9F4EBFDB8820F3289E4CD12B98C899084E8ECAE34D721BB3D64E206FEE2982DDDBEB10C2FE4846639ECFED88A52F0D3DD467B442A1219534061DDB9D3C6559C4F3AAEC05365CB61CCBDEEFDAF131B9F2D008BA63F31B594220ADFB54BFEE7AC998D49A37797486CA189486A07CA5D34828DB651DC989F51980F4D811B83FEA72D403F935AA1C2CBFCE52963324ACBA9C31A2B2831649B520CA4826955C8C5197DB2604720D632C45C41CF72C7CA8B7D35C635E3F23D8A4650E30D2FE537E4895281843669A07CBEF5231CA2D1BA93949D7097A8E10A1F4D86173FA2EA129A31D77F325EF49C042D13F09CD539DBB4191A8AB1465CC1C67AE1D4AA3B0A822E127F240E0A8C2938382FF7E1AE8B51563B35ED2015F14F0B94E48668A8941B93F5AB7A0B9AFB4508C9ADD3DDA48B8EF67A9EDEA1A7AE6D21AFEB248DF842D0410EA4CE9E055F1A59C650CD5A7CDFFA2596AECFAD88D46E3FEC19436AF2391B217CE9297A831871803DEEBADF7AD328929DBC6C51005513D2F96FC46BF0D895858FD146988FC3FA19444DFB7950AFFA1FB35C748BF30B11CE77EF45297E5756D8FF8FBEE273674111311CF5D09BAB882EECDCE540F4BBD86FC3805CD17A5ED661BBC9326F1FD69935C7B4EA8156A12688AF34C675A4B27840288F7A78F38F4B75F22321F7735F315736FEB1C02E978AFB89D99908D5F5B400556509EB963BA6DF8B1B17212980D97F798A9A1CEF4EBAABDE2966D1C7AD4F93C91365E863D0BF5653B1A0A168D3CB7546CCDBE87AB4060925FC4919E880EEAFBC3BBAE84213B43E5CAA2029C51CD0792E3820C91952EE6372B57994840AF3E65EAC43BD73D6BC13A69D6F0E14FC31E14FE762FE65E47436FB5CFD193647DE472018382146D6CADECEC8EAE017052F6BE2709B3B644089E205BA4B7ED2AF795F0043FB52C4550EFB675A2B0B928F48ECCC2920B51D6343ABDAE0FC81E7E6AD0A102726428E62CE0AAEC917C55164B06AB98B01DA04187591D75B170ECDC6DD75B0B7E3FB5F33D4A0F5556A558F6FE9172B345ED6F0113C0C70B59F806DC2E4F3C436B2D7C19AE792A0D6A05B46CDEF9387596623077203EE267702E2D559F1F11235D4ED04CBD10417A4B679BC42AF05090114562221BBB0BF94C30632F5A5C0A5A0B215AED1BDD511A4CE87381D68F79FF04AAEE3A079A593DB26581718A36827BA6323FCF13261B4DEF6533C97B7933D9D1098DE129503B728ADD478019C7FAF7D1420F256AA6C194D662B686CCBB771942AD2ECE8C796A301A1E8F9C01F2E9FA8501B787771A1CD2E0AE744EB150C561D6A51E552E9C71B7DE837434D9F74B3529B25F0E789D9F5908E993CCF370B4161A5D4329AC494F5A4E95025E7F10F6C2DA4CAC05E1469F15114ADBD4C30DC9EDEA646C8AE801CC12EFFFF212A64C6B54B332EF33B838331AE4ECB90658B1975099E47ABA41B65D6A3F7380AECBF8AECEAE6EED7743CAABFBD95BF16364F4E9EE3DCA2A2290A368E1D4DD20EE587DAFA16732F1C90743F4BBCD575521105CF3F35671515C32E45D90D4FD5AB0D7E4A474CCDB2CC35C3BF3CECBF4601B137E6EA8EDB9E12EA2C0E7CD986D628AF6EE68BE1C6E54D2E462AF0A2C06104DB5A7A82EBE918D227A579F99D65B20AF2FC19DBEF9A51B2526DFC1EAD0893130B9860BDFD8D017A9F91F093F91F93DB2C2E7F83C917C27B3A246F9CCCBE48A33C967E459D0DB01DB0F1447D1A95810956411E231FE653F1FE9C1C5272084A91CD29258B99CBC0E1A31EDA94181CC9C82781D6F136BC18AF6EAE7CEB8840634086EE4130C34425DB972C4017C0353DD1175BAA229E502B956ACBBC36108F7124720F11FEACD78436288BA3439F2AE2A2D269DF635751DFD005A6091A199D0FE841E9C84338E05CCF15ED6B78CBDF9551AB4D4FA290666FD8E9413E040F0244344D61ED1043F5D9B8D9BF70BAEE66886EE67E37AE2088D66CD2FBA48C4FEC9645D610F118CC29F2F5BC4A62752FAD2DB9500D52EC996D9D312BABC01EF561045B285CA30AC6BA0614E157863025DB6ECDC95F64898BF778D909EF7E514EF80D8EA53C850FC575DFB09F4B6F7DF2313BD69FF45094D0B51DFAEF660771BFDE5A6C4A2DB014B413AA6520E33D5D2AE1BA0D0DB4E3A8E3089910815DAD3901881F5FF3763A89D882937F3BC29375404D48C3ECA3AD652CF36B01D1A1AE7E7753FCB3429B72D4578D25C26E6A943BF680850E32BF6FC8CB122E50BD01866C04A71EAFAE67AE8646D1EC665DEEC1E21A1DCB4208301D50007C7CB33FAF2A072992649EEFEDBF72F99EFF89AE8C108200DA84A1552027C03D6F2334D3C3A3696AEB03617708009394EEDBDB727943D644A445757785D903C0A40B3121D8DF65344F0CB840774EC839C5B554EA4D866A9D4AB32F7F8081726BCD0BF9852AFDCE54A333EA42EAF020E587D7AD063BD7B23F1BC96C4EDA1DDD5F49DE1CF61B006DB7AC7FA7D82A7DA4E15951ADBDE028FC00CB64C017FCA245A4FA11C2D1C820412989955AB9F2F095B7C7D600AD15655223BC4ABAB2561A9F22B253ECB7A132B1D4F129FF37141A39572DD849C8262CBF2CD6B505A2621A8F55F30D844678DD0753BEE65D954675D7E029856B0F896862427A07D40CA0D757254F1759BC37AC9B474FC533AED7D483B31AA3E3814112D9D21B54965A515F59770B96D496A6C365477637223DCCE2F03295FC8B9B89AF8253337978B44BF69B9C641B1726DB7F61D8DCA8F41B9255CADAAC261B1C59EAFF4E98A095EF5FAFA4A3B2BDAD69BCA1FD974FD54F44C37B22CBD969AA21C067DAA30A88D50DF971289DD29D8375A93B6FF112199356D2462FE4E9CB310EAB72C72293C3C3C67D58FBFA02C9B8FA7D38DFC2229779F49C0323A38CFBFAE074A366D19A52CD1BC7D3A42178AB39C9B9A526169710A36D652CBCBEEC4EC1772C3A22751516864924F3154B235C5E459823A376E910264D048A6F078038F63B100904CC3E165D9EAF97ADD431B20A493A0F09BC199953A7BB8E23C06F5A4842E0EDDAE424D378A834CBBC25F678FE037138876364B620AB5DDF7AA41E15709A1E9786EEB53EF9991BC4A41EBCE5607CFA44209ACEBFC63387043F661AE1197187AACB03F2F3614AA8079B1E87989659CA8C393E53323818E18C484C7DD35D173153F533ECAAE802E97A66F41E4DFA493A0E538C80EB0987147042AE2E57CDB41EA0AB02F25FE1CC603DB7FC27D4E80C52BD0708E59683534B2BC47CA5A45ED66C5F04E98B0D8BF561DBB0433E466889E28514043CA0EBA922A09EFFEDD88663BF420540F109E69C0751F2AF8B52ED5BC3B7E8F5238873A6042C34D1F200CE1B72C63F4F109B8174E73050A0F30958CF5F759FC1ED64160B43C7241FBAFDDDFFB6F7522A7FCB4EBC141D82696DA3134E3B7F8116BB4A600EA04D7B9F70D3F17D763BB596FCBD5D3CEA6D128C65F4A47542A420A0EBE231B0EC5FAEF5BD70CCC5D91BC29F2F6C235BFB1073F51F45F75890B2DA3AA5DD626369BE6BE0C208997596CBFE0E8CC390124F8C1221EB02617F19E08ABDA9870AB30B24BF9DE06BCCA386E75104D9A01C3C28E2BFD462DCFB4BD5FDF0E3F131B4B9218FB66AA4EF330CEF9B81F74683EAA7C5A4584B2071C7C44077521A5FD66B600496CE2B92CE78A8D1526A16602D8D1323A795442D467BE7D23241ABE95A3AEBE2937F98B1325F375AAA492E98C120FD8973B7A60DF02E0FCE804D67FB21E97730A300881099B91B6E1F972CC7B702039FE1BEDC09952858AB69C2D9ABEE9E6228C9DD94F6EA1862ED21E268BBFF0DC82A07C95A52F19748FE74DF2153E7F280BF742118DAF5C0863E53165B7C6B4FEDC877BEED2391A19F4C12F15DB69EEFC586F9ED0A7F5FE6C47623555D34445F29AE276147FBB820D4DD22C6FFBBA3E6FA714B3186DF3B5640D17C57E3B7032E001DAB317BD1CAB24DDC084C09DE45C7AC70991F59AF7EF2871E097BF2BA1D4D5D8CE51663684D517502074B8B9E33A08BEBCC9F617574790F9143140E63A8779F4DD0FE18D29A56B8EAEF69D48057B158CB9BF77BF2FADCF4159E4A213CD4601363903CCB453887A3F3CAB0874D33DCE6E0A0513626FFAEA8CF489957F345D91702A2C7C09CDC05620A08FEDE323006D98AC331C0DE9A21CFBFB1AD35747233BEF027C09289AE58B7DF1D21BB92899A81F7FFA08E653396C9FFAE2E847E615BE3570060B97C28E10D43724EDBBD77B2551013E872FD9DD88B2041CF8F5542FE8A128E8078C4144B16F96E292217168BA4E19C9BFF56B068F7FEA91CD335FB0DF4805089492382D29D222D2264980D4D568A4C6FF4D0FC3DD2A1FED8CEE9CF9482E50EB0B489FA99A29ABF26034B1B98EFD72920BC50E1E9BF7DF451FD0983FF441E8750BFC3114A96A874E82FEE74915255BA3A60E7BEA50C125BF4C584D88D2B4C8AB096CA255FCA4203E458888AE27C8F7182DE4C9AECE7B4D208DAF49CA78C673D911B2732172DC727B13ACC7ED459CE9C18FB51E5374D5029BCE0F97C85AA7731F70E42B68870D4523176EAF6017BCBD47ACE7F13B85D31E561AEA0156940683FC46EEADA2AFC19A08FE7AB5818482AE1C9EBDC102C36F6EE4946E3F8EE81EFCA1964E1D5BC9AB914D1B615AFC29F12CF5F75173167B523362F7E147455559D15C4A386BCEB8C00B73665A3AC58FD02D1367901F089D74BE5A6853367AB88344A44C1210A517AB146001C35EB0378075DF5369396904F8ACBB49C3335D16329A8FEBD7561F2820BA8EE132A56EC956732402C2C19BED1D42C09C5F732618455916802914231114050B8D26FEA3E1ACA4BDC94E1AF136670C03FAD565256CE5F00B1370C87F502BAECFB140573227217D0013AFE6F9A8B89602CB7C42284CEA6905057FFF13AE79AF33D38EF00CCBCB21D621157B571A874186275CD73887DF81FF9B802E55BBB908FBB6602E8D47B3130B60152F34E4F834700455EBE640A3EFCCD5EFC27FC49A7802FE89AE5B5B3D73F83E91B4F9496F150E487501A98E3AA8E96992A5E2940DF04A26C35A7BEAAA1195ADFD75153F29429055CC08D0DB0567BB80D17D54AAC718077EB64ED7ABE88AE8B7140C730A7E7CF17F0D928C8E498BC833C63C7861ECBCEDDF0AFBFB7BB4A8A7990D5AB9E92D05B1C824A214F0F4B60626979074F8393C2BF8CD1E19F9FF2A9247ED266943C83B0D2584F4D84C6E34D38665A04D48D1876DCC5267440E0D1EF72A309950819CA6E8AC2A1B570DDDA61B54EAC47D041113A5154E5EAD606B7D359E11205E1E7BF7F76A35058D70E622733C6B4C5334407A39A3F95EBC261A7356BDD7C98738D6C696EB2052F1F9472B3B67E4FD3BD0F837A9417D881D070205FD2AD0785DAF29EC0616B9CFB1B571F878CA00DA0B3BA59E8F77093B40372235B5F160DD1F1EB43976D43A7AFAB67B78E1C99BF3C16F93EC1DE7FA50CC1E205FDC41E1ED72D3579117D71D221625D86D0E05E5E3D2AC7A19E1E718BE5251C73FB952A00776D5A9087317BE96A4A63793F412D98C727AF8467DA0C639975B64A4B0487EDA26F7753B62509B9A7F26E642045EE9491B3F99E45DF3F57B8174153A8A740279A803D15002658B0CD7EE75ABA7C6A3CA51F6BD6C6275BC40A82FE23C62F263F9BEC827C5365AB62A66E8A858895AD3D66A0FEC76F4A5C5E18156DE2B1B6DD8285FEBA547FB89A47FF61E7D00FF32D61A22477C5048D73DD3884FB8B238ACA927E8DCEB5400C9162E1DA9B2D4A38395B7425148D230588E6DD790A4E941E5931818343486B1931C48A66C8ED44812A31C7406D4FAD2A04D1787FE9C6BB92044E1707B0C67B0A6D63E2EC204941E6007763D0F63A98F434BEA4F0DEE2599D2911DD63020E7FE69E29AB803DF8C8B36E4AE305D88BE92B438A7D9CDDD42860BD94B5F9AF20119DABCF7C189C0E80CEB50BC2E91319E4A703C7682F677D1742857717F5DE5712C153D2A25A2789B20B7E66050BE5F9E81D0424CD08F07B908D3C7B31A702A6000E3A944099A7DADE76DA35C79232DADACE6C2F9ABF8BBE0EF4CBC35D1E1B4A59AED156C3FA548F5709610C40A2DD53AC91D0C62F1003640A5EC13A29BC986989AF7A424C5B4736769D7F9C6A89C9AF4063A599E7D47169763DDD21E35BF69D99AF9892B11DD2B52C2DBBC85517EB36F5E75BF0365BC94254664EB4474EE20340AE6242899EE5E670DE4B94D30FF65E9A3CD49C90A4450F767A4C5B883F499CD3C1C3AEA882016A05E7BA6107F4F644A74D151D9D59B30E5F48B33556799044A4BE40706A0B5C45D79968C5FCE77382F34D61DA88A36C426F463ADC25025B6B70B0D8E42B7A01D1A3C6BE1A182E728E17799E36AD27F23A764AE6B07A708CD568B6A22AC7510A70C88162D55E4DDD690795BAC83D9D14960F1819B8541D049879E4843B6EDAA951E2741BC9C08F7F16873A8CBE9E87F1E9819ADD9EF2519CC8903AA93017C519599534557B9EC46ABD4A8B7279F3501003C61F9B5226E664FBECB7F74EB62223E1F44D7CDB101F4EE8BACD33C6554443B72432AF2521A30813B7F8AA23CF10F7CEC3E822374A52413FF5FDC2C6A7CA725C71AB204AE9899E73337CDF0A7437AC2B7201E2B0A0CCFA1E67FE17BE4A853F758546F86BC8B1B7E6A65B1D17CAB849975C854EEB1C873099E4B76CFF06A82779602BCDD16EEABB2BCE7E943283E6D63B58A36AE0161E4BF05E54D21B1093C569B8B1A5639FF01EE12101B8BD29F3787B3805B92E7DC47C689B6CB1C7334D068DCBF8D26DB7655BEF3276D8EE511EE9D4BBABB4B90FA8ED1E3271AECE7DF58D9338C2C32C7DF77BD84C32E938BB4BC59978FFB04B4303B6C38451793842B07CE2393FF72C69EA0AC118ED2601B9FE917646410AE8E623B90698FA033BBCB05E183D0A344CFC7C0AC34364804149C71A5272092E8C8D54F8F6626051968D0C02CD021E338D17412B5C46FA7326BE31B74AA737B5379AC57C07CA4EE0FBF193111804A6424E56B1AF3033BDC88C3764C1A39E7ECCCA136C294FF9104051494B75D2E6266F3F0B207FC232C96A4EF31FDFB1A002BC23A4EEAB99D74A15A4C67D6C05513252D8FE0AC8C27C4EFDA947ED8611F3BD0F21BEBDEFC8AF2E06831D767AD3B5A8A9E0BAB08FCF8D49235F615D94A8AA0F78828368830DB26951A3E2AD46EEF47D0D14A290D2547BF45534A035CDF91E9BF2B242641304C69D3310460006D89772D7BCD5ECE6D0312FAFD7FCE94D6DDE178CCA56AC407F7427B8E8A520660E85B47484954F25B83490600410F3A651F67BF1B6CA31CA614A6DBAD604959BB5BD3356528B3DD5F8792FD140AE9301685DD92196B5190DA75AC408BEA1326B9D8291554EE2496091F762BC9F15D3EB614D254572624124E09EC7803C293C3B3E35E772B3125AC82157FA4E6F4204C653025C0D704A96D66A34B0C4B7064E12E238D793829813D7A6C1A9162B2AAA3AAED4A81F33BD63D9014972B29C674FFA28BD07C187E6FAF311AE145545FBD93981A4CB6E993EA719728E3F0D94372A4731A7500C21A8F7E1645D865DE1116FA31551D9B3204C50ADE58219DDEAACC6FF432832E25B8F2A3215FC6BF883C7DBA5A81800F439E65A3C788D5F8FDA2CFB5D6CAA4376A49AF552D35132C7D8B6BBD771263F6B0ECA8DCD7FFA5CDECBDC3FE26974FEF8439C57C80C397C5E5F9C35CA4BD81B47274D51AC745323B18E48017C2C681A83C8FABBA51DDABEF902CE528C8A25D6E0056898AF657648F32D946CAD7E7900C5E3B708CAF3744CE6B163F36F93661CF8E1ED85688BFAAEB3F025069CC24EBE74838C4524863B4C0D16ECC3B13C490314D6CB98F7389B552C6B89DC2AF92BEBE9D4C690C7620F28599F5A0D15C9BED563214530A8399B5B58C76CCB14D006DC9F2A478D5D0D6FBBF164BD20620CC5D4EBA416E8FAAAB8051F4626CBDBFED3C0A7ED671C0953BD25EE998DED167724C1E8201227B734A6D2CB9E7A9E36D28EB34817B0AA8788035F66850B26075F9A7E7ED0B8D146A5896E461DF5C2FB539DF82A65DACD5E03304745DC9B8DD9C0B992F507E3456BA24BBA3AD00B64732BC1986E5A577F09E0D9947925C148AABF609275AED208788FF4FF0E87ED14378E7F203988DA4AC67931EDAE683C39D0C8EEE9462F61E50775FB8426347C44A2AFFDB2313E8A40D1CD5354D3BDC1013887EB0A7D69EF37F07B6365A4B6BEC527FF7128ECC60538D225D403BB9D7A9FEAA0E5AB86964C8F463F44BC937EC81D0A026CD62E09AC8A19AF2AB83F10401FA751360EDAAA2FFFFCF361F1C8C6846EF0C7E764D1A8519226998DE96526F93A74DDBDFBB3DFFAF0C8CAE0E2B2D20F8C2566519078DD3394843B9FFF5F4C1387D5EDF55C87C28EA9024281ADC52C0678E22A093A20BD299368F754D2C1521B0B3C3CE55769E68EEA8888C4910C73E68264AEEA6AF1199B99269B8B3BF20F73D5E57F1C9A617CA0F6645EA053EABD193B059DAC0340C5635C9276EC815A7F57D441A5597549B88CCB96FFB58F0ADCEE5E82F79D3955B6C9CFE418729E0D38073226F7337BA47BDD2A28DC997EFBCD4F184064DE5E7C96DF9FCFFDF99603F69D9C581621AF7F49509C55AFB1D58DC9E45559550A3AD700BD5E65F2F886799E90FC6D51BB4AC5FE065BA24C35C1280912C75FC830721CAAB7DC45430051B69CE89B9B84DEB33C477D8F8C801DC24677B9E27496161B506EA3CAA7C84711F284ACD0E46FB453E881D4AA563459FF6433CE453152D115197B3ED40E8078DD58762D93A49CFC4A917F37351F72D84646861C06EAC5F5F6416BAB68D1201DB4B126BD7BF5D4658DAA1A47B517C1929C27BAA5E26DCD7273900F6D65F74CBE9ED35BBA4D47E0734687F42E1E2878ED830386E5565D9D1BB6D623926AE036CC9246129FE84092CC1DB5BFBEB5E817DFBA974BDF41387AE105949B74002AC2375C2B1CD8B8EE828E2053F65311ACE252051E419F4B0E3D95B4D7667B867CFABC94E55E383A796DC68904C33848BCAB19BEF0CDECBBF42773ECE9E1333404F9FD9C62AF25956BF0C6D07A4E90D205EECBD175C48B64D16E60F12971F208EB9F5057A0F81506893BE3D4F500C320E185C9450E576A34D74AE9BE7D66EA5041C23720B9093D381CA18CACD5B9322FD54B5B79CE62E9D03B565CA8012052E5922EB0789183C855981B1E71ABC97A629DF7FC0FFB0785714D39FF063E84E71227B3DEC9DFC36F3321112C46812092E30220CBACB07FDFBF725459760C7F37DA553767814D7D0DD74A034B9580AE463649490AB557EA510F09EF5C1FC97DBE4B0AE58CD9A33220B372850B4AE393FA36C8765C3820FBA64296D2D6FA1643A31800FCD1C81F9F62BB84EFE84F2849873ACB506ADC80884DB22D5
@@ -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>坐标上海&#x2F;北京,校招社招都有,hc 无上限,有兴趣的欢迎投递简历至 <a href="mailto:&#49;&#57;&#x39;&#54;&#121;&#101;&#121;&#97;&#110;&#x40;&#x67;&#109;&#x61;&#105;&#108;&#46;&#x63;&#x6f;&#x6d;">&#49;&#57;&#x39;&#54;&#121;&#101;&#121;&#97;&#110;&#x40;&#x67;&#109;&#x61;&#105;&#108;&#46;&#x63;&#x6f;&#x6d;</a>,校招内推码 Q7QUGMV</p>
509
+ <h1 id="字节跳动-EA(Enterprise-Application)前端团队招人啦~"><a href="#字节跳动-EA(Enterprise-Application)前端团队招人啦~" class="headerlink" title="字节跳动 EA(Enterprise Application)前端团队招人啦~"></a>字节跳动 EA(Enterprise Application)前端团队招人啦~</h1><p>坐标上海&#x2F;北京,校招社招都有,hc 无上限,有兴趣的欢迎投递简历至 <a href="mailto:&#49;&#57;&#x39;&#54;&#x79;&#101;&#x79;&#97;&#x6e;&#x40;&#x67;&#109;&#97;&#x69;&#x6c;&#46;&#99;&#x6f;&#109;">&#49;&#57;&#x39;&#54;&#x79;&#101;&#x79;&#97;&#x6e;&#x40;&#x67;&#109;&#97;&#x69;&#x6c;&#46;&#99;&#x6f;&#109;</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&#x2F;zh-CN&#x2F;docs&#x2F;…</a>)</p>
512
512
  </div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&amp;WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&amp;UnionPayQR=null&amp;GitHub=null&amp;BTCQR=null&amp;BTCKEY=null&amp;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
@@ -67,7 +67,7 @@
67
67
  <li>render()</li>
68
68
  <li>componentDidMount()</li>
69
69
  </ol>
70
- <p>注意: getDerivedStateFromProps&#x2F;getSnapshotBeforeUpdate 和 componentWillMount&#x2F;componentWillReceiveProps&#x2F;componentWillUpdate 如果同时存在,React会在控制台给出警告信息,且仅执行 getDerivedStateFromProps&#x2F;getSnapshotBeforeUpdate 【<a href="mailto:&#x52;&#x65;&#97;&#x63;&#116;&#64;&#49;&#54;&#x2e;&#x37;&#46;&#x30;">&#x52;&#x65;&#97;&#x63;&#116;&#64;&#49;&#54;&#x2e;&#x37;&#46;&#x30;</a>】</p>
70
+ <p>注意: getDerivedStateFromProps&#x2F;getSnapshotBeforeUpdate 和 componentWillMount&#x2F;componentWillReceiveProps&#x2F;componentWillUpdate 如果同时存在,React会在控制台给出警告信息,且仅执行 getDerivedStateFromProps&#x2F;getSnapshotBeforeUpdate 【<a href="mailto:&#x52;&#101;&#97;&#99;&#116;&#64;&#x31;&#54;&#46;&#x37;&#46;&#48;">&#x52;&#101;&#97;&#99;&#116;&#64;&#x31;&#54;&#46;&#x37;&#46;&#48;</a>】</p>
71
71
  <blockquote>
72
72
  <p>运行时:</p>
73
73
  </blockquote>
@@ -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"> 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>
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"> 4.1k</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"> 18</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>面试准备(vue,react,webpack)</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>
@@ -349,7 +349,7 @@
349
349
  <li>Proxy 响应式</li>
350
350
  <li>PatchFlag &#x2F;&#x2F; 标记节点类型</li>
351
351
  <li>hoistStatic &#x2F;&#x2F; 缓存静态节点,多个节点合并</li>
352
- <li>cacheHandler &#x2F;&#x2F; </li>
352
+ <li>cacheHandler &#x2F;&#x2F;</li>
353
353
  <li>SSR 优化</li>
354
354
  <li>tree-shaking</li>
355
355
  </ul>
@@ -394,6 +394,143 @@
394
394
  <li>高阶组件HOC</li>
395
395
  <li>render props</li>
396
396
  </ul>
397
+ <h5 id="jsx-本质是什么"><a href="#jsx-本质是什么" class="headerlink" title="jsx 本质是什么"></a>jsx 本质是什么</h5><ul>
398
+ <li>React.createElement 函数,执行返回 vnode</li>
399
+ </ul>
400
+ <h5 id="事件合成机制"><a href="#事件合成机制" class="headerlink" title="事件合成机制"></a>事件合成机制</h5><ul>
401
+ <li>更好的兼容性和跨平台</li>
402
+ <li>减少内存小号,避免频繁解绑</li>
403
+ <li>方便统一管理(如事务机制)</li>
404
+ </ul>
405
+ <h5 id="transaction-事务机制"><a href="#transaction-事务机制" class="headerlink" title="transaction 事务机制"></a>transaction 事务机制</h5><p>Transaction类的主要作用使用提供的包装(Wrapper)来包装一个函数。<br>Transaction会接受一个方法 func,和一组Wrapper。Transaction会在func执行之前,执行一组Wrapper中的initialize方法。而后执行func方法,在func方法执行完了之后,执行Wrapper提供的所有close方法。</p>
406
+ <h5 id="fiber"><a href="#fiber" class="headerlink" title="fiber"></a>fiber</h5><ul>
407
+ <li>props state</li>
408
+ <li>render 生成 vnode</li>
409
+ <li>patch(ele, vnode)<ul>
410
+ <li>reconciliation 执行diff算法,纯js计算<ul>
411
+ <li>进行任务拆分</li>
412
+ <li>DOM需要渲染时暂停,空闲时恢复</li>
413
+ <li>window.requestUdleCallback</li>
414
+ </ul>
415
+ </li>
416
+ <li>commit 阶段,将diff结果渲染到dom中</li>
417
+ </ul>
418
+ </li>
419
+ </ul>
420
+ <h5 id="react-性能优化"><a href="#react-性能优化" class="headerlink" title="react 性能优化"></a>react 性能优化</h5><ul>
421
+ <li>渲染列表key</li>
422
+ <li>及时销毁事件</li>
423
+ <li>合理使用异步组件</li>
424
+ <li>减少 bind 次数</li>
425
+ <li>合理使用 scu pure memo</li>
426
+ <li>合理使用 immutablejs</li>
427
+ <li>打包webpack优化</li>
428
+ <li>前端通用优化 图片懒加载等</li>
429
+ <li>SSR</li>
430
+ </ul>
431
+ <h5 id="React-和-Vue-区别"><a href="#React-和-Vue-区别" class="headerlink" title="React 和 Vue 区别"></a>React 和 Vue 区别</h5><p>1、共同</p>
432
+ <ul>
433
+ <li>支持组件化</li>
434
+ <li>数据驱动视图</li>
435
+ <li>vdom操作dom</li>
436
+ </ul>
437
+ <p>2、不同</p>
438
+ <ul>
439
+ <li>React 使用 jsx 拥抱js(文件都是.js结尾),Vue使用模板拥抱html(文件是.vue结尾)</li>
440
+ <li>React 函数式编程,Vue 声明式编程</li>
441
+ <li>React 更多需要自力更生,Vue 把想要的都给你</li>
442
+ </ul>
443
+ <h2 id="Webpack"><a href="#Webpack" class="headerlink" title="Webpack"></a>Webpack</h2><h3 id="升级webpack5-级周边插件后。需要做的调整"><a href="#升级webpack5-级周边插件后。需要做的调整" class="headerlink" title="升级webpack5 级周边插件后。需要做的调整"></a>升级webpack5 级周边插件后。需要做的调整</h3><ul>
444
+ <li>package.json的dev-server命令改了,<ul>
445
+ <li>4: “dev”:”webpack-dev-server –config build&#x2F;webpack.dev.js”</li>
446
+ <li>5: “dev”:”webpack serve –config build&#x2F;webpack.dev.js”</li>
447
+ </ul>
448
+ </li>
449
+ <li>webpack-merge<ul>
450
+ <li>4: const { smart } &#x3D; require(‘webpack-merge’)</li>
451
+ <li>5: const { merge } &#x3D; require(‘webpack-merge’)</li>
452
+ </ul>
453
+ </li>
454
+ <li>CleanWebpackplugin<ul>
455
+ <li>4: const CleanWebpackplugin &#x3D; require(‘clean-webpack-plugin’)</li>
456
+ <li>5: const { CleanWebpackplugin } &#x3D; require(‘clean-webpack-plugin’)</li>
457
+ </ul>
458
+ </li>
459
+ <li>modules.rules<ul>
460
+ <li>4: loader: [‘xxx-loader’]</li>
461
+ <li>5: use: [‘xxx-loader’]</li>
462
+ </ul>
463
+ </li>
464
+ <li>filename hash h小写<ul>
465
+ <li>4: filename: ‘bundle.[contentHash:8].js’</li>
466
+ <li>5: filename: ‘bundle.[contenthash:8].js’</li>
467
+ </ul>
468
+ </li>
469
+ </ul>
470
+ <h3 id="基本配置"><a href="#基本配置" class="headerlink" title="基本配置"></a>基本配置</h3><ul>
471
+ <li><p>拆分配置 和 merge</p>
472
+ </li>
473
+ <li><p>启动本地服务 webpack-dev-server</p>
474
+ </li>
475
+ <li><p>处理 ES6</p>
476
+ <figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line">modules.<span class="property">exports</span> = &#123;</span><br><span class="line"> <span class="attr">entry</span>: path.<span class="title function_">join</span>(srcPath, <span class="string">&#x27;index&#x27;</span>),</span><br><span class="line"> <span class="attr">modules</span>: &#123;</span><br><span class="line"> <span class="attr">rules</span>: [</span><br><span class="line"> &#123;</span><br><span class="line"> <span class="attr">test</span>: <span class="regexp">/\.js$/</span>,</span><br><span class="line"> <span class="attr">loader</span>: [<span class="string">&#x27;babel-loader&#x27;</span>],</span><br><span class="line"> <span class="attr">include</span>: srcPath,</span><br><span class="line"> <span class="attr">exclude</span>: <span class="regexp">/node_modules/</span></span><br><span class="line"> &#125;</span><br><span class="line"> ]</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
477
+
478
+ <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></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line"> &quot;presets&quot;: [&quot;@babel/preset-env&quot;],</span><br><span class="line"> &quot;plugins&quot;: []</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
479
+ </li>
480
+ <li><p>处理样式</p>
481
+ </li>
482
+ <li><p>处理图片</p>
483
+ <ul>
484
+ <li>file-loader 将图片变为url形式</li>
485
+ <li>url-loader 将图片变为base64形式,减少http请求,很小没必要再进行http请求</li>
486
+ </ul>
487
+ </li>
488
+ <li><p>模块化</p>
489
+ </li>
490
+ </ul>
491
+ <h3 id="高级配置"><a href="#高级配置" class="headerlink" title="高级配置"></a>高级配置</h3><h4 id="多入口"><a href="#多入口" class="headerlink" title="多入口"></a>多入口</h4><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">entry</span>: &#123;</span><br><span class="line"> <span class="attr">index</span>: path.<span class="title function_">join</span>(srcPath, <span class="string">&#x27;index.js&#x27;</span>),</span><br><span class="line"> <span class="attr">other</span>: path.<span class="title function_">join</span>(srcPath, <span class="string">&#x27;other.js&#x27;</span>),</span><br><span class="line">&#125;,</span><br><span class="line"><span class="attr">output</span>: &#123;</span><br><span class="line"> <span class="attr">filename</span>: <span class="string">&#x27;[name].[contentHash:8].js&#x27;</span>,</span><br><span class="line"> <span class="attr">path</span>: distPath</span><br><span class="line">&#125;</span><br><span class="line"><span class="attr">plugins</span>: [</span><br><span class="line"> <span class="keyword">new</span> <span class="title class_">HtmlWebpackPlugin</span>(&#123;</span><br><span class="line"> <span class="attr">template</span>: path.<span class="title function_">join</span>(srcPath, <span class="string">&#x27;index.html&#x27;</span>),</span><br><span class="line"> <span class="attr">filename</span>: <span class="string">&#x27;index.html&#x27;</span>,</span><br><span class="line"> <span class="attr">chunks</span>: [<span class="string">&#x27;index&#x27;</span>] <span class="comment">// 要引入什么js文件</span></span><br><span class="line"> &#125;),</span><br><span class="line"> <span class="keyword">new</span> <span class="title class_">HtmlWebpackPlugin</span>(&#123;</span><br><span class="line"> <span class="attr">template</span>: path.<span class="title function_">join</span>(srcPath, <span class="string">&#x27;other.html&#x27;</span>),</span><br><span class="line"> <span class="attr">filename</span>: <span class="string">&#x27;other.html&#x27;</span>,</span><br><span class="line"> <span class="attr">chunks</span>: [<span class="string">&#x27;other&#x27;</span>]</span><br><span class="line"> &#125;)</span><br><span class="line">]</span><br></pre></td></tr></table></figure>
492
+
493
+ <h4 id="抽离css文件"><a href="#抽离css文件" class="headerlink" title="抽离css文件"></a>抽离css文件</h4><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line">coonst <span class="title class_">MiniCssExtracctplugin</span> = <span class="built_in">require</span>(<span class="string">&#x27;mini-css-extract-plugin&#x27;</span>)</span><br><span class="line"><span class="keyword">const</span> <span class="title class_">TerserJSPlugin</span> = <span class="built_in">require</span>(<span class="string">&#x27;terser-webpack-plugin&#x27;</span>)</span><br><span class="line"><span class="keyword">const</span> <span class="title class_">OptimizeCssAssetsplugin</span> = <span class="built_in">require</span>(<span class="string">&#x27;optimize-css-assets-webpack-plugin&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line"> <span class="attr">module</span>: &#123;</span><br><span class="line"> <span class="attr">rules</span>: [</span><br><span class="line"> &#123;</span><br><span class="line"> <span class="attr">test</span>: <span class="regexp">/\.css$/</span>,</span><br><span class="line"> <span class="attr">loader</span>: [</span><br><span class="line"> <span class="title class_">MiniCssExtracctplugin</span>.<span class="property">loader</span>,</span><br><span class="line"> <span class="string">&#x27;css-loader&#x27;</span>,</span><br><span class="line"> <span class="string">&#x27;postcss-loader&#x27;</span></span><br><span class="line"> ]</span><br><span class="line"> &#125;</span><br><span class="line"> ]</span><br><span class="line"> &#125;,</span><br><span class="line"> <span class="attr">plugins</span>: [</span><br><span class="line"> <span class="keyword">new</span> <span class="title class_">MiniCssExtracctplugin</span>(&#123;</span><br><span class="line"> <span class="attr">filename</span>: <span class="string">&#x27;css/main.[contentHash:8].css&#x27;</span></span><br><span class="line"> &#125;)</span><br><span class="line"> ],</span><br><span class="line"> <span class="attr">optimization</span>: &#123;</span><br><span class="line"> <span class="attr">minimizer</span>: [<span class="keyword">new</span> <span class="title class_">TerserJSPlugin</span>(&#123;&#125;), <span class="keyword">new</span> <span class="title class_">OptimizeCssAssetsplugin</span>(&#123;&#125;)]</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>
494
+
495
+ <h4 id="压缩-optimization"><a href="#压缩-optimization" class="headerlink" title="压缩 optimization"></a>压缩 optimization</h4><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title class_">TerserJSPlugin</span> = <span class="built_in">require</span>(<span class="string">&#x27;terser-webpack-plugin&#x27;</span>)</span><br><span class="line"><span class="keyword">const</span> <span class="title class_">OptimizeCssAssetsplugin</span> = <span class="built_in">require</span>(<span class="string">&#x27;optimize-css-assets-webpack-plugin&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line"> &lt;!-- 其他配置 --&gt;</span><br><span class="line"> <span class="attr">optimization</span>: &#123;</span><br><span class="line"> <span class="attr">minimizer</span>: [<span class="keyword">new</span> <span class="title class_">TerserJSPlugin</span>(&#123;&#125;), <span class="keyword">new</span> <span class="title class_">OptimizeCssAssetsplugin</span>(&#123;&#125;)]</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
496
+
497
+ <h4 id="抽离公共代码"><a href="#抽离公共代码" class="headerlink" title="抽离公共代码"></a>抽离公共代码</h4><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line"> &lt;!-- 其他配置 --&gt;</span><br><span class="line"> <span class="attr">optimization</span>: &#123;</span><br><span class="line"> <span class="attr">minimizer</span>: [],</span><br><span class="line"> <span class="attr">splitChunks</span>: &#123;</span><br><span class="line"> <span class="comment">// initial 不处理异步</span></span><br><span class="line"> <span class="comment">// async 只处理异步</span></span><br><span class="line"> <span class="comment">// all 全部</span></span><br><span class="line"> <span class="attr">chunks</span>: <span class="string">&#x27;all&#x27;</span>,</span><br><span class="line"> <span class="attr">cacheGroups</span>: &#123;</span><br><span class="line"> <span class="comment">// 引用关系 关联 HtmlWebpackPlugin chunks 配置</span></span><br><span class="line"> <span class="comment">// 第三方模块</span></span><br><span class="line"> <span class="attr">vendor</span>: &#123;</span><br><span class="line"> <span class="attr">name</span>: <span class="string">&#x27;vendor&#x27;</span>, <span class="comment">// chunk 名称</span></span><br><span class="line"> <span class="attr">priority</span>: <span class="number">1</span>, <span class="comment">// 权限更高,有限抽离,重要!</span></span><br><span class="line"> <span class="attr">test</span>: <span class="regexp">/node_modules/</span>, <span class="comment">// </span></span><br><span class="line"> <span class="attr">minSize</span>: <span class="number">0</span>, <span class="comment">// 大小限制,实际开发不要写0</span></span><br><span class="line"> <span class="attr">minChunks</span>: <span class="number">1</span>, <span class="comment">// 最少复用go几次</span></span><br><span class="line"> &#125;,</span><br><span class="line"> <span class="attr">vendor</span>: &#123;</span><br><span class="line"> <span class="attr">name</span>: <span class="string">&#x27;common&#x27;</span>, <span class="comment">// chunk 名称</span></span><br><span class="line"> <span class="attr">priority</span>: <span class="number">0</span>, <span class="comment">// 权限更高,有限抽离,重要!</span></span><br><span class="line"> <span class="attr">minSize</span>: <span class="number">0</span>, <span class="comment">// 大小限制</span></span><br><span class="line"> <span class="attr">minChunks</span>: <span class="number">2</span>, <span class="comment">// 最少复用过几次</span></span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>
498
+
499
+ <h4 id="异步加载"><a href="#异步加载" class="headerlink" title="异步加载"></a>异步加载</h4><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="comment">// 定义 chunk</span></span><br><span class="line"><span class="keyword">import</span>(<span class="string">&#x27;./dynamic-data.js&#x27;</span>).<span class="title function_">then</span>(<span class="function"><span class="params">res</span> =&gt;</span> &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">log</span>(res.<span class="property">default</span>.<span class="property">message</span>)</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure>
500
+
501
+ <h3 id="module-chunk-bundle-区别"><a href="#module-chunk-bundle-区别" class="headerlink" title="module chunk bundle 区别"></a>module chunk bundle 区别</h3><ul>
502
+ <li>module:就是写的代码,只要可以引入的都是module</li>
503
+ <li>chunk:多模块合并成的,比如:index.js以及它引入的其他文件的集合</li>
504
+ <li>bundle:最终的输出文件</li>
505
+ </ul>
506
+ <h3 id="性能优化,构建速度"><a href="#性能优化,构建速度" class="headerlink" title="性能优化,构建速度"></a>性能优化,构建速度</h3><ul>
507
+ <li>优化babel-loader</li>
508
+ <li>IgnorePlugin</li>
509
+ <li>noParse</li>
510
+ <li>happypack</li>
511
+ <li>parallelUglifyPlugin</li>
512
+ <li>自动刷新</li>
513
+ <li>热更新</li>
514
+ <li>DllPlugin</li>
515
+ </ul>
516
+ <h4 id="优化babel-loader"><a href="#优化babel-loader" class="headerlink" title="优化babel-loader"></a>优化babel-loader</h4><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line"> <span class="attr">test</span>: <span class="regexp">/\.js$/</span>,</span><br><span class="line"> <span class="attr">use</span>: [<span class="string">&#x27;babel-loader?cacheDirectory&#x27;</span>], <span class="comment">// 开启缓存</span></span><br><span class="line"> <span class="attr">include</span>: path.<span class="title function_">resolve</span>(__dirname, <span class="string">&#x27;src&#x27;</span>), <span class="comment">// 明确范围</span></span><br><span class="line"> <span class="comment">// 排除范围, 两者选一即可</span></span><br><span class="line"> <span class="comment">// exclude: path.resolve(__dirname, &#x27;node_modules&#x27;)</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
517
+
518
+ <h4 id="IgnorePlugin,直接不引入,代码中没有"><a href="#IgnorePlugin,直接不引入,代码中没有" class="headerlink" title="IgnorePlugin,直接不引入,代码中没有"></a>IgnorePlugin,直接不引入,代码中没有</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 不引入所有语言包</span></span><br><span class="line"><span class="keyword">new</span> webpack.<span class="title class_">IgnorePlugin</span>(<span class="regexp">/\.\/locale/</span>, <span class="regexp">/moment/</span>)</span><br></pre></td></tr></table></figure>
519
+
520
+ <figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 手动引入中文</span></span><br><span class="line">moment.<span class="title function_">locale</span>(<span class="string">&#x27;zh-cn&#x27;</span>)</span><br></pre></td></tr></table></figure>
521
+
522
+ <h4 id="noParse,引入,但不打包"><a href="#noParse,引入,但不打包" class="headerlink" title="noParse,引入,但不打包"></a>noParse,引入,但不打包</h4><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line">modules.<span class="property">exports</span>=&#123;</span><br><span class="line"> <span class="attr">module</span>: &#123;</span><br><span class="line"> <span class="attr">noParse</span>: [<span class="regexp">/react\.min\.js/</span>],</span><br><span class="line"> <span class="attr">rules</span>: [</span><br><span class="line"> &#123;&#125;</span><br><span class="line"> ]</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>
523
+
524
+ <h4 id="happyPack-多线程打包"><a href="#happyPack-多线程打包" class="headerlink" title="happyPack 多线程打包"></a>happyPack 多线程打包</h4><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title class_">HappyPack</span> = <span class="built_in">require</span>(<span class="string">&#x27;happypack&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line"> <span class="attr">modules</span>: &#123;</span><br><span class="line"> <span class="attr">rules</span>: [</span><br><span class="line"> &#123;</span><br><span class="line"> <span class="attr">test</span>: <span class="regexp">/\.js$/</span>,</span><br><span class="line"> <span class="attr">use</span>: [<span class="string">&#x27;happypack/loader?id=babel&#x27;</span>],</span><br><span class="line"> <span class="attr">include</span>: srcPath</span><br><span class="line"> &#125;</span><br><span class="line"> ]</span><br><span class="line"> &#125;,</span><br><span class="line"> <span class="attr">plugins</span>: [</span><br><span class="line"> <span class="keyword">new</span> <span class="title class_">Happypack</span>(&#123;</span><br><span class="line"> <span class="attr">id</span>: <span class="string">&#x27;babel&#x27;</span>,</span><br><span class="line"> <span class="attr">loaders</span>: [<span class="string">&#x27;babel-loader?cacheDirectory&#x27;</span>]</span><br><span class="line"> &#125;)</span><br><span class="line"> ]</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>
525
+
526
+ <h4 id="ParallelUglifyPlugin-多进程压缩js"><a href="#ParallelUglifyPlugin-多进程压缩js" class="headerlink" title="ParallelUglifyPlugin 多进程压缩js"></a>ParallelUglifyPlugin 多进程压缩js</h4><p>new ParallelUglifyPlugin({<br> uglifyJS: {<br> &#x2F;&#x2F; 还是使用 uglifyjs 压缩,只是开启了多进程<br> output: {<br> beautify: false, &#x2F;&#x2F; 最紧凑的输出<br> comments: false &#x2F;&#x2F; 删除所有注释<br> },<br> compress: {<br> &#x2F;&#x2F; 删除所有 console 语句,可兼容ie<br> drop_console: true,<br> }<br> }<br>})</p>
527
+ <h4 id="自动刷新"><a href="#自动刷新" class="headerlink" title="自动刷新"></a>自动刷新</h4><figure class="highlight js"><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></pre></td><td class="code"><pre><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line"> <span class="comment">// 开启之后, webpack-dev-server 会自动开启刷新浏览器</span></span><br><span class="line"> <span class="attr">watch</span>: <span class="literal">true</span>, <span class="comment">// 默认false </span></span><br><span class="line"> <span class="attr">watchOptions</span>: &#123;</span><br><span class="line"> <span class="attr">ignored</span>: <span class="regexp">/node_modules/</span>, <span class="comment">// 忽略</span></span><br><span class="line"> <span class="attr">aggregateTimeout</span>: <span class="number">300</span>, <span class="comment">// 监听变化后等300ms再执行,防止太快</span></span><br><span class="line"> <span class="attr">poll</span>: <span class="number">1000</span> <span class="comment">// 每隔1000ms 询问一次</span></span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
528
+
529
+ <h4 id="DllPlugin"><a href="#DllPlugin" class="headerlink" title="DllPlugin"></a>DllPlugin</h4><ul>
530
+ <li>webpack 内置</li>
531
+ <li>打包出dll文件</li>
532
+ <li></li>
533
+ </ul>
397
534
  </div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&amp;WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&amp;UnionPayQR=null&amp;GitHub=null&amp;BTCQR=null&amp;BTCKEY=null&amp;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
398
535
  const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
399
536
  const locale = {