diff --git a/auto/gui.files.go b/auto/gui.files.go index 5988f152f..774fd84d6 100644 --- a/auto/gui.files.go +++ b/auto/gui.files.go @@ -13,12 +13,22 @@ func init() { var bs []byte var gr *gzip.Reader + bs, _ = hex.DecodeString("1f8b080000096e8800ff448fb16e22311086fb7b0a33423a5bb2fc00a0ab4edc35e9920e51187b9c35f1da9bf12c042dbc7b9c25906e3cfe35dff7dbfc3a264ba62f7e4c2861b0d5d93410ba8e0d93cd355946502658c785ce12968fed335b8eee5f4c589f8af548a0b7b07c070dcb8e79001dc6ec38962caddeab899047cae2b1746a8a412edce5b270a61143fc98c73a86362aeea89c44c693d8101592f0b78cc9e7df2c5283893ac345f8a26b918bb85d1085c4ed80a803ba1822fa05a8f5d192f07facf11890a45a7fcbece534525a6def02da99373cebbbc4ce1c4acc1240e91eb92b7e05ff372fa0074bb6af2b80ab6a49e7b056f953564dde10d6928ed81e2d82738147e0f67f40c772c6b588f64da0f4b1e2f5ba53eb5f9f000000ffff010000ffffd6b0277197010000") + gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) + bs, _ = ioutil.ReadAll(gr) + Assets["angular-translate-loader.min.js"] = bs + + bs, _ = hex.DecodeString("1f8b080000096e8800ffa45aeb57dcc692ff7eff0aa1e343d4a111e0cdee879988592e60c30db6892171f6cccee6b4a4d66346230d92864740fffb56b55aad37b6733fd868fa59effa5549073feefc43fb5163b1bf8d58ba9fa72cce2296736d5fbb7f6bbe350fe1e1ede1d14ffb87ffb57ff81fb834c8f3cde4e0c00ff3606b9b4eb23eb86699c3a2eb943b417ed03b09f79c269ba734f4835c331c22ced3a6da55e8f038e3aef6e1f216161dfc436e35d789bb8db8a16fc4b91b71aea9ced3e95c8f7d7d41cc741b1b73fd4d63c6dbc64e1e26b1c1c8f33d4b35db6266962729f3f92ffcc920d4a9070c3275668ee9f3dcb0c98c99db8c1bd54f32a96809b39b3c0d63df602610e2f134e5ee154e8a13aa7dc39313c7ccf0385a2efaf65377775f3bb65810fa8da2227040721fba3c355a7202a9dddc7efa7cf2fefccf5fceff67406ed4a12ee5d4a33e0d684897744523baa6314de8c67a2ee89d355fd0d46234c387dcda39a25b4b5737ec3b51c2563abdc789074b3775fa68a94bca3b98f510c66ef260c6ec3ef41928659af27c9b02116624b97d7961a69d260f194faf1a43d95396f3757364db5aa103e3d9260a7343df87c76512c686fea74e0afa643559f592d428cd049870ad4aa851f2c05387a10208e5d621f5ac3b33e2b19f0753ef984ff9de1eb1cdcd360b8cfe96bb395f10320d3dc336813ffef8c9335c72bc7f444aee3486734e29037f5a91106861acc9d110a5b6b41c3360d9a787f83a4d363ccd9f8c000da37761402c6b9074bc47ff5187d9c0cc2270360388d8dd3542f5fb90c208ee56bf03c9278c136a2c5f5e42dce15bce3c58d09aa1fe753e113c564cfa45819cacf0e85211207ea95f6d252f393edadd7dedccd5fc70218e9de1d38415f4af86faa84d9e81c31db6bbbb6357f76e90e9720427fbfea628dcccd9a2e051c6b57ad1277bc99ddcc029f2f222fe82b1d7dec61f731ebb629c9e6098a838ca83302ba6f8bf723ea031b3fea2624c78c369c4b2ec235bf3960956463133b6e04db89a4cb6c5148577d262163db2340fe996531b4844cb85a8064f0e522acc89a32931c2bae6c3519581c5c040698fe780cc4e8c8062408f1d96c362b8909389e159b654d74cd7f7ecd2991ec8dec31e9f705acdedee72b02357d84a731975e6fec2d2ff7ba2ef79f8c35b58412d3647ca8cb9ee659cf3749394821b9250261d8e082115a560c1ed3ff02c03a77f97a46b968f9ca20ea936b5d63543e3f869183d06b70f11bb92baacb7dcb038ccc3bff8ef2cda723046b8cb7f1ada9ab7b7f612c088f5d8ca7a6cb9b361881f93fc5db28d41c86ee860a41dbcf86b9baeb89757f27f75e167ccf41d4d7dede011b662c556fc0d07898b474e4ad449893cc96351643367f59a64ffa9d8102ef9cf91c307e2cccce0d6ce2164150c268dc47f92a6ec09e6c15538c679483b84f6f6db30ef96166f1349379fb918065de93460542d6a30dc951111e31384c088e401e44e2de60fda799a262d0c702d7181e624dbc88d7fc8350f02b1d690ee2db323ae4140d1301b037c9a683fe87b6c4fffa18ee45e65acd5ef524ca7236242c0709f84ae764826e12cdc4b27a964a60669d6a9f299dfd2e82a6140e4a8b9c2a272459335b54da7cfdb3482bcd170dd9b1c9873de8511cffeced9bded3a658dd37b476292928746c0fcda82a0fd5c7462c35502d8eda694c02b414bae6892d3dcd90c50a749b20af9df3ab2b5556f49ae735a2dafa01db3a432a120f0c2c7115308953bb2462c0fb30cacffb636c20b16bb1140bbc47f858bd16dadc8fecad94d3647d70d31b2ecc5f9eb24cb4f93f5268ce090a12d0089775a9b5c0ec9641dc6425ee3a11efd0aaa971a0186d9bb7a7ac60c3279349463da0ab1ce9e006c4e9ce68d29f74300d0e9c93d0b23f4f2ea4270bf6cd878416377c0ab0d51cbb15444ba9307be81aac9829a22025152fd4d1823a448527c4e9324bf710081e08fbb66a501f822a47725630ff4919ed173abacbf5680e06bc59d718f6da36e32a6ef3078bec75ae402ffbbb45a27f30efcaba2ae84dd2355009ce36229e0f524ef823c5d540fd4908d5900ec368244c06620d52c89eeb93187fb17a4a8347129e931f380c786470106b95895adc38c17d487ea02bca7aa2e82637fea437521433f7000f0a9c64b7726a42ca826e4593d87b08bfa5ecc4145594d28d2a7603e0683eb20c9aca19214c17ad92fccecd9c5dc5e4c2e00ae219e7e442221a1282b7c106a4a4585c1ac8bb903d513e6ab920b8952ad7f192e75c8f4d1e208e1f99e753439a42aa91555ce60456db6cbd9b2c7db6f2d0186959c293ea19d81efaac7c95717c39312febf3ab65e19826361de564a718f9da9034a41668155c0b9aadc7024e1fb4705fd65c8db6321f0794cd94296a19a0e9555520e339ab48621145eb54d137c2e34dff03556508d181d8065f39bade3005c055f00e53c8856c365bbdb01b6768ee3224d70c3ab8106b07ace9cc0784fdb22780f7a6fed28c83801e7b18b91f343178680a108e4a17f4cb4aa92d756fc49cb36dc09bd90bb25ac80640941d2d4a7a5f7d5662a853770f155b907d2709a9741e0909641232246a74c5bd367b814d37fd7619ccaa99f8be92b9728f976e38803f1b62348a7d543e950e242b508b1a7a8716063c2213298d92a849474d31c6333e0bd41154822a50e5a1a185f8c2810f8b1a53720b8fddad1b8baf218f477b035e34106ea80d01d110b5e5e768401923ee43cadf02524474d5a2702c9008024d5d665b6d5f034a2815164e261cdf320717700680e64bbf3d17a0a40f3f8a401ce9fa972b5abbfacd7037325938c4cdd864b0080f39a16a1c8725f236b7c12c97a3f77f1aa568abb74799ca3b380432c2c3002e1251f7b9969c06f36ddca1fab91daba447ba3d62ad4f81730d2711138fd2f8399608814d2051a22691868355428536a1e58d04f63ad8b3eb11fe1aacedd3e79f6bb2cd8c042530dd89953e4b866a844c70d1f621845af725b910c0aa8caec8142aee8e67542b81eedb8f8164a4de5d63e75e0155df2ac41b2ba5451b8f7d7f6bd705d796fd01017669f9fdb2936b45c24ea9311ca4d7d1d06b5ca9a51a24ae4bf1a6cef486e9ed66b1d70fbb23706b72ecbc52be90e4b62d89058a6651db76359ab59bd714526f50f5b9ed11ca92418d442ffdc153a2f2ff48658f64b963debdaf0e562eabdbc189ef559b28243a4ae47e94de778959a7f35ce8e0f676793475a8e17f4766ce9e7ded2df3a1aaba8ab51626079b30d00a8c98686169fbd9ff3c5e45c06d0a0efa0959003640ffb6500335666b6b5b33c350ee95b32bb34d4efb744dc59aadb5720c75730488d01046adae00a72bcd4ca1200ddbbdd5da5548668c183485503b9d98d602e1cb02b7fd8aee48c70b25f64ca6b0fd42ea40ce0f76159fe5b12f4ad4119fede93e1a42fa06f978f40c6be752bc504bc5ac8a4e25124cccbd77a780de84e2f47fbc46ad51657bddab7820b956702da8fb751844f624234b3a2160ba42e7e004859d5f0d439b6a73660de8bb90b616b011e269fac0f06fe05455e8a575497f2d556e571aa4945c5ccbbbf436bd9c92aa9c22202246a43090121f6ccaad473661de21560449b247b55b23eaecb465b210f92d201105b05911e3e1d87e4252e9d96d1f5a9610b8e40fc10fe65772e9a193e807bccbc20d25e0a7430fd3a22fd3afdf42b2608589e909b71550fc8ee5ac725e5f02b48fedb806113f683b5373005acbf421f6c8045da2c4606047f8a69f8121054ab65721e23b3eec0fa7b5c0d9e045706ed22493e6b362cae41c120079fcbfd250b6aa3233796e0e0abfbd03a069aab0ae94a229bcd544de8906a7122ca1e9e6a5513860b98db054770c5381555f5c308dad2ec1bcd8781b540fcbac232d046d9635b08ae427792d96b2ecafda1f010407858d6e161791c4c03080f7e59cd634c083026c0f96a08b14dd9b01802265dfccd5a160b7c21f1e0272e8f78ceb56a807641692182b262aa8e434d3b0ce32c6771f3cd4089b180590c3ae8462f2f35a4ff2d06358431771baf0bc55bdba17e522da1e702f2d4215dd59d83d571380d414c9092e621c44e458981bf4bd45501a262f875257e0a509ef673e30df2501f27a26b54a0bdbbbb562f0e3cf503db4eb55e61fbda5a57effa5c42d47be8183848604a72901cc7d3183810067267ade7b13091cdfc0e74a36f2b41e93b56feb4e189a7e18c08704664fd2ee54ce8d0ca88d82967ab4a6111beb6074dc05f035be543f917b2578109acaef4efb62cca8c0d7d2e4052ed8cd46a492943fe02fcfd511bf21fc75fa65f649efb22b3db9785d2ca65b1f8aeaf2d3c867dcf27e36bed4bfc00a3013b063fc028bb91ba5beed7a19e405ba59ef5cce1f60d7727fd52f0b9508a7446de023b58aad8d8c752428cf81a6a4d43ffd90def8f7f3ec0ff81979c3fe6a2e145cc205f47468dddec021b97bddbebdef34075ece1671133fc1fd64f986a533a7535d43a110e29cacece48553c90215cdcf13def5ab96adf3b4d14582f6d16015cf4be7dd1af61e05c8683af72308e7e978980cf9521a0f3098efef1fd9fb79f4f3ede5c9ddc9eff7975023f71fc3b4e764318cb43487d7afb539fc62fd183efd89efec611d9573c6e589af14ee3be5b14e387419558e00fa0e9d0c927fac9b94e33dc31c1a65c79e4a4214a55d4fa35d94245d9ac3732a9104b7371cb12666313d5d6a565031235932dcc5ddc7eb832d72c874473507fa4748f57edef1d84f5fbcc9ada158d4482b09b9671cd52b6ced03323f34d62673ced48bb65c2cd77d597f5e745326831aaebe4e565a77696339575660e142ac20109c0924dc41c6e1cfcdfff667b2ff0efcd818f5ba10e37515de010e8506498a4b32a7cb4299351e516aeb0702f6484c1eda536dabb197eb5236f36df3c08a9369cb1d3e21c901f45bcd8a01ed336a1b2cfb06e396a83a80642c0d72efd63e7031f4155d5ded14ff48890bdfaf77f9285e5e0eb1295f8305e4624eac6cb18e265471e98a6e2baae3cfaa9bf24833c67c5907d61bf780b93b4820a16b9f89d5a9d16ad2a2d3a4ddd882f7c5a2384aeca706c9759df0314300ca1450f6228f1361ca7dcc3c1cdc00074282cc1f781f0fe8aa90150622728bf0773c138218c817af30cd202b68be866201ec3f2e5acd7736a0c743ca4fc1aaca355004046671d1db2a9a12e452222d64eb71e92c347687753bb3261bd77a60e8a82cdb45ed22243c74ed0a4c7dfe86ab5d21de0dc453e5d8a18f23546a8638c3123a66012d92d40f9779607ce138fbf37a21b32dd18823db1ccc5489e3ce9f40e0e28be2ba90da59ed3f213d079e71df060b0acdf343ff71207383beb32d27943d36c6c3a1030d7c93d176d14b09c764f053b152029fce26c7cc1f7f1ee85518e9f1ab473aecaa35fe1b74e3922b1d62fdcbb1fe8b9f8452224117830c4db7722dca0c412e55ea47bfaff000000ffff010000ffff0555494cd12d0000") + gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) + bs, _ = ioutil.ReadAll(gr) + Assets["angular-translate.min.js"] = bs + bs, _ = hex.DecodeString("1f8b080000096e8800ffbcbd797fdb36b32ffebf5e85cce3ab92112cdb699f8d34a3e338ced6d84963275d64b53f70d152add1e2c4b1f4de7ff31d2c0425397d9e73cfe776b1481004406030987d0e1f55aaa7e3ee722867afafaab7c78dc78d7f54aa7e1a541f1f1d1f1dd09f1faa2f2693ee3017d557e3b451ed2d16d3f0f050aa77fe9c3726b36ea5faa69fe6e3791e562f5e5d571e1d56fcce729c2efa93b1ff9bf849cc82fbef96f3bc3a5fccfae9e2bbc83cac3ef793e07e962f96b371d5be11dcdfca5955c672d65d8ef2f162de3a6a8b54c8d86b79753f6926752fa47fbda02eeb5edb0c289fcd26b379a334ae43fe9c43f3d6a17e2bea4c667e1a1f47e989eda331ccc7dd452f4aebf580baaefbc7719c36bd26bd52a377bc2935921e1cd355ecd5f3713ac9f20fef5f9d4d46d3c998def73d337c2f8e1777d37cd2a916e34fdb4df7a6b1985cd14c8cbb7ed098e5d3a14c73ffb07a73dfba99df5cb51fed1f0a1a66e82dc759dee98ff3ec81269d0aa137e706bdbd9d355f5fbdbd6ca81afdce9def3e0bc2d25da417e31cb3e9cb60bdb66bf529c162f53bfe78391cc671b25a7d955412a837f68e23b56a95c44ca56e8a26324e1a639ab06b1a5aad269b7b47e1337a73b5fa91ff1e5105b95a79e3e528c967f4b1f61b6ab5a313fa230f8eabfd713571c6e227428a54414a16d1a09280febcc178b0b819d70fbce96cb298a0356a355bad7c4f0d4ddd796339d20f92464fcedf7e1ebf9b4da6f96c7157abed6d16f9594063958d540e877e2a9256d6165910e543826bf4dfa07ecf65daabd5ece55e1c7f0aec9d8f01dbfa3c9b6aacf151949dd859cb00803b7b713e6cc7e0689a36dfd20be0ccdb5b5e43b5502dda546a273cd066ca6d4e97f31e5d9ac664633e992dfcc06933a5c5a8f06aa0355e91983b12397d5a7e92994fcb373ead95b7699cf4d7b69e15cdbe4b76e106ee26a1d74ba0f9abf48bce937820758f42464944f50f0e2249a5ada4dd487b727646b078baf08f0200cedffe41d0a781b8ca7562efd413d4c69f93fed8a79d885aff3a422dfdf8c8530b527a49ede8466736199de93e7c593f0edc96d674bd1ccf7bfd0e218c23cf7eb65bc57ed44f09803cb897cda4b1bf4f6bd3fb31bf8b6598e5c37c91579dc2e29d45b1bccef3e853b1e5453195d434416852abd163b131c3840b62b90ed641a487b10398ae9c059acad93c7f45789040e1f8c8f98af7fa2b74bd853fce3f57fd85ef60fbb5b8b7fb344cd64180c5b50d7c460d7b772a9d4e9db1ecef3e486cc5a2e6d7a26609c31aa4e334fa7467d5bd5d557f71fa077edcc3bc7a93e4cf3c5dec6efc99d3b846de3bebcd9c7db08d229d8aaf9da9f15aaaebea33b9c8dba8ff9bde788933b53fee78e1743693770fbef1c679c339f08ad1548a15d9359cf779f7fccbf4c1e6bf96561798349ba40cb7b81e4e52896ab896434251b898e70b02bb7c762b870eee488b76f6fc3d3aaaf67c75045d12ca07ba57add082125677b65c5a3a5708454638692c4025a22b3ac17da6906281cab8189b651b8d490dff7c445077f997b71d836d6c01edc5c8a0af9470665a1c07a047e85d89431407b47e35d55d1d1c3bcb295557aa15dd71747412a73c51d321d16834dae3029717ef76a41d262f02cd115edacf695e4fe777636e62ffb35ca4bd60d19b4d3e57df48df4ba79fe70a3fea2fa4515664a9425f3dffd19c767a70faf3b6bf551f38180f3e571d7df778a384cedc35a1e5d23851d22beb622af56129e9388cb9c1accdf80c2bbc5ea3619ad7844e391e5e537225d1229a88f712150059610bd1da75f3c5757f94fb4110eeeba70a9ae9d97cb29ca57910020b506bbaa17b4265bbe6faca2076503df7eb62e5bf710efbde3e104fcae7179f5d845eca45c701f70dcc9db8a49cd3f3b258652c9539f6f68e224bd681aed357b220edf0823a2b706438efa9e534db5f5498164b5d0aae40826960000103d8fb9180a6d403bd674021882d88a8835d11492953477879a99653606d9d56ccb8d4eaa29bd70e8d0a14290340b25d4cf4636f30085edb5a6d5f16a3a37d5a10ec78a1b8e3897968a310b50802ca7d24ed23bdcbbea21f10c2ee5ca4b1860a0dc0d4895aebcc5dfebd370aa2d56c3e302129609fe6c3b62679fad25df4e38e3ed01a95cdb8b787e6da9438c8ff3a290edf9f0847a7cb597f71f76e42288868ebcd92467f7e4aefdd1266fea9f16999cfeeae683fa78b09faf5f736ca7caf35ee1ea4733a46300bdb4f33b99007b68a83de93c445908fb798bfe6ad46e905b5f43808e910d05ff886d74ad234ce17729c02c0150a68ca30356d6c531f5bddc8869c4e8777405d8d7432a653cddfeef9889047e8d40cd6e17fd4b47d8456cc49ebd06569e9b08876d0200c11ccbc598868a6f12c6498a52b6fffe75797cfdefeec851502f49f8031b8f4d9dbb30f17e797d75e288190766e00a02ad4bd3a7bfbeebc2084d3628053e9128ebb49b5e62cdc606d13f19e7883a657ad7a21d098b3fa1f5c8602d497628b9972a5bbd021a52e980ed949e13413da4e21cdcd11f0a1997642a75f887aaf13cf43cf7dafe33122251a5ffd7624a1237d3d9e980bfddb023d44482aa4578f77d0d95d1e4d129fd24f231d4ec640558bd9dd7dd2c84753dabcc13ac59ce2105eabf53cf5bd93ac7ffbc40b000ff938c3abbdc568a8dfd49d7ccf54c551db72e7cd2f74da102c8fb8bdc3dffd93d6ef4fdaf527c161d03a6e17c28adf4ffcd6cde79b83763d38141587772848be13affe0520670697d9b9471f0e247ee475714695e55bd295c4fdc4e2d59f1d7696d8885464441bf89853fa70103cc466d5bcc02116681e19f212f338a6c7594c6348691e02f19431212de7532a386e074d7e4217e1de11e3d6e68f0a0f36f157d12a043b4c62b4f057246d7597b804a17306ff5262c137e94b9a25a645cac5442ba8ae3e4b3f137b4741dddf83d424697a5e0881d4676c963da08c35b6fbbf5db7e0ea2dfe508c680d0228af18f5dcdd3cdc42859a2800e2ff3cfefb61b72ff09e53f8fd332e8c4b858f9f7261dde5753f97367b75877c2d719bf8e1889bf8ef7267a75c18963bfbe1b02b088d95caceb8a228175293401c74414d940677a551a52d489977aed50c1f10ac35bb90b4450e5e206e79e36e483b8f3aa183485d7c39b097e684c25d5bf4e2c39bf9b8db0a693f51891fdecc1ff1f6cafea0fd153583e6cdfc9000a553e2dd3b2d89933d4afd9f40c19c0f7360fba777af32d012111197f6ebe88384777343331325e5d3f2743824682760db2af6bd865797019d3be2c1c7155957cd3e5cabe5b19096ab00de3e114cba5f01622457db21897b8dfc4b9efa5e955e224427e773b06b75baa78137fd3c96a21b1399f3b8ad76b85dbd9b791dcb4c2b1a84c41c34e4820e8464b9c8e7a54db497d76a9d163182d46a9bbe5b359834e8785ae6c054344008287d5ac466abdba6a3df01835f4bd48373162bcc1c690eef4f458604a622f02b6dbf9f9a9ee165bd90317a54b049c9824eb069e64140b866b6803043212a6a79fbd3d9e4b69fe55e597ca3464ec4e16c323110e0110e5e13f5ef489ae8580f88a8fc2d019f99d2186f27831cade2b5ab9448409aba721bde7e4a5baf3fe427e6a3702dc77d3a1ca8b884f5817a458e11ed2bfac39d9e06c0dd779bc968183403d8393c567bfa132a3efcfdf2c51fcfce9f9fbfffe3e9dbb7d757d7ef4fdfed1d62767f236a2f6bd0a22efcdf780d2d819ed2b1a68a62f563412383283dbac45e98d3e43fa56fa4a996d3d8858b07902d0e2f1aa77b56a52eebe6fde1d9d3da76789d6ea07355c3cf884684f201bcc49bc9e77c762689ecc0f717c2bbc4481fb02b12878d96b3fc9327d0659360847ee87ed99f1131b453c82b4d3b4470fda858d284e0d0502b07749c45d4198439548f089245555aa999a876e91e2a139777b3e44f2501c94a73b8c452f264d378deaa7aa1a916ec1ad79782fbf4caec075399cef7263263d93ce4170ef75a9a1f2bb34d18d7e9e3bce139ecbfc8e38436b89506778889ec9c74a30e3191592c5b1d3aad796e081324014b0734a54f1387d96912c7908b326d78eb9cdfd8dbd1c6d446465a63c6778a5da77001a1ec289b007a1ae3fccbe2aa9f0c896e8dd4e724b35c0e687b9a33e5738fb69fcf225a3b9ba7209d0a8a362d86f2dcdd60846d51c0fb9e86679462ab956faf895ec269b0bf3fea8fcf67b3b8b85cad9e17603d9a64cb21ad70c537d7f1869e2e01b3ba2979cd95a06cf74ae77aa55367a13dd5388db70b067a833bcd19845b793b669ade0e8f4af04d78e08caae0f70835315ada160ca72d802da6da6bfb2d54b3fc52818fc6eb3596a6abc74b80399ed0383d6ad22c685b404a2886715242709ec2b1b410e3f8fe0f75f3d3325fe6612afe982dc74f879374300f33a137f23cec0a4c44980b8de967215ab468df33c5a066253ab9dba8a04be9f93c9fddf6d37ce3b92ea5e77c686c3ce532c0cd8479db45f971c533e554551f2b54599d0534a15c5b9f0cefcc400561a96e7fbe5063ee0f17fa9bd4e5ee6ad4cd6236190e75d5e27677f58ca68e0507ba369f584e55fb5c35dde977c3a1a0e90fdd53d4527166d917bdfe7cbd8e3ab5dad0ef38c04067fa9aff1472e692bcda9e011f53513a1c5d18cc9b74844d3e1053a64f80305b1794cccfa9f02e265ff78f4bc4b1c67b384d6c616eb67ecee2dd660ba36ea8b9a54744bba0a02d4644e30cc4508cc554ccc519e39a4c89f8f608b1005746b911c0f2ed20ce1b8a70084465181f11080f4c85e1c9381a12f644bd29913d83d69098a65173da2082abdbcd672fe538a3e5a2d5c8e89c9e4d081ec351bc3712736a681afb67f1b4911262cb66396dc3c0b43b3f9946736a37576bf154fa67ad79bb3845ba5aac816f72241b4c7777e3a7b2d11983f8eec6ddc6fe8446d21fcbe16ad5a52fb3b7713732f5e2dc392cb5523b71a53a6f8bb305f3c5dd969ff33bcff86c254e77cf9591686cf12501ba98e7c3e28c863419fdadf5bb0677ffd44809f72f724d7df904b7b71e28b8fe784c537a7df12656ec7cedbf8eff7e149d1c326b5fa7838f006734b9cdcf30a344f776fab3f9826f82e82ed1b3a5e6fb9218aa79109dfaa6b3679a1a7d3e935dee35b0b202bc17b004b56a5aa994d4344909ec592481f689d1746a9df1e6d8475d6d1a70c44773c2936586a448dd420720090af0261d954e5b322db6004d1eb874679a279d0ec10434116a430c416878f92d60840ad56d8f21132243ff2be4579fe8902a2b3d4fb1cfa0598eb43a2167750273149abca8bac204c21d5fe93c6efaa76a83e618b3b0efd24df823f11274818f8404cfc51dfb257622696509ce929f20bf8f32c8cd9aba252e621a9a5a0afdaca1be84aa640df58d0db3d9c092aaa7fefd5a387b506002033b386e52709ff1cc1dd45096156015675c84353479f394be3ac8f8e4450b595cafff92ea4a6d10162203739a96b4e4f44d2875a4b11bca36b54cf84e0f9603e884363478b6a734d544bc1165b0f70bf03475dd59ad9cfad437c8191a5a1eb85d53419701c6aadcf428a205710652c3f8b6d2ee695969cdfa8253c353360f8e4f9847f5cbe5bec72cab173073ca5c6bc1a1b66ec6378b369854141bb51f73ba5c33dc7314796786cbd00a4edb05abea1f82c57255331a21a5ff3f1f6da554cec385f017d5f94b821203f3acd0756e0ddd00faffddcc45dff87ea2aa31b6e8000647e98e3986e0af1eab6b267e1f9a2f882a8aafba73be2a50b4bb5524ef11681a3d9556e634b14be5863a57ba2ace44131c50d2b9bc655a9681a15b6f9f268b6da3ba679616c214b9774513b9e590b44ce25f1bf25dc509b2de9b28f3c5880e27c52fc9182a28e251b1392c32762d7a2a47b429ed776427b9d1c5b13495597ca52082bea85053a3bb29f1af38609c8fcd987531add3d120d2d2b1404742ba7124a4c0a83cd828714eba28484aa7a0fbcc9d9a92bea343e74b99116f5b2144add6495b85b540bb5673b412bfa63b854029283c62dd668c909fe51db91c2e08416e16b96c4ada503d7e04e91dd3fe876c66be984cc1f6c82e13d6dcc44659b98d1424c9f0e932498835db3be24616741ae6aa7b7549db613e4b3579b15afdc4a892ceae46a686f54e0d32cf3449d28d37071e55befd299b0d4132d9d5f611c13ada55e1784d9b74fe6cb37c5bc9b5fd326d3cb5c99d195cf3e1df89af88eb037347df4e00cf476fb0253c351a313e94a37f3e892f9adb6b051a596c4fbf2ede3174664ee9845687ec667bc2966fb4583cd86e93e78e1e8fe264878eec992c040056079f4685d886d0b0a2f421fedfb250e59d6bcd2aa0d2736e89334961ce31d3fa92c2040dd6767868472461905b77c6f55e1ab11a7325d3e542289ab2d06915a20b0c78db783669fa6cc3a6786a42ae3e5b2c1ad4a407b5c390f6b714223f4227468bb5cfc2692871f4c921b30d8d907d37c94a7625a036b52c30c3414704941d512c89ba8388c8b15a3838166f95dd0ab1e363505dd033b1d9cd11e4df214be6f008fa971dbaa1df98b02ea85e5f6ecb2e122d0083ad4980297e97b0c0df2565a482ecb5abb1806aee0bb5e84802226d32ab0c7183241e371493b3e8b3cd4b10555812d9d8271ca2e9ed2be97b53baf51c9bc0614bd67bedd8119265ae2a907bbf471bb0ee7350b22f8d0809e431b1c95dd12b1bf7680dc100e402bef27e0060a21a983fa80c999392cab4288daf316382190ca556cf7de008256221fe4697a68d420603ed1fdd3b221a223a8f442fb656abdd13fa9f8ea07b855fb256175cf59887d481d2301ab53a045d6dcda38e44a7f5b8ad694b980c34f5813f3692771a6ff8e3430fdef21a197198567b0e837b35fd3fb2010bed0562061c71ae183646f97c2ebb38e1878460643aa8d54009e91b4b0ed98a6c2d348ced7dddbb197b755d9d387f2cb41ac56c468b2df413a2bbcd1b741944ebf57a97acb7ab00c00140c5b9c91d56d55c0ece218e3b0e94a5593ef5c4482b24ab2707a037eda6a1fa6b47673cb2da0edadccae04bfd24d8ba6a12733389a633e2058cdd58d61679b4ee405030bcbb1f1901c87a03a4456e0ec816f476dd9439133110a368a0d9db4edc33903338e9440340ce28eeb506cc3a1576fa06d18d9c4fee2f06841b46011d9d0c18b49af9e6848d8266de1ab5c394ae82b534f888112444da8e4ed7988274036da373afe02ccc84b3cf1d6118d8fc6dfdd69aa606879936d18d7d452aba0018caa0a810a56c37473c588c494b4521bffe851661b57a437f9b7998ae05700271dce3f16481917453415f1bbac8d9a098cd6948ea3d36c7df2ca6255bab8d4ae3eec55e210d1c61cd063cb4f704cef1bd916f86f756e60adadfca572560c90853a5bfcbca81a1a2e54a7e5dd46517a28c55d7841c8c14f61bcdc2a41915ad4876b3aec2e656321b4443b0be4934e51f70e1793a99491a56587e51adb0c26084b969b30307024147ea6753c62fe3b9415199287c016c61229828badfc77eea6225613b4eff883121183b3b71d71f0aa7e902f097e3e96c7bafd3274cb18cf3785a6a64bac1f7155fb23532c9df03561f442066bff46e516fb5faecd843cc9da333b38a0ea269999ec9fa7349e4f6e992c88f145c18ede8b24298885b5595679300e433e1dfc96728508d15b351b96afdab2b8ada10f4da531293bc753ec2da45029f7cf10bce14f45212cbe001dc6c1aacb01d60cf275081829d88ef4d530202c166d698f357be1a2f261ffbf9671f346e9cfb6ee5f9d33bf48bfa3b5ff088e4652d1f4cc0d4d3eb09514547305729ddebdd2bade9779440aca5ccc6fc5ddc81fa84b50b59996374e6779d69e8ae1d095496ed14ac4b658d64f02783f6b67dde31e466fabc20c47e767020606673a644ea7796854653778de964ea07d6502b01cbc40e6b0a616d1e9b7e6148e9838e3e2f033cd4c6d1928eb66b066cd719a783b55580f27e8f4ea2e56ce8e3a07f6fae8914ee4957798ff6f433165062fa7b310b7d4774a01c016716b6f7d07435e81910246d6e96a1c078764224fe1474d73097335330876ab0475ccd05515ab1f6103b23eaea0e964f3d6229a0b2c109fc76b90012cb6823bd27722d9f2fe29c2bf4c7e9f6b3b3c9725cc25167f53a3aa253a4dfb9fbb9978f2f27db6fcd63f7a3774f2aaf6093aec33bab87e5519fe3f058521f32cbde11b03e1fc76539f09266b9eb1f1f1d8971109d6faa94a46ae57d3c68f4667947bc8ca516c22472ce3a39b566bc1071592c3d508686d6f9c177d783903e3fd64bc2249dbd732cf30918acc2fc7d5c912233959a69736818a02b9cc20ae03d10f821918bf892cd72f1924d6c7c0f1fe395ef60b6eadfc634f4e6c03256d494fa721a85e895c4aeb7ab957ae41a63fd03f2beef3c3df93d66fd2e0141bdc664fc61363cebc971378f37f9844bfeb19f16b0c5243df668fbcd176cb6d2e149c91869a4dc4a51ab28e37a3c4a67c5a10cbc848ca52777ac6faf81a57c896fdc3a3dcb13645f6a4ac7a2d2871febbc791306cd9bc39bc3d6ef3787ed47da13d453f3f01187e1eb9896209171d19f1f50e7e96432e8e72e8c9b933e639bb49e8205f6d0983547ba7e9ccf5339cd59a41b4753b9208aa99e103f1fe55fa6609ae2ebde52548f8eabafe5b87afcaf7f1c558f8e42feaffae2e2da0b950a8c8e037f67935e5ddf257457b46ff47ef563f1c3d1bffe7e92d56a69e3b39cd11a9c7123d5ef5868fb5d753a99cffbc9f0ae0a2315c235d5c9ac3ab9cd679de1e4739e55933c95702cee2faa9fe5bcba984caa4348bcaabe57cfea5ef54915ed5793bb05f17f7b9e7127a1a930c3a5ddf39a51f6ebd8141147f8da089923489979de892b2456b0e00aa1ad54cc602fce0b6933ec498f4e7acca32dc7faebf3c67c9928ca9fceb85e404d824663c37a9f2f7756a5f9091c17928f6b40599677f2d98e654e23c28220bddd3352f33770ed8d2a5893b5207a81786794809eb13225d3b21628c63be8d8390db4e9db26655b4cc1fee4fee700fc3854180e739f3181f70009d4c5cf7cdcef74584fbf6f4de35cf98b3e991de5291fd8194bb8dd73bc53ee6bb72948b27dcacbbd18f874da9cb2a4cc9f42b61f84539805829812b4cf035c124ea7c38e7e1a4afc176c9dd8921dfe7c65f04e0761a02c8ba83ef1f46bad5fae1ad72818eba432ede5cf8dd106f17efd0ca67b5a8a0909c4024abc4cdcf733c84de834a6db410c0d162dd254a6fdc5dd6a75c91e818d8bd35ffef878fae6c339181b90dd8caca7ea54a958a63969c7f7d3e562273f306445a5cf4cc4fd20bf030d1fe570fd056afdeab8d1c003a23a5aad3af5ba1831b3213a4f06b51a2f8192c5fbd3063541b3a0783c179a14e9896e94dfb6d1778036476b6ba19a78e82565b2c52b0702640a814f3ce5e5a3f9c67ad18fe0071a56f19ab9460fa2737010986e4e8743d7b162c4be37b4d7318fd138565348eba054a96ed561dc8b476a86ad1c21a1e1f7c79dc90e5f0d5ece9eb89ff7bfd2b7ad0da30acbf50886a39dc94ed3aa0de7dc1cceb9793b96fc865fa2f02356abc53bd8671e988503d71db6bbb54f4b8029763496f8de2227ba8dced3b957da88fd927604d01b7bcfac0d8ec8e3c3df6fe68fac55ce8db674cee04a005be79b79dd6f3c0af60f09db1efaee13bf19de847eebf788ae8366d40c0e45875af327e3963cf8daaeaf08858f248f825e376c9aeec7ce4875a4665071ce8e7550042162d35fc0dcaf28b7bb536cf94bc1118835524a28ad4506c48366657180b79f7f49f3293ad7a631de867da83259604f809461b3d029751523a23042625855da906f88146976e27b6df114eed3fd3adceb347441add66910534a5bd2b76571856a7129547e8de9ac3f8107565c5cd2c1400ff8248bbb74c5f6b41d6de229a38e91a4c6f68a5040a3b0d142afa8cc3555a88fb8b82436f594c80aedde6938a1119d51f4c71122e6eb369d8f980a2d035336dd10738f82b28d965a66091ae84a8efb8bfe57a6897feef517f99048c05d3be129cbece537de021e626d45f8cd5a81eebe3fea5ecdd2ffb8ff6fbce60ee05bd5820d19830b757df8444f274365aabd0b0abd7d109cf8359bf90c1b1f05ec12a56cc0ad96596c588b1727361de4695e320df7f6f7e76ac4f98759df2b1bc35953347127cec552bc172f9d73f9b6644deeda5c9db284f394751ddb0ec0df97638ca86bd60b1a5fa69babfaa175906592fff34c4e7def643e95e3272787fce30556590dc9fe5a1dc7ddf8928725f5c0a21ee38f71f760ced3116cd9bf6ae5115b747ba692b6d66b9e4b6532a5250ab4cc1b6e1138937363354ff47249ddaf64599996362bdc90176af90eabe519670ce24a0e2725332dd13111bb8413fe859fd52a6fe4d46d60fa51a384f3404ad4389b3dc316974e53e21f72677b16e89ea721b1d2922c3b830945e1ac95969cb52e8ba50566734416665e95685d8c0846e60c25af2268a2f5b729e101c727f0bbca10604cb3303ee946635808b4c6ed38a53fd1ab78ac67675a582e8e4fa6d12baa368acf5aafda228d072d7a0b2683fa6248403122c4034530cf45d39fc3eb7c0cf995186e4cd39cb0123d16c46ea78dc54c8ee7e9709941ee0683a5a499fa5dfa86117dd647fabce16a05ffbea210488d27578a9163f52066f4646dd67580b3c54e067dd2b4b02399f2a780263ea72d15bf26b09eb605d7870ca3326d66211a137e371e1ae7aebef487822b8e782598466cf16bdd40b94bd298d4d7d76ab4baa7dc6ce0823a91a1187883d0cb485959ee619ea89a6b6748a5d62515ed8697fe5c749b5d67aa42c2720385e269c9415f8f57abee6a35a225619acad0fdcd0e0fcd71182c89ca9df3b28021880a529cd0c50a0292f6f78bfe61a2807d94e817233616cb5810600de74482c7a935b00b9c100f4ee40d0bd91db3f3e815b0fc6214cd3ff7d971d16ec3e03e25c6bd7a1c5ed3d61a49ff3994966563149af1738f9b63a867088846b1ebd864773f0186388b47b5dac8c2c649e58c0184c772477321de634286f1889689a9f98bd5ea9f27f1059479f3699ef63bfd9cd0d59c40850ff0714ce39a07d1cfcadb660cbc398fd3c41f6beed4ff3b0df100fc34bab88dc78520c3bf5ac8d962753ece0215c88a5a8be3dbbac7e51eb57417cf694073d3d49130a072f0b7a0eee563e283e63b1fff3d08f4d036a62b1a60f3cf236cff78083bb0a176ea8af294d937d80be021d6fcca9c43418425180bc4fba1c9a603e93d5122b0f0b2ce67915630d76a9ec7910f58ba4b7b40b9aac9200a784423a87c856eee4cad9de953e2f1f7a06ad851457dd648115af511ccb3b40559a45d40001edf87cf414b17e758e9e93f43adfc1e11ee5723716ad2902a3ca6e3624c173bc6444336a8fa1ca83a51b19dbeee521a24520179111a85a33ba9f807ac8673ac14cbf76ce99c4db4d78ee280ff84d2877008d1da1e371b1dc7b174edd4b6daa8d572e237378a111b23276e2e2aacf837bc6bb41fcdd149ae55f25bf6fea7be6b28f6ce7ce7267e5172b40ee1aafb3c4e60d87bd45643b756174515073bf4a539e0d4332073e7f8bb33c8c35818a62c3b7aa71541011b792bbafb85b9c2b4bfa45df562b57a0121f99c093da6cd021957fe64830bb73464cbb091956933e3cd3d25d453a27b4afeb39e92f84ff07b3b3a1a5b073ac726a8043f043cda749771b531e3608bc0c8fbdd8b633fc33eb446f5ecfb16c75914389be898b010ea66eccce9f5c7bd9c18993c7ba68c88bb71d7bea6acb322fa64d52ffc905870a9cc0a338e02478c35535cb26c60a99c266a35eb0904e84d17ca294fa4705263c8d2c619bc3936d5741aeacc2c40d5b2235ad039f85306932d103152bec74f36833ef02a4a5191f12c88be2acba802baa7ba471636bc12b7e29288ee77e23564c8106b26442fc1d0ab4b14c3554220ac880a3afbbb81c8d431063c1fbfa2f5cf95b68fa1420de85af1f47eebbfe35a3bf06f9acd00b7379f1fe19758f14e8c96a2d784a8f8240606eecb5aad0f27b997d4a671d0b0828266c77a8c3a90e589d741b8f3c9e5e45a7330a803e2bcc3148bae6389f44ffe4b45db6cd8fd2b842635a3701db0b57e37ce0867af56a9e8c40a84085d0a021342aa4c94d12e8e5e175be2699f754d2c57cdea5d73ec67fab4f7fedb0b69022709ec0972a2785cd878ada3ad4598625d65366f75db74cb038ef3e815ddd2d272d5c4c75d00d638aa38a782177b218cdd0952b9827a348ce7aa7e34052948fb632687cda50c775a1eb0eb22045fc3061d81fd2e116525e9180f60485d47c556184fc6aaae27d09178a9bc73a375e4d67fbd4387ab0460fc18708aca10ace07a1434e14728b98520547364a19a88a1b5a25fed27950e48afe685c587f3cb3b24da4374406cb47a515b9986c587f5e7e9d4d39fa33c43d6eb60dd4d206ebc8b3ec21cffa3d81653deab550b19c261a452469ccdd7612ecc560a6f056fb179f84a38d469d84dd6228dde01075a4c141114c5f13b02837771e5554b2a4776b8769ff9efc0af25d214c669f475b5ba2d9848555ee624531c2e45f3a7731659abc1b7ca4fa841b09d1dcd585dc696daec9c5cb2432d08922551989db658facbc6d607df8a5762698e955aedbd6f6fe811e12bc24486187911dc0ffd17a22bfd5b28d909fa5fd2c85e368ca0c246a82a8a3eccc0bbf89d981000a22e110ae89619ab69a0cdb3c6d66c09b1d13a1184c16af0e3ff8dc13fc5e09f9ac1afa7f194837c01322ee3832d71fd527c844b9c9d6a8b05e7e2253d208cf9ca198c7d2a2a843fa7f6f36d39ed717a6932be1e26d716988aa78669b80653f0157f167156e0f518fec5e2051d69e283781ee7e2adb88003a02c0cff2f4ec632ba0073f182b8be8b367fd80719833a9883c217577c4d647cf401ea900568a5547c90e28ad0d5877886c3e3f2c90b2b76d4688a4a3fd09b0c7cc1325e12c1215eb8eb4b78e10be19afcf3a15e9eacaa99f19734e445207ef13f00065ec62fa8a31443626666afd44aadf6a224b2e44e8b025a8d8f582f415d7de7d5535642ba62b08fad54b6557f7c499d99a13b62009adf238169580c13356ef370cea63f53d5c294de169e9e7cdada1f9afe57bc791917d3233e3813282a9beb65dcf9ce2623e53b5855a30ee937c300d9dd05f6d00bd0abbd84ce9e531b6eea03c24c217ac7f3f8966e72220e3a468c2bee1f84a370ba8696ff03f5ff3581bb0ccf20481262b417262a916934e0192a56014e235f0a1d8227fa524d0781f40bfadc376edd6671ed2f884a0d8b7baafa2b2db97861984f2299e217d18722fa11bc953e104fa93d26dd6112d2fc00ef7d1acbf15efc4183f76a75cc21f52caf5e9c058be990d8576c0df0b43c8f0b6050da1cf78cc143e2a0a8f3d7b456443f8cb5d3ffcf3a3601b1c617f563616d267147134388ad97d218996bd1e6c91faca1f2cf41f4141419b5557136a1a236172aa0d3878dd905267c7876ed5c31b224e83b8f3ffbc5088bf15dd042b245f673e658ee7761a8f0a378083f852fc5166e0a6924df04a912a2310e7c2f8c028391f4dbd8de031cc4f340bcf1df064d6da6f5566d93f02d9dcffe5b386008fa3b992f54b946d1bf0145ff0614bd2014fdc2cab2684eceed8dda871772d123c2f08b7f291c8c15accf15a28a97446b41e0b654f7d1b98305e2eb5acd86523877c4a61c3fa808570cdf27fbd9c9491a258883095ded7bf8b2246d51b92f5310cc65ad1d23b144730d03488a9891cc695003a35b65d667a03820c467dc8eafa048976994ab78887e5ecf8a401aca64cb0a99cf4eee606bc0eb318df3d6595b102cc5f18c48c527d362966080be47c791d1005923892ecb9358634b5f3815f7fae808e7820f8e70ac5c2d98639a0662104fcdd2dd62e96ee95cd55f3670a3f53acaec44cbdf40d7abab9c43881a06a6c49eb1dc90a31fe66ef0430e2c017eae1ec36efb6e9833d7d8f4222f0452ade379405b667f8e191388b6255294296bd372e058ea41791882d5f27b9225ec42b674693bf68beb667159870ba68a1c13847614d442ae6d8a549128dfc2da86a3d1d1d64641eceb8ba6feadf347e85611e5af5b7cf90eb3ea2e3be0102d1d2702362fc43577db25dfcfcfae745f4949ac0c1bf2cb33764424309236b8c0adb270b813f70eee6259af700861bed7484bddec6019c33bc21eefe9e4b82be1c166e996354561a928b221f4226544bce468a0b3e59cc88bf7b98aeb8a57df078402a11f039e6acc97699acfe7052733d6fb479c13e7f42bdd629bdd15e7d2b87c268d1f3893a64482da33a9322e1d4ad36f1c4a77eac07e0ff1a87318f5c0ce27a07c31b8251d4d533e9a82e8171a9ca2b4f8fc59e2fc599a5347e2d449a99a3a67a6f119ed453e6bc66e58a9db80584b166e4d69dd099a6925d5ca6faab3521869b38946a6a2d32ad51ad0cb3cbef4d943d5a1d589191c141ea8883ea121263a77aef1492f8b7bd193cecd5285e639a7793ba36e97319129844868425e12f5734e1502b43674b075f3a33f166e4110f66434f4a17c5912589f076b854169fd95e96e49ada9f47deec24c64e6890c069db064df52113a7ace41d31f188999a80c4cc87da31ec9ec15d446189179b314d6bc84fd0c123e90f6d28c00812bd3661a2a8e90ad4771d154f727faeee0383c86fe1928fb4007aa76423995849689039123e2a0fb4aaaabd966f52371dc42c85834f2dc15bf40cfc20a199b73e0de0c3c24ac5a183aecb05c2a3c8c09cba786e74d9444c663798e313cc8583eb455079a32888cec3b910954ba11afce7a532baf5d0e91efa2c1b76a5cece9334bb349ea3991a0960dc4f2d0a18358edc32e415f6094014303aa5b8139fff3b7ef2f102fb956f394498b0e14faeae2059d5190daa27113451406022a80a8ede6fdf9d5db0fefcfcefff8f0fe8d1bafbfac68856f14cfb90d93a0566faa0f3aeafeeafccdf9d935ee78b8ce3acff32157f6b0aed0c9a79bab065b68b36e5bd65054cd29c5a86009128f5c01181d39a57b13e3a1a3b452b93b1c5a92c9c846fcc007d1d78de82cc699fc96ad7e8200f771173bcbcf54e828fcd009450cccbe329900d557ee158a35572a975ba9dc6a9506064aba1bea7b7bd6631a611cd8a45696d30c9c1a2bc9512b1c19d2a1c291f0e04be7aad793b2ca850fd0dc7a9b4244a9011f78139857d9f82a31c711ccf70b21cd888534ec69d769c7313c5b5b540241d128eed4f383e3a8d03b3bef0d22b6f283baf964d0e49725dccfacc55b07910a35d310a31966e7d7ac24d6e79f72cc07b6888a6037dbf16722a903d0a8fa0812d83a6de45fa6729c4dda71e6dc4459acc65b4c870d49d08d391036a4cec618117490db74d79a06a26ac4211a531bf620764271fc9996a4a38b1d0e28253f11273691c08b2c753f4f36ec7595d98ee5e22b521bf2e0e4c6a6c6e17d9e382e77f7fb63d8b70d613a389262dfd85a946c2455ba1cab14785f586494fb83c853eceb98097fdd8a537167430e5487bb3ed37d7fa00c0403f3bd66800335cd686e9e97cd53d529a36c67f2746304d8119283766e3cc0dcb1e603febdb9ea4f79c765cd62ae5192c199a954045a77a30e74df526bbc73e0c2726f0a8f9f1aacd953b89c63440267eb6285b363a840d5602a49fc920d84cc83688fc50fb06cb5c1f861b13f6b6e7c9d365d05c59f05e1c6436604324c67e4a7fad30a0416406a5db634340e4f25cb1d0edcb0c68ae857771a0db39f107b0f96f076ba89b7056ce5a542b96c341998133909a23bd75bcbd960b9c1ca340b2afc876bedaa64aa29fbd8837bbcba1b251378388d51447bdd16fc1a7bf7f73850b120eb355d8d65f354863b7d358ba0b2f737f7875da8f78ab2f5fa1081fa68567e8e0f7f1f77b102add383dfda87665cb7ae3decc88d0f876071b6a55e262a5e2938fda0643beb21a6910952cdf16d03e6604b057049a0af80ca74c333e1beb00dd32e0a4751efc472f03d751410d39eb77aed001c487fbc246c1ea5c4eb1ed9d02b4dc37b76d6dbc127fa9963a62c24ac716faeea814f63937358f2de7c86adaeb1c63561fb5c5498394eac85b615319e9a0b9e8d30e1edf70d4347e355e0d212dbba7bb638e3f9103d3a269fa98892309c1be9b0e234451d56edd1cff7ea98dde0817b4133a1d90a9789dfd54a126a6c0ffcf21294145f2300842e86b6242db9fe62141c5261a4dc95a09dd6a13a6cde36d3b4eb29e04c0ec7948352aa07033ea6acd95d5c2b6d46edd82e5567ed82e29f0ffa63ec30523df58bcc3b2503efc1562beccbb1a38932fb97289669477282d22087e9663c77c116087b968486a9a48ddd7e33de88ed9ec7454a1d04028f5278c562df596322d081443db885394b6253631b2a395d1ffda9fb9e80143d08b3dda1dc47ce707fe170b1e16c8bcf03f38bf8a932e6af2b821d531f8884df56daac503a94df387522ddbe8180dd46d2e09c3e84c085db4112ab073bdd7d87c53e55aafa9bd6eae6bef5fbcd7d3b38c4be6dddac6fda6dd6d68b1475829bf6cdfa3bd1bc191f22b21aeb0c69b10e207ca069c522f695fbe1e19ff3c93882e4888eed78b9e81cfcd35bd3e651f6f74a9f4af89f996a58e8bfcfe7d309f244b60ae15b70ff4c05ddcf889e35f85105714914a5af92dbd94baaf801611d5c0b8ab670fa60774fa78b02bdffa24cb94c3aaae7c49bb461d765925111e2994a36c9a5167bb9cce8f80a61663f9a8cc3fbd31446d4db1320aa8bfccbe29046dea7eb47878f680e20740e09c9c3db2613536099305b8b2ff35947b9b8c1ba2cf47eb97afffce0faed8fe7971e3f7bc97dea6707ce5338a0297b731c8818c7844ed6169de2b146af6a665f951f9711272cbe9fca74c03676c4fd1286992bdbeeb2d3c786adf7a77210f02d1146d9a069ee6fc5ca57d0c7d23e29eec17b876398ace10a165d6aa245d6d8021407a41f1f1d9de0045cc8c592b8b2ef8f8e9e983bda78b040c400fdc444e3bfdf8288bcb15924b62133df1e04e6de0526c7abcc1cd89b26e91502eb37ca3732254e34102a0c53ca6923e23474028f80f353877e5ecc849e2c5310b0642d55a5481a038014690b3effa37cd19b6401515450c545d8199a2ae8c24f8b856f5f8cc574074599d2c07502263a9dd3df8a76d776634148a182254699194ddca56bd56dfc42fae69ac84d193fa7fe59e6d54c8c4faa1fb4b24619f07178954bdae10c93d5d5558b7d60aa16256c07a2889bd21e47a46f3dc248074cb040364218009acf4d0008a2afba0ad3c5db6cbc467d3a8768fc85d754af5e175e55aa85cffd45ef6c9667398efa2188eccade573fdf51be5d39deae6660fe8cf71831b28b5e0ed22685db1ac8b971e3334ab492e693bf2c51f3beb219a4ef832c5f5f724ad700da5d23c1b58fc446a5881f29e0572da8eba2099d00cf3c109b7520de2d64b832ee94e4b683e29ebea5a7be4e8a41b0ee19d97a69c3e91aee518ff39b5736d13800326ab37b1cacd183672b131fbb5a649efd7fd8acbdb2e8e00c1b3fdd726e6011ce92565e61308dba9a4b0e6535132db6464e410a04e1d2882c607337d254400495ff94c8515a8ccc645870588791091a9216faca541cd132728fa9ea316db22a6e3284b25563cbc057d8580af5b5616a4fbd11423699a8d9a5b85d83224373e2cf1b10ab385116608704bd1f3e74eba151344b71ac90de942099fd8e0912101b9ad8f6519fe069293e89594ca42270896001af1cd1bed86ed13091676a4507044511bdc6071a70075f60df316fad1f100df0e21c72cdc4e02ed612fc625e64ecc5ea9e5f7cd344535f84e7ccee2f81443fc5ac30a2d51295a7fe2715cbea138fc4906c9f8a71894fd18f54a939f23f81d5f804e94547d20d0cb1432a15b45e481ba8142f0640ce80623e8106f2cd70c58c16bc43870251483ad846b289444462f7246b8d2c4e596f1a966e50d826b47dc4997dcb08d1a4065cadbe2a1fc81fd58f8c39f8f1a6d5eb2f265cd9b4242446ba1f151ee03397af4bb988eafe011b835b4abee9054526eeb4c850a4846b44fb6a5f36e87dd891b26c5eb9b4088fbd3ca73a981c6d8222ecda7a33466421e278f0a56869c099b63dad9b99ed5d7285d4d7181b7d8912ae7ca8baa667f00227e2dd027d7cabefbefc509a5f163695fde58c4bbfbff053b677ba5780459880361c67e1e55e7d8f63fd79eac4a30ba007fa01d94b13fe3fecdf61d131826cd7080423a6b41808286a24425822d495c35de445d02657f49239cc28027cd296672adc9ce24dd839abb483bfa8f425be77d14f6793f9a4b368fc72f1e6e5f5f53b2f0851ed37be2710d353ef706a6586b8d22a51d545c88387021cd8214e10da6094d1a665740881b54ad4c18c494244fb5c708a32f72327368011943a854fb70bbef96670f9793aeb4f179cf6cc91b5a58dc998ea65771c274545418951083d265fa843946d48f24632c9ee4a61774179d66a89cf014b5966ed3153f4a7bc95bac788a3d0c632a2b5e090ab3bfb74c67488bef36c65a2041d2a1e10211de9250e4a03628cfa0c778cd4690855cca05d3d40ea70908aa03c38de91cb64e4665028d9e51372893b51e565adf612a44dad76db90c9467ef4739585c44aa0e24fd21fe97079e96418cd10fc4445dda073247a19eb584059ec75faac8aebd46ab031ca9a79930e88f087a31fc22c92fef1e3c7dfa3f431eeb9034ee8f2704c25ffb342994baef7706825fa94513c429a640e0bc5c26db5e1b1758cb1d0fbd8fbc3ab13b59fe29d7c56af07453cd6efff4e544beb7dd9ea1a054c5dc53a1ed2cbb8eb8f8af0e2c8c7f8c7d9e99b374f4fcf7ea45db3b5031a5efd7d508af3655a6c9efb433e3d6d4910a268b95a1d3cb601fdf1509faef7ca714dc2f4fcb6418cae5a68a8433ff9e38d83e0291f63b70876a5e74971239cf89ebd84ff0292690609387e88e35b17763515c544a88eeeb6dce3e5a613f39643a40f878609553dc2c032e1568a93bd59dc86ce13da7d41a4e7e0d652b39c383f82f1d5ed161f828f3fe3276ef3f119be6f8ec4100325ab62ffa1a3936980f1cfe8fcbd838d893216a9d5a64cf0985fffce55694e0b591444f242c690c72b218523c4df65ab2f9bece5a21ce3132d11b652fe5daef62a84b071a5df90215b1ff75d9ef1ecd0bee958eaa0d7aea8104628a4ec8c1ad80fb30513a7aed1d09ec3c29a6992f9c95d14802cf6c7f4d8503609fc8895999c3f75caa518d73b41d0f4e71ca1e64cbbc93aa18160e64714b37a30a725388fddc7f43a2d09d59843651a9f2384629dc773148468f56e77ab7823bea363fd2e3e2be2dafbba2a447277f131238461ad767c62eb2861f52485785a59117940471cbb77b53a2f2c13b486f54e94193ca89fca069177a2636d217744aeeec467c47c2b217e47a5871812815e186f21d26410e6ca0df42d3240084dbb7640bb72fc0c24c4b4f158b5fcbdc34d12b9dac1f42d6185d989ecf015e969c3f2f6c0da56f0d92c9523d8e98a9e13949ace5878dbadf53274e997e08e689633315f9bb01e1a567a85d6bdbb7b2f1480bda62a3b40bfd82beb9df10e3f6d49ef4b62be825af9b44da6d8463258c4408b620cfca49b835f0cd97b3697335b328e53cbe281dd332c9eda304fe92cacd5f646518f2e7b41b3171e45538739e73f5940655a17484dbecae281ab271cebc87f3e5208451c7d6bfe24865fdcd870bc04da62e8971b7172b5941fb4090de2f4b39c364783dbac1457c6d6c76eadf4d3f7eb28fb46002d950edc6903c2b8bc891431e5a60dedefa9b690e74f9426d5970f7dc9464b26309723292fe061f660dc2c132e380bbd7c7cb09c7be2f2c3c5d3f3f77fc034e9f4fa2abc7f767ef6eae2f4cd1f57e7ef42afe18917efdf7e78a7ee8427de9d5e5f9fbfbfbc0a5bf7a3fe98461d1e0bba783e9369782446f20b5f7d0f29f9bb591e7a1eaeae961d5c8df32e971df0a52eec5ec1f4e17b31d4176017361b7e6c1b7e6c1bbe591e1dc91f7635ef9b47a69360472f6d71f6e1fdfbf3cbb35fffb8faf50296b26b5179767a7d7efdeae2bc988c8bb797d72f43efb51c2fe5ecaefa3c4f667c71216769af7a3a9df587747d577dbd1ce7f46778573d5d76094d55afe8e8c9e111547d9b2e26f8bd248a9a0b9ee5295f786ebe93ab976fdf5f17bda12774822e4c07681fcda36db48a16d158a99d67a7bf86ded5729cd13b1713feb926b206bf3fe7d9585d5df79633be783eebe3e78a2888195d6c8fc83487b6d0101ac1eb7813af95de38bd78774180e19d5e10a4bcbbf0da629467fde528f42e2e2eaa99a8de557be16814cee75589bc753da2a709515f1c668777ea11ca3b84179e21d2b0774eff88ea8579d913c3c9b8ab1e3985aa0f5bac4bb9715dc8ed9b8a08611a7ace382a5cb528a6b2b5980e9733393c938b5d21ab8f55d265624768f413c268336fedc67a9da62aadb755671e3ab92b6561d7240f0ea280f5e048c2ccdeca362f913a8f0edd1c309fd22207cc27950800c68cfb86df889382f540798fd86a28bbe987dda5b82e7d6a7ce5534dba2002609eb58ab7b4c2d241231b899c683c7ba5acf19ccf2a41791d4e8ae5612126e48e8cdff40ad5e7ecf3a8c2495d8b34f44e6141bd1c135d68cb55ebf31c3b30469ef086ba56e588f4b9ab5756faf78a91d56a15fe1a735f720fb0c3c787991b67252645be53b06f8540cb89a46774d066b59dd73f3ac93d1cb5f67fd970432c256b26a1a3dd96cefb2fca59da6c1d6eb73194733ab4759b0440f563e7d5b9b645d1b643b0fdfe1ba245aab4b79e9610720711c31b9b0125c6ac4b11d7f1a6636c1e4fe0c8a6ac5ef79e15069c2f1322a0a68bde74d6f9e22989f70c1188b65a852dbcefdcc5bc677401f8de09e7d4dd28d98ec7fa4b625ad140413c95f9565aff264d72bd32b7951826e8ec30ed2246ef34750712d47d0911655d27f935356532ff4095d37af16611bbc08e73967f46d882d8d589f38461a27c9e36848a2b6556cae25ca8476cdb8a47cdb4eed33dcd894020a29cb6433d2b9a48379b48ebdc411ac7591d13694d7c0a4078554a52f76f2f78e62c3846be5ae9fe11f6e1bf6857bb7b597f42e8025b1334c14e30e9cd3598b04ab20426c68c8f574407ee3afcfde6b0d978d40cfd9bc3c6a3e090233ce7ce4ee4c81145bee8449965453abe0b0752cf901f5817d01436f3d6713bcc4a601967ff3114a63ba030df82c2ff10085306c2948130df00c2a4ee17af36a50392a8fe30302a0cc658238e3fb2bcdeb21905a42c1e4019af92dda93b4b38e4dfd90709779ed9ce19b20bc03678ae2e2d543f0cd6fd6497a55261e50bfbcca4bd5edb30e9d56539399b6b7ca35269d911e89723fd1b23a5c416709453cd1693e88847201cd93b566f62ed8968edf4bfec622b9e72ecca6de108afc1051d71df8843f8a07ca4c4193a226d27686f29617c595ab2a903857c19adc82ca573c72fb220a840de574ae7eb11f3ac801516db3a14bd18c59913ea1a1170b5585236fd117c7e9cd0ca459e1b6041f70e47dce380b6c8884eb043ce3099db10e8f3345ca44148cd118821f94d1ebf22b0ec7180b5dc1f096c45141854e7f70a70f5078c2f10372c1df6d381b795be8838e2c56cf8637e478c2edb6b48be7e0cbae273af4f3bdf117e9c125da1b2b6059149ec60bd4e38b74304cd23dbacc771977e1082cd4db3c7a10bd532eb988389328736f1c77f61f3476b0575f5f1c5a90add9829c1459b2d961d39062349a2daf206623c7e94c38023b61b2b0c773272658dbd97687f44f52948bed8e1afdf4e71e6078a982a674ba395eeec99a5a6e7c5d477108ed5b0e6e237a32769799dcec1dffff9c3e3a37f1e949bf238ec17c7182de06b0f911055f30ed055d805c98d31ef97ad068ad711db207dc07059ad6451db011c0925e8b7b602474963df81adb4774d671660d8cea34760411c646b9e166326809075fd2e64fe818962394426ca0763b0e89916895e4d3e0ea361ad2663e743101fba5e170f7df7bff365a52dbefd89ee4c85fed602217f8bd61847ce4081294d4c17d748c311762cdd3c2e845b81ed749ce03c5976cfc748e992c595ff00c13e68495b9697c98d48a6acf56590e78c5a4d38bddbec5d9cbd546e24edb2cf83a6a774c6486a5acedca5df099d5fe5bdfafe8d4a18b655dd3ce6ec7d12a181f3609799ab938106a667e3f96498b3c696100bdbf4231d4577b5fa1ca9130bae04f1de5eae0efe22d0efda4af2b7a08fb5f63b94c74991804f6543b261480b53e260bde19900f31225eb25f6db0b13eb2d7e4fc30c73df83cd72a0c274e710dd7626745b41fe01dce317e703cf33ddf305d4a50093708b8aa31afc6447145862c1a1db53239525a367bf6cf89c15aca24ae8345bb2ad25f85f4dfdde713ca23ced0c3337f79e63e8fb73d188ce69de70dadad5d4d8d3dc5861ee8dd8b945ae11c2e2c37cb6d0c97c8df471a31903fea62993df5d05c0b7b97293866a11794f828d26b2c988df5f6f7fd59f89abe3a6539bc3e948eb0be1351cb149572042d1711127154e6ff7dd98e6b7f03bcf143eec11f476db51053c650fe6e6b88d118531ee45895662e58de5187182df29a135f46633ce0be6edefdf12e85413273e162716ddb6542334758b7c5c6b20ed84ef54e607750def9884136cde06ebeda19a1961d3cc625a6ed3625a601c1adc330c75e9f8023fa57e53fd9be95fd6111b28ddf8b262533acefb1c56742bc55a73147604479250dbccc6991844fe201e28c5cc40cf20e6ab5bccd70047483c1043fef6193cae4b134673a81e49c480a0d6785e76f4259bb350f727ff37faabfc558769d161faffe203b3a2bfecff457f79d15ffebfdf9f8dd75160d06e112e97830e6dc35927ecee843205640f02858289079750ad60f1b8b231e56ac62327760a35d1e4e909d5ec382cdb6da690aec6e03bdcfc9d1426dc14c6e8672a55ffe60767a10c98f3b4ed7fce8c7035d35253dedfe9764f9c83da7e546abe6916a5f1ce449209e7604477e54fc524c1d9ce1d84eb8ff27acb33aa9067be4ed09c7657761034dcffacdb327b296f601f15e38243436d3f7a5c3c4ae7d3a01bfffd49de240498c180920332aae08c70dcca5a3fb439549f23922f4c6f8e442fca2684faf96df83f8b8afeddf98386f87dd12550c7c1a0a2c9764e72d714d81a9474624fc5d12112ab1c0583733d9825ecd4638f3e675e8d639ef4c024c35a12c147e7639e5103f318d6354d6fee85dff9fe001b7263debdefea49fd3b2f089a83701e7c17d4bf6be9a236bdff5d7d6b2a9bdff53b55eab656abce95916af5fe665c9d7e4653a913c3b9e5ddcc6ec6ed0069b86e6ef68f8979a67ea8d12a1ad8f31919407b390f7413f11c4fa122bdadc6a5efa84e3730c42dbdc215e35b04c6b819afa912223e5311df7cc70229c35d76ea9e31f08b3ca178f2e7a62d9a1de10d6016f899737615daf718493122f8043c74cea974a76615d9507b066a52c7d7eac6b4f70a104bb5854b37bed5c554e2955784f51e88d2896d10779dac83762b7dd9f09abc27880e6125521a244a884ad5b73f13458ad8a208fba4388f72ed6fe599d8a8b9b767053e1b8f74cbdbbd7eabf51db58bf6b71f6ef04d9dfe70b125552a3b149a4c10d8f88442e86f34937199bcdaeea756dbfbb215e48a65bd5f52ac0cb1f922d709c75a8add6c57751bd5ce84a017b04d505bcdbf4c67c43661e5fe3fcec4f0ff35aac8fb39220239adaa199c529755e2ebb461c31cef9e2aa184f33e15cfab594eb729242d0d38ff6ee1702bf0d4e163b5518a8d22abad5542a6b3b733295b5a918eaf9c37ca8f7051a26b1f37bf8002044ae32c17732473dd3bde09c4acb083a79293f8410756b5b638a115c49ac0a9bae0f3bac4dbdc7ddbeae49bf9710a1efc6b562231125702017f6c59328cfdaa4f655b90ba66188e5c3773ca2158d0861c1b5c5e4f656218582a26be379e141bb2be9e610b7b512f9e2150bc92f898700a892b2eb1ca5e019ba7ac4875919c642a085c0c701523ed20c3d10e808b2427188761913214298d62606d5e94a44428e3986f8df4dbc3a3a38b869717c3339136121a5ed626bee971db57014c84de03e13d465c3a820b622f675f0f17e621322886cd39e99b09d12680e92279f7c098c5e48180dd2675775742055bcd74836637cc02161dd8c006b69994987ec9510ec4f98e76b44d91af922d61344533089f82a8f1eba8d7ec2901458b13dab411d485578b6f0bbad7983dad85c74d78bbccfe799714b64f806b4fe7982dd7b7f09bb83194a058489b999d012282b2c28dc09a00d9a138bbc0314f663b5436c88b9116392dd2d6f69c14603da00eeb6a5eabbd41581e5014cdcec671efbc845ed6bb5264e333d05e10ea4a5b13b2e32524c9de3bdadd60661ae42cd4dd07acb12a6f7ca9472d3741b634aba57d514c70aa5d47b66696fa74d2805a2bff8d2eec9e186e77820518bab0cc4048b09c064e16e161e1f52a387c473198a133185d76cf6678616eb186f85c1a4f4f59baab318d799f4ec57c6b6ba8c66848234802785f14dbc24c2e64241dde22ee5edf6c6100d2350b4a81476c0b48c5aeb6e7f636b72d0c83e670730c7a6b96e6b34bd0bb0d495378e64f21102e2c05bb9c8e0535394955106c40d81401cacbaf9c010eb6ab59bbc43b0527c5e28c0b7420ddfc8356d08ab94ff950e064fbad76b83315605aaf47c578dd66b6b84ba5cae6d481e2e020853cce0c3fdb1cfbce97930295ac4daee41402bda299c230a9803d8b644e0bcaf718027884b62828017caec23c2a751f7417d78bb219e5eec4076e02c407c3846c531915c706dcea378b43c948d5ecf07b968ae967f1afd22ff4ffd0b868c5bd52c1192d3eab5ae02fadef9dac24d6546196df6e14b1f814d6fea5826bd91f1613d4f2f0d76beb2a984647a1b16fd21521c9d1b1350300adf4d3325fe6455c807d38553de3c9de7c821473f95885efd92c5309b88bf28d1c08b19bf66ba485d15333555af40bc9ef98c084a8fde251642fe3c4753875fc9998a07a0bd96652c4d270a25d18875b62f3e5e6905b69fb20ae244299636d3fb49eddbb1e6ad61f9267bdce8ec51450ccbae746ec7244ef614f20f54539cc1694ef20ca7b08206b17505da2c85dafad151472c7daed5ed220f4a54bcf22aa40314c6595c10341240603db41242d88c9486e82c3d6f4e84207fcb98edd007203fa6509cee53690cb6fec0dd48a36374b736bb36c166c0ca122c3bfde70b2508709f535e5d864d6d00920ea7105ce3bb381008818b8ef8cc344c0ea2e1c734adc5c106f181216ff14eeed65eb28b5e199f7de70c624c5780cfc64b5fa2c3c33dd5076343ae3524039807b8f4f4a8e3ba97844e32a013a27578a204920cbcd8e62b4b1bba1918a84a20043e537fa5132a9b25e77e908d9fa380ee6d5b53eb69d5d7a30dd82fec8b599cc334435e23adf082e469858e543c6ce1723b06203c84ea0cf76c9c46dcd761e635622cd62616a61f9c07edb092ec0e064c4ed56461c5466444d1a29257508d5116d0d13344b0c954fbb8f7888b6da1009ed897b23964d32cb9611c3067125fd98ba9038e05e271fcf541646ead07c067715499d5b833345e7c10e792df4b8dcf90ec1f137ba0d59676fefb937e5c3f344058be41ef99d6047dbb5dadeeeb10c0f0e8475aca37e747aad3d93592957df65a061ed3aee251c2f1b39450816d469bfa95acdd8c1bd478bbd8dfe860f203bf149dc8a599c884bf11180f25a9c8a77d10819fdb892674030ca26f7b77165ef58a7336194e5441d068df9ce0928fc4e854b565207ff5da390eb38793f8ac38bd9b79ccad61ae265a812a0f5e24b67ebf0ec7f8a0dff1d7d82a9b7ceec96c5bdd6a73680d5ef1058c2fdfc92ed377dc4fd0422c1caf85923ffd45c72be9320f4c69c5ea4d8fbc4986d95756bb5fefc525efac806a7aeba44bdde82a44de34ca8c6636eb8033f28e21332c214e882ce4de463ec8acb40fced097498afe31f0e66e263eb3562fbe107e8409cc66f30b22fd3a0e911e2abb29f28ddea64c2eadaf1930ab9449cd6632f42a6f78f728897d80dab4e45936156147503ee4fb1dda73aa77f95a70c7a0f5ad73d1d8514168a6a7516eeea54f4f22cd891714f2f8a3d0656ab4b9a664044ad76593e3514ce888ae7e665b74e145ca24c1d863afddc2514cbca0b746f8684334c036d000c93441d8254a4c4a30ffd8870c9eafddbd56a60d304726ad3d2abd1d082ae621c35dc5ad6fd2bcc22be8297dadf91c91cb3b049391ad30c97b0d5a7ae6be3633265063b48cf232edb53a1bf3ff9bb884824d854699c94d898c3e93b27b29e665fee3aa7dd4917652262eb3d2ead6c53dd2ad572b9ac8826ea14eea6df4b43d82e2b5a720a7793363bc654e626fe57b8078600e0b0ddd9bf70c4fada9e5a5764116b89749d166666d3125ab6f1ea3bdae1cf01b19d35e1246cedd4d6c136a7a2634aab745a3cae02f186920f0fe708288d72f7016133208a8a32212cbf63250b559c195cc133abc1985f3ac21718e1adb5786e03f7b3fcccfd362bdd501b1f892b451a414eb4ff0de2c7a5bba1d14e0bf707b73c4e99064b6d2c1c25b8e2338dd8a06c8b995181587714c7479cf36fabbc5ed7dc0f62f419ee471b977237db245fda920933696d8da1e8c43f66ef7382ab517fb1f3a3e9c8ce74443b4e0c4954df3d8e0ca2939521a94a7fd211f3c5049aaba9ecca32f9086b9fbd2308a25d1350f7796fcbe810faa0b5d82c85db24c8cd5edb24463059930a43b563983808a62632a2a9cbcbb25aa551af912e67982d1e78dc89069aca2b48cd6870328c062a226bd61ab41983e3c28d2b3d32203405dc4d6d2a531d806640231103a2c7882653e1dc5552ad0e06553a883a8ede5a14987c63358ce8df06f8e59fcecec5e0470f4f77677bba1f9ced6edceafcc56c133d48245c16a1e1d2d4a6910a435c5e81563beae9191f1433de3b199818b81902e0aa19ef9566bcd20d0ad3c59cfe6c4c790f53dea3291fa829dff3cbfd9bad030bc01271915ae221dd495ca40e71a19a2c131729caf49a5ada5ac5d3982a8942e196eca8c49e6e860145c8a47973d5594c57233a1e1693d5221fae10722408392ee8662df568c57179fa23d9cd6f0e756c5f09dbfc2b95f29ff7e3cfbd3e354633f19ff82bf4474865f017cdfc9b1e0cdbda0757a56cb8f6ac298929ef3a29b12b1701270ff804f1331bb90b4efcdc45f6571d2c38378a568f785ed9c943afde2d24518ee8eb2cf34d2e887cd851c69c4656a952de262a62d8c1f189e3e1f7e8d123cf1848ce41137e4ee52cf338c1639cb8561a077e70d3ba69dfafebcd478dfd9bdf5722fcaf93bd9b1bd770c30968fde5e89faa9c2e9c0754f088fef384d778b4514c65addfc3c346b316b51f1516aeeff3eef997a9effdce2af17d8fe9e87de91802b935b4a531578c9ccf1a292ec8737382dc39217569ef3e654eb39c4ac99a049f6dd8043b26cbcfaccef9eaecfc8fb3b797d7e7bf5c5fc5b9d481215b6a45da425a89e7acc8f653805de52fc5cf77ac03da14413b8d3da5c91c6cc1f08eb6647c570a10bce991b32300eb969db9faba1d6490b254d0b13154ee92ed2d42dc129267fa6ee601960c22b0902d3221357634f060677087739bb0463aff511b0ec7b82e667c43632f0d8d0518531b141016b13d08117573855f724f79b5a4cc59bbc5415451be83197c5020d9ecb472c9a95bda71c68154717f7675e5de7e785f7afabaf4d0cdc78272fb86596ca23ce9434f371328a82378cb3292d067874e96d00a0c53175b70c8d22fda87a4b072b4b904e0c1bb858a8a3828464c90b86d72f853c7bc115001605d8b22e24a58c6b045c774e6654ec759e1c1a7e679ebfb527c5f5a7c1f21dfcc75a0e8da161e0014e300b831f526efcd27c4ac75a3b470702f96060d35b1302efcef8727e368a88885028fb786ede6f3841638c4a5f20ded2aa728e275c0faaa3428507c048ade3b12e322c4cbae4665d1a8dcd9e8b1dba89d446799c6f39c68a221d24e399f17ad8be900145b835f3f73f171b15784dee13b13249416a2291f5801843377a98f73d7fbc6c46e521e377f8962f7f61ed6f159159e6341364ff367f930ef72f64b6743d97455a0bc46f37e8e3074eaca24a381b7a40bf79ce377809442158d66a49fc3a0aad19f9f6f8edf8dcf8328d2bca3e3cc5c456e782225d1d337518153337315216f6cd14ae9dd9dac7bb2164533a73c469e9cd3f946e847c51c4a37f89d49a10da364a32968662e322af4f2a5204b09021c713afbb5deccb657d1290d9a3839fb35d1279ac49db136119831ca5bef68eeb9993fe4fc0faf9e06ed5d04a00a73b8d6f5a9ab3f16aaaf875fe9945ee1eadfeca2a78c441db38adc85eae70f26557828e2a3f9d07be280e22bdf3f94e36c36e96755ff26ab07876acf7ff1e138236ffb04c29319fc5d82c6729ecf4ebb60bb399f59d03a6ec3aafaf0e9e44b9e1ff65564c46fbd46cc956467d17bd8a674adc30f401ee19c90bfe362f275f5394f06fdc5eaed6a340ffc66ccd94d824331a057103f11699d388e22a791144330e963a026da588382719c42a530007a1bc623f555534262bd7888bc7c88f96ce3511ce35cff3025d47f26e11b5def15211234c2532e3adecf3cb4b75399d281c4be08b59aa7c6eb2119e1de9eceb3dc670345e5acd0ab7bd7e53264494455c94eafa59aa74e51852aeed1d945bb62cc3e0fcf7cf7d31baae3a2ed80e6616715db6860ec9aeeb5e371b80747597db35a15d74ce07290c0d5ea8727198239083881abc882a137191777ec850497dbce6af58f930e573c0753bd69f1077dfb1269a689c6fb571c5fe87340addd579560c720e9ee66d4d0ac7f0be5096444d4bb57c7394038c7b03df017103065be46b07bea3d9bcc94c77ad813c59accc3a1b0d33e0fc742837f9809a0e1f0426c62e3b09cc6e4c5b78d491d47f54f7f6d5caa4e04db76ce995b2ad6f9a9085b368cadfd1e2db213b24c6e0b3acb4688b96fcdb5a4637a28756438233db401e5a1a5d6119d5f65edf5b81c86ac4750ee56887b51b7d56bc783c2f95561e17b9c409b81c89cb302663b4e3b58cb6ed3efb64aa53bc39015a1ef4b55859e0913c8b4f4342885202b61d04fd2c58a0942c3fabfc2d7109995fac972916baf7524294fe35fb5dff943550c398dfb505516266e11dd9bcb667159b0c7e1fe2107ff4090304443c2fbc81cad827384bfea00424d7351bcf9fb4df3509837695fe24d04f0503f4ebdff2aaae9704bba134ee483604b1824fd0813c6285441907edd1504a92844ad7a71eb88209e272ac814440d4d4c3611ac252b2d15132a8ebfa6f60ec0c151a1b81457457b2fcbfb6fdfffcd31823965e6ddde4a955899d5ee5960886fb6632b39c6106dd1e5c43b2c2e5e3b5e1376a01d9599c4cfeaf072d2e932bce7ca7f6023bf94fc4bb679471c8fc4c900068630a957604fd18e884c5062c6f4ce134f11b48a7021539667eac63831bccaf81671723df15add0cfb233a21269ef851df4f3ee73398d17be28d2ad1ca59f14c35369965f9ec29f574aeee973816d50b179933d3afb21d82adc2456bef47471493187580e2eb680263ce879af6f27450ce6b5244e08c92225b58a2f8943d180f14d15facc73d9c520aaf00ed3c40ab934c26c35c8e99e5238abbb9936abd940da2b1e55025c4dcf4e44e62df43e00d2210de60ea148160c35f9de0a9dc78eac4f6d12e44dd0d827997910c61446f0f43ad3871cbcc9732a1591025c186778634de19e68b4375abd7362cbb6e981393c7a27d2a7412b0b0dc6e62da358fcbaf1aaf0bb36a8cc5257394fbbc0c6eb032fa0436d5b7df74b4b6cba83a91b3998495396c6268fdb3c2873a53ebbfdd44649b287b8010b25fff5fcd918ceff721cf2d7fbecd69a73e94d396779a653536f2915a31984931b86d884dbc432a241badb0337e582937e35907b62232ecbfdff45229bedc0e1421bbe54263f591faf986274db2b68b0bd598cae297b859fcb4391712d3992dcdd449a61a1e0545261f471590ba91e5ca913db734796ce4f6d524de920d3720a645d5cfd941b461c27eb28f4ac38604a56b275ca878eccaa4974747a73f1c76915cc511dffec7037c601c47df1a07ba2c3c819ea76e9c018201651a9310bbb5d79f3fef8f11ddc602bf0e82d78d8f9e2451a2d2aec8646e94af9d38a9e3944718276db1a6c86cce8cd22964fd90376a17808e562f1cfaad9beca6d1ae07b97fd00c14631820148b7740103f6c3d6ed76ac3d6f7ed2779fd18518c8fbc90b8a30efa386249fc20383a810916d40ab5daf113b6d6ead14c2e26cffb5f886dcfb5d10c5c3c3ada4df7450a9e1232bac000d857952631d75965fa63dfa697910d1d755574607aa103af72ce43ae339d7cf68f916dcf4cce0c5e757ef2a8131c76228bd76dd7f41e676c4fe8478dc2c4ac5152330ec82aa674c9572a0db41ae693785c3732365376301650b41acd2aec7dfde1c120f83fd35a0df9cf2b30c0ebd563222ae96fc760ca41a03585f4da89cd5f645bb0ad534363d5d037dbb119854ff22848ea58290447a21f6d2347ef64f57272c2f54887e5463e7615aa56365434db20d2cf7af64ad742fc5aae4517764f8e8a68d516c8df241ba13abd8800987736e2ed26f141a2868e0064f5a4f800491f80f15359ca42b9643372e581a306a18f72c29214ac561aa7abd5d17686058eebd1e2542375a231587e7b744275f327076990d3fcaab87d088ff35825c8cde3e3c7b6bf37302794651c32481e88d8c6b9d994342f75fa145de432934d8f23da525958d897232f5ad9edff6c93d435ca1715aa4eeabd4c3be25e595723c82c42a16aaca14d5a93d63fdb4d0ea0fde1faecf97238fc95588b900bcc9d18956bbd9c2c677355852fa3a4f52fd87c7611b0952eebb4818edad05c14f7c76d0e97a4d4e902e5901ee1f7713b3838e6abef514735f2036dc0a3e0a01ba936fea66e3bc4efe2f6ef7c5bded7c7e7df3f6281ddf3e14412c378d4f0ea54f51f5c1599ac4cdf5d8e1d9ed863496a5a1ec963b3fb1fd6c141932e6e32fbeb37c36b7b1536775dde341847064dfcebffb6f25bf58376a01e9b6a78b47f185576064d506b42a8bac3a7ac18451c66c62b6206d3be2588df0cfccc39e4f3e8192d3393bc97994e501234afe84f08192bc150629e5b384895fdedde6be9e6f654388350853f8adf662600257d12ac38368c22466c0c91d383e9640a034a5fe764cb51ca965e1b098d207c7b87e4cb51b71ef79a3d90285b5f04b7ed42bffcfb77abeff65995ecaa91bffb0e25df79254eadd819af77b226b6680a861fe754f1c68f0f3033052b53abed3d2b7134922051851b72cb6513f9d59a849ad842e3881308eb1bc8718d01656843d8b2bd511ec927e659b308bc1cca9383c455cfda3bc498974d5f79c5729832fb525d3a19faf52960dc658d7d16c2b938f602858e247d207fee8694cae59f2e24c7492931d385031db35472ada61179baf6d222cd571aff08484d43f8b6a4f14fa99b54d68a64f68e4586a8bfa752cdb654160b5e1d72c482c3a0dd72502e09d278b34870d426275e7344130731985548edd009c0dac797c6d80c2a7f1888195eb66b2e73425671b7e970761dde7395b4cc1e72dcc75209e44aac1d6b1e85e949de3c380e8f83308d3b275dbe2e968aedd58b58532afbea51d429879bea6a9a1eec82dd208d39b2026d7e6041dd83e14a5d86cb9e5059db378adc238e8362c568fa02c65481bb9f161c385a671f4de2fb617f3c4046af885df5687ad2455c5cd2ca9d9e7966a0fb6cd368a53de9b61b3d208c26ac498b5b4fc1e8202b3e7654d27033fdd3493a4cc25112d4d3a061f3fc53e92809875cba2eac1479cf98f0958d22dfb5ef2155a747d0354e843a35b3c6be4aef74bf1670cb476e44c8bc08b2946d39fd769fd35b512583fde56c7107d21b568bb3fe7c412c1d1490747b2b87fd4c5ff7c7faee9898a87d8c560d010ad2a418fd4bb8f2fb2a44a453ab2443413e733522a1e5ed38790d97a71f81e06ae96b643345da887d3d7b3bdab46f392fb114df7a5f98e232ce577e708d7d22153ee2fbfad0ad8bbd239529fa47e9f784eedba9517608ea1967e08e8ea89404080945ef8ee999185b935fbf7b7020e01f94aad094767e45697e69f342854058051349dd8bbc3c3eb8740bceedcc0c0ab58806d98c419b4aed21ed247ad73b41d9e571b3636cc94a17112afdbde3ddad1f23a8dad812d2c5488f4b9070b43613f38c61c8f55d29013a0145012193845bd4607754063b062ed3a06f27fe9da9f06017d46a1908bf01d99f68513760c7e9c3677184ddced3c40d22a7ce5bc478659d8c8907407d4815dd96a3172b3d8e8ae559121e62ce82edaa9c6bdab507a50675c6e3de468aacbd8e417b129a6ce203e8784b693f5fcffa08db7bad6d76a4640e164bd7675f91650e9e2ed721f5d80cbba9a1da54f0110edda8529c6eb7ab71c6410e2edd309a34a33a0b02f579ea0eea181bf9692406eed7d070898aeb6eab877a9c5c8d7d82100046b537c8efb2c9e77179427158d283b3499647ff3a564937fde3bf9dd0be3ffed713baf9fe1f9c4df687a32731cef6019bd06f8c7b2ae78bdc8e9befaa29c63e08d67aa9941251a8bd402838cb4bb9f3d452606bcccf4753c49971a63d4080cd52c15af3ed58b67772b1c8676331de16c03aed41c2a2b3bb17a4dc06d642ea4634e581741449f4e0e30a02dae836666b084d10fd7e68442bbfdf1cfa8d4701fd6d75fba3f6a360ff1004f630d6f68a08ed2e72704522df65ba3af6392a4710e6a5e80e26e099f211182ae23e23724b3104daa2e4b9efd939f102a4ca9ae5ddfccbd41343da805de91a12c2031dc99ee9437104f24b734be12b1bfcb953a44c9e68ce2ffa634d7cde2b8be0ab8de2682bb4fb9eb3189253ed6ba67ffad06a8c4c6b1e826c88d9d67ab8158e5c8bc6ed91473b3f716d3e477e713f676e3ec716fff5e754ccf73c993ff83da6b907bfc7a9f03ffb9e02e95e68c144121338304e875465db8142ab320d9d16824c134ccbb986761b99e97436df23852e521c6859fee5ff3ce64cef1a4e3b7029f64097c07110673cf224ef2fa7d06ba9432613081084fc69fbf6e0c982750ff64f2e81d8d173fea39b1540cb9daa5ea05c6ea5b52a50617e45d9ae4842dfc8d3943a2c6552b4529615f48a20d6eccddae515a1814e125a86db1c51d831a7a264bbdb35b1baf925b61ab6b3af82b6d9563d3567a560105de38e9dd5588cdb6393f0634b1c6db41ef530df4d77f6c63c99eea93ee6c4b6f40fdaf8b24b4dcf4adba4ccad10212f5ec86fd6766c6950fb429c8aa752dcc2d45931c3e227a81378cec56f3256d96f7758e78a371ca5638c68c99732b6a1d6e91cb2d71cbef65a8ae7520ca807efc813faff7674c1164eb0e8d8306fb2464a3bcd9a222579bfc061af9aa0d1204925527844d5d96df86fb556d1cd05d1e786d60203004fa57bc73a06b9c3864fcd803b29448334bf31edf498e77b572a285dc7311898dfcc1f1d96e52a5cb6af2c0412d6193d97f1bf9e5c943a85e0d5845446ea1fc8cced8e6137b94be6143c187a12643b85cd17c81f6e6f39ea77d118a82373bdf31bdc7eed6558ca4ca0cefeeb343e64abb1c3ae789fc5f7c8d4157ac78dc78d7f786224ff9ccc54ce36fa7d2cb2c922fc87484d731eed8f3ffb07b483fbb3dbc91d6c49bcb5f8896054e55e67bbb984eee8d824327502144a7ca86f246b015b1cf64760f42bbfa4f1b1789512dc1a5b3750d14c18bdd14e3acd4de579b255850530082515eea8bb58d0a834a9c556517c689f266e9f6acfff55b73b6a7dabe72cdfd9f3479a7bbf7513de1cdcfcd1aefb8d00d2bb9f215e1d4dbefac696ef4b826dfde7a7377dd086e21cd3eb442ee10cb5251070e4dcc4fc83c9036397c0b6c9488922cfe41d8616fd2727cd6d73ae9664b2e404eaca811194e7b3b717e076f1c59ce71906e6e2adff5bc04f91cd1925f455061f6d4608d0078af24d73907d62d295d655765eadb26b01ded5a922e858a97b6d82adfcd32e603f3a8993e6a9af73b804a1be54113295a00faa5da1258547021d863f6502629e107816463cca538c6ff96a2d3a89b27ff146cbe1a24fd3559de78880916755d6ddd26fd69fb35d711533f8763cbca30b58215309b2149752e995d62869c17ab68d48e34a0799eabe985bd11d511b4a46947f21162e97d564b958e020278aa50aa0ea0fe70f7791b6804382b662f53ef9f7ec0b96a4a23feee548ff913d43419e08e5b1bb63664f917c0cafc1e742457e22ea03f9d994fce79250c16a950858eea8a842d6b84f55c7b4bb4ffeaa93522b38161e7a7839b9ce098221eda72e0a215498e2fb9411d1aece3078e1d819717e7f6c66d8a7856581b6d9e785e91a5c91895d6392207c9a88743edfdaee327e27b5b8fb29140689322f65cfdf8203cd2295e69ea5d1c63512f5405fb9f7f49ef0b4590e147f72b998fcffacbdf97fdbc6d13ffebbfe0a098f2a03e64a969cb4df1630c2ea72a4263e1a3b4f12534c1f10008ff0340f5d24fff7efbc6776810508ca6efbc92b1681c5622feccececccebc076e2f093c35f2b2f3e224737dea2756bcf4b58acafdcbcf15ef7573dbacec36ed8eeb1cbf906947d1800f6777441a5a5a37b4394c89817930bb91f8304b9419ce3203e9c726925ccfd3216bbbef70c09cc6bd762f4dea3b893fcd9022cc3016db10e750122d8ebe6d9e65070f61319dde7999c5156ed100b5180173b2312a5995f937b37b42248ed663c16bd650dc966ba10c450dd97a1196bb2956bb39ea2bedcb8db4c99a58a0bc49447bf66f0313e1023834245a401bcb47710f6a7c4309288e2577075e27944592d11e4d9ca1d9dd4f6e71569c99a5c0c6d7c61030a7358fd9f9c087cb1f2fcf3f62e2bc8e5813dd3a32342f77f62612d23a128a342b69ad0c5d04632eda53716e105dc1fddc12151888ce9cdfe063f8716e39c82fadf52f40fe15c2626d6979f6160f1358a820f78406189f0e6e0122350be2579943715cab79e7919b20324060bd1e527d2924513f89d72547006bcfc5acb08422f3bdc533b5055b2e1c79bf0cc3fc3c0aa9672df98de37a446b133e56dadc125f012d4fc3e3207d656d5b412ac65cf0046bc59e4497a3e902df2ed1a3d25b1d31b0ca1f7668b2749ac5a86550d9d3b4083a618a8aeb998d88559b3ad161fdccf188b1e0e253938e44e7d0b138a4b27693cff171005b4f6b5dbf9b9d0dadb7f7c7ea851531835b29db945013de9bf65b6a2749a3c138f6cf23652107f07959ae073d03288ee86dee5b60b1a269077e40d2fc01323becba4e89aaab13ba6c650e88aed5aa9085fd08492c34c93a23bdf81b1fbb79686652b9ef26e67cba0d546708f7d2406738267107bef3c0f649705c8d84411add82054b8c59d13fc52101fb59d41bcd56ab2c61881dd7d8dabfd7eada7a51381772fe37c6cb3394a71e65ccad760f008c19ac32626b13cf9424385a5badf6f61084e084038b9982b0b9640dabe797d0d546db1a08fdd4964730573af98b57342315ea1b6bdf7a9c075a6df4b4675cb469d308b7cf04684601bed8321f5c5f067a0c2d6afe0d4cea2dc2fcc24e72f3281547eb602f928f8c9ec08634a81c13952686f0b13144d72e1381b5861cb88e7966767176222d92c9b0ee64da256222c6edb61fc534a353bf7c761c21a89c56cde767bcbb1dd6eed27becb01998cb8eb7cef226ccccb080fa4b6fdef52b26078ec0ed213d6756e5338b64ef18c3d552942675c4de24297d7e96d2074951c5910d6fe067a138cf4168255c6c12c6e8a1892bb40197aab792c822ce85e1c7acdb89ac69176730309e7dba2bfbddacd2edd12a1b8a0ae27e26c48d977de4b6741b467f76fd27c504ec69529cee347fd0090dc4660d34614f0aab3173e83b6af7a6b33997b06df8a38dc117d46ef86f96ea8969cec488241898e2ad6fccd14b36bf535ce8459431c2850195f96156845528d30fad20cb0a88da585b5534292a4fbcaa3e537da5091711f92fcc389a5d0c24643475fe454b596a3affbc45f267a733d0b7e5b59559c6ee9d0916b717b849fda245ef79ae08e5d2c68a59c558a2790fbc8d8941db3a9f14a951813d148e25e26e680a6c7a934dd7cd67bcfba246abf7018ae75886c58a03af9c31d3c12ac4efaa760d65d7095de9ecece163d461755175320ca4b08ee20148d6238df2b4d7e910db249e5a1b031d87ee00916fb25d971d1c61bbc2728bd6e5a5616359c2a2b9db000bba5b37839dcfb6b90b267c16a72d35c6568927cba3d8599b6f8b2dbe2dd6614f0d8fa3cdb56d660516db8f40f276db61244c4b174166f0a23a63403e7a724a17240d3db4dcb62ae7cae8d5990082339313584d3a6ad1e7b1f53944c80bcf17a3cd1ced3611c29f6c5cd8e564312f7d646ec805562f029131866905a1b472552eff1c55a81185922fd0660c92d8b44ca3f893ee437d658ab8993d6ffc7ee3369fdfb840a7a16baff9dcbbf15e0c6901872fd40bd54a3472cdbf603bfda156f76e4e44b1fa8976ff17ae7bf3027ae47d6f85abe78d9bd9cd87e6f3facdf39b171e15d3511f049a3a97e7d5878453c471111ab38f09fb9e4fc7b7bd242d9eda6af80a115fc6167a72e69f649fde64663e35e7307747e5b3bc8303e7c8d943c4c5cca24ad8d10f098e0ee73155c12e6fe51a1b71eeaad20c11d0df784fa5a0f7929fcf48b00cc5872a2c6f97158ef8064faef4660110408e5135d9f28af0ace5374b9efcda5bb0ca4d6b291c96751ea3c1b93bf5ce11ef10b4547d0e72c51ece1cae3b8b86ab52bd2db11261a74d0c242dac63d6ac2ae1e8ec9205df1ff3d6e550b68899a2339726332d496e854633986b8d2d43e5e6db49b1d5b0744648f37aeaffc03ff9311724f782671cf5ffa2c538efb43a3b6849c7b4c4dea0feab0aceb754a0c1198854ae9beba6fa43d604f8ee1e0b38bd383f45b15682b39f01a9fc3cedbd97e4a923b4b98b95e9deb37afa5f4dc691d2d7de8b9e1ac77ad9d1384ec6a286533ff32bb4caebff43cbdcbda9d335ae8882fe0f0ef261d4ab6649b8044c95ffd763c57055feb7df7ea3da94f0f264adae58d99dc5a20594c33cb628ddb58d7633b39f2c7518730463ca22cde246a2d1fabd16e260c90db51581d43778355bad60906da603cd53fdac8d7cc1e2364e9a07079c035e9c6e92e24ce4e79faecf614933c24c4ee430cb45acb3d58aeff41be28fea22fe991cec722a7c4f29edcf9c66058ce32d23f78a955e985b08b3f07d95545c520a3ba6ea7c7489146aa3bf883925c2a9f8e6a265c755cbf8938802bc5489d7321eb5c5c1d2fe6265c2a3fdc68efde2204a11e24f75e21bcbd4c2c3f017897da4357abf6e66d889e4a9d0d5ab1662914ed16004732d3a6421c2fb6aa5357d71dddab1b2e280c8534ea08dd210bfcad0efe22e2c03894b479d469e91b86c7da02e250b777c5cd472f0847a90452a90289eba67948969a4aea370e9a0e98ebf79ce29fc25a030d28ac740ea73da110d52d5435a5d999f1cb1594ecd29716d4c4dc344ab56c3b410b8f08ce871fd0c342aa9a57ee29f09d59aae6151fa6f14e47241897fec1dbaba0c0485719e571562d4d7900362ef79aa59749a994f678ebd1759de3f7d31ef9fb2bcbf7f31efef59ded0c120d2fcfae23bd0a298b7f6be22ff9e95ffab8ab74aff8ac2b3dcafbe98f95596f7bb2fe6fd2e2ff7cbad7895b7e2bb2fe5a62fff5d9e9d18ad2f154e8c85c94dc4f44bb957abbcec2f179d97fc445ec924c91a7087be4df9856c614a1e925cfe97b6c6918f80dfaa4d3f6d474de967eaa839fd10af754b3fb70ebc397cfaa79e39cf7cfab7563f5480c8693d3d49cbc10fad6d912e7e68114b75bf09c40b95bdf1cc67f39a50a340c5089326325204ed057d3bedd03f1ff7d3d1cc1869c45a7c35707d5cc8abac6c0bb95d979a3fd25b50fe1ab100b421c8fdcc756ee0cce269263d4a346e962e27df4074feb7ecb19c3d5eadb2728e1cb32117734dd2b44f7c685e837eb851f4358c5cb292f3fc92ae7188ef8062b7546c0aeb2c0537ecb8c9aa446bd81ad6b571d003fb807c47c0280839d07c2c2394b9a3222a61b955ae83a8218de6910afcba19285db2c033f3eb7e3ebe729aa5fba1509b9f37dd6f286b9ca80b0dc71ec475d357702d52850c50fa9a0013667c94f58ee43060fd794b6ab5726f18db713681c54d36d0cbc20b3bd003f6468b749d1fad863a6fcdfaa088696bddbf8407e175d4d039e11a72cd0ef35dfca6cda05b77bf76e852d51ef9dd75a127e1379edffefa221214d12e15f1d2f33b5f5f84f9805450a7fc151bca2f7cc5daa1f5d1a43273f6c3dcd5257c365ce7e7517a3f117b07289776b13449384da7bb8eb2abcf8b2161c4a60eba4dc5f870dc1558055428240e45b16566b8f9e66b45ddd8967da7945fea86268f3eb45fb2d15ead4e0a72ae343bda204df52708522d62841c65e84645c39c6387adbd9dbfd1fe16216b3e93abb2ef3a62020a6a6faee6d9d528bbbacdae16c7c7d131dfa174a639550547ba1d8f68079c87f4fd277dff2f53e07e56d6e5fde4dd249d4605038abcc443f3464d5f146928d4c0f91cdad8f258fb970f6510873869af3bb35da706b58a53b3c6d9d96de87bfe10b92f1a8aaaed384dda7de83d03aaf800cc1612d1a65387dd24b23701929853f2c2c1bd89e9097f524d92a5614f6f5bc66ee2a96d8b4d2a8846877997cd20259e17d5c224b706d1e1a08454f17b7c2a982d59eb9bc07c3c7bd92295761628b9d3f2ee068d35179b897951b6d7948adcab2c9338a5cd326922a4c477569629429916da4ab4e55a5c77107297056647530e4dd7d7d1f3f024d846fb62b5c3342f1242b777cce473435a8a60b2abb23db9fac3cb391ebe7f627d7fd159a9ee17e6c11718173301c26e3603843bb038113d92b4b1e9acec346395a2e25ad8955194012d8c133c48f8b4b463cfdece5736b6236d74b96278fb64dac8f430216a1ec479cab1a234cf660a3b39c2e9e67e4d1dea980d5db211772b9f2f911d2b66bf9deb681350d643041b6cc4715325c200f14db0937bf084773868b5795d7bc1730173b7f2e063a879f865349bf53aa3923e5167faa3059f0e85d86d28917e742d6c07be31316960da46eb5a316153e9317d613d634fccf65b95b976a22d8cf2cc7a1e972d2b0b2afa0dca45c39ffbacd2044fc388e3347c05716b3f39b1e1965b6b4be8026781c9d3c6214915a9b699039b53f8b3a7320895c64d121db69bcb6fd72f7a666154d18ac5a8073ddb6e3a8ba349badbb8b95938b59d364c438bccccb72aa985da26bc3d1d0fcfa907f0cc7259db724d0bb0ad607ae0f9090234fd6f02efdf7a52ebf849ad2d436448a17373c3fdf310a84208362ce5c443a330d4db8995e612654468f63f49b4921cbe744dbd6817c962058f46fcd8b03782a5c2eee7c5185867b10178fd350acb1bb0b048d82533e835c1440be3a0203826ebe0d7e8e8d3e54fef2aeced8ff9e116a9f2d748f138579c4815244b5ed771417ccc5b87bf5008c66655c9621d66217606e34e2f8e06ef7e521227c854761e0d74bcb1762f1d24a7719cce74c1024d75cdb44be740cf6976f44661597d670f726fb63b1acf7765160a66dc526f40f28d8fd706be2c0963e11d27d3de309a3eb89aaf9ec1b89a55a5b4c11feba01145914f6faea58aa311cdfb8c0fe7171c9b7490380972a73181c3bdbdec3ac8e18139d9dce456a14a37b26caacde8015c87548c1d8258848d4133d21b4a5e0c53cae4940452f37e237f9fa1cb2ed27840c284d459fdca327f453e9c6b3970c63a3a94ceec056e443b557b54453ef0e9a25ddd552bc63fabd945bee6d853f9601d13b9cf06f4d8cb71bd024d69f36151d43505493cf0641b15211da12e36a625db09119bc1c76d3ebd6865878944b4314da105f7852fa8c8684d70ceb84938dfbc7ff7e1c3f5d98f978ee506b78d3f3750fce0a3670fa379744f23a4773fba2810714ead64cd33ee5704b08f98a4a5e865c761d5f4f7f2da17e93875eced7c5380a469bf563b2511cfc2033b7e555183b6cd2b16c3f8caa82630847db5c24f2c3f89fcc0288e03acaf560cf0eb65602ab97a5d66c556bda09912cce59b679e96f06516ee45fae26b48505464218c3e454ba77a4d6e2af7f4dc8daa960ad592131bb52b57f459218845d8679525a7783850a025f57a546d6062b15f3667c540a3c2809915e7c7d9e203c70e97dbcd722de038abe414a17ff2a271a65a8ff9c74f7404fbbc9a7c8dc37a29bf4e0ad5b77aff46ed79e55cabe05a6da9b2584dbe23540b268d66c0168f553399664afe219c3551208ffe05f44f2bd79801d924d79eda2bd0afc0c926b2d8a9195c1d5a17a50811a66129a03d48c0c850543ac62cb81dc2ee98f9e0341433c51c2c068639794bb68b6256ac4e04550fb4d167a1d52bde196403301f0bdf88e8bfb2faec96bc1022d384a76be7fdc428033473e46a337695649fa5f882e33b905af261b7bbe1d982be35a95200767411b32ce3d38734b6c3dc527d4863abf14892c6b0c9a7ffb911646603d5cd23ac6cf26a08eb6e07e2dbcc51e2af805d9ddf6df00686cde7358a91528939db4b8a63123a206f912eba8adc0c27835e4a3c4e561b3c9cb6697d004e229b0b743fbb3171462089ad54bfcfec91832d362eb7d1224416b5d00d83a0c70fd898d68f3202b4a5eb19e7a93b5f665ca0765f969b1070c4d38d2953d8d80cd9732ded957e5dcbddf6e0653ca18f3eaf4b333d6be413935de7397d7bb17da9ad722eac72a9d9656c2cb7fce196a1643461f8eca3fecdda0f0e2a6bdfd9567d5eb329784bbd6cda4da9802da9ac390c1d3e4e95135e39b77d7a20f2aed8edc82bdad29228497af31ecc972adbf1cac1d92b9fa9f251e9d36db0bb65b7c254f2c45cd0ee3e3dd8dde8d6949a5273183c2a78b205e562ec56149f3dd19685a12ce5263c77d48ef3c2c1a1fe17dab130cb26af7e51b9a40bac65de55af2cc495e9fd21685bb17e2d2e93ec506ec5c6db7bd9db0bd3f8cd978a2dc0e695b1fb5b3440aa48613c61d353a8ca92adaab24dae46fc17f2d3ecee6ac5ee369ef03665b5590a45a9ad38031bd6f5101bd4c80f71417ba62c09e7cb3dc9b6d160a7286c369daac6a706fe0146bb6caadb0d851354c340608b0ce24c40ecfe2f91db66835d190db6e925329b8ec021ea461f49cca4f7125362863cc3b00df3b95b84f368033de8886ec2a91af2bbaedd297914ad3d40e121eae8ad1d65bd6234d94c5103586070b3ecd4d688134c6b114da2c3236a8b999506f80df6462236d1a81e32e14c4f136fc9c167b77130128fb4308989e9d49ad082fc9f9f676cf024dc33b3d88107a786614cec3ad2fd8e06014e6c24df8cf9e93729d70e5caffa212c1fdb6a089fd180c664a8523d95e9a69fdd74c3be304875fd4b19bb9edf77bb10fabac00eea365ee2cf37f8f36dd31ee7ae29069eb32585c52625a78ec0c79e47b8f9e408db07d485b91d657ae45c4a10d7fd136ffd75835fbd1e0acc7b3b07268f6c33f7b64141ec36856fb767a8d6844063990b6cf9327e7a38d6ffce7008eb8d705bc2f221f63c4be6a595ef17a659e5402efbe9839f486c343f5d0373e63f1cd6f5978795912e84758f6cd65d87a68988750fd2461f00614d9a95dc28f1e7c978f4edc32caadc7f008b40cdc4687016c364308dc225dc567d0786af8e3afff0c1776280e9fcfc13257268393ba09eef58812e1df50fcafdc7cc59abdfc27f96e3074554fc638cd07b9f8e8c2daec467017ccf69a5397133382ba4e3bd01922faa93d1abefe3106722ef9370f940fff9bfb88e415276d4b79eda29a7bd84c9f3b1a74ac9279e7a43fff9fd96ebbc198fe65d8713ac7b7e8b527ec9125ef25b56c209129204298c220c6f71eb8e1e5e5de196819cf9a97d8bf8c25dfbb13a3ca12c76d289240d875c696f043f782ea7984025d10e4f291f529a0889642926709699bc3518d0a6a4d3bff1d425fdc7fdbe88100dddbee33188aa9535272fbf63cf1f6eaaebd5e3a3d337efdf0093df379727cdb5fa5432a8383c791e191497c7f1287dd76ecfd2796e371b852ea3fcc2dad471bc9afb638b61e91bc0e475da83f1784a0fe2b4377048ba7df1176ae04b12ef742e06e98ffe24a920c5ef92f085ebd6fdc6ef0f6f92abee70167dba7cd6ac792b4a7bc6e9cf9aab67cfbce7cf38e9b2b67aa8added456496d75555b756bab616d35abada2d527cf8345fa0bf5961d500eeb37496dff4570be7daafe9884fbee3dcd18fc7e1f79c1657115b01daf64fd05592c28b04b47695bfcd2d86bcc8698971600c0041435663c33132789864d198f43d7acd4f3f15056eaf5e56ebb77ef781aa35a8a3a38d893b2bcf20e2cde820225489c78bf680b1e334083ae9881fe8ade590248b9f6d45b8d8cd26ea90d23fa0c2d05660186fd18227a0ec07f622f780b9889cd43a525b1bae32964b693e36392f1ca235605b6cc0c4564b0c0da654fdeb60c64ac109452e0bbc4c7bce1cca6310d2dfda50c74c13dae7203ce1a1e71c3e3271bfeb7bf9520dfb4934727c73b2bb9b1010a5e1a89e153341b521cab4dd0378ef026ad96ed6e44a36e21d9fa77aa08438b040b084fdf3280a9be36c8a2fedd3ab82accdf54483f9c4230076616848bec3f7105c262a52350465324fcbc8002ab6c35d0b2bf3c3d77f4aac8605baee2cd35620d7061e5ec681e99ddeb8f224e361c73813c95a66f7d733e33823aea9028cb7024bf8e5d3826d1e458b4863d0d1cca2b663f4127c60f0584d4d8c60b3d6d6dbcbbd64e3a02be3494909bdba0933970a310818e4146ee1f1c40a6527de279fbbcca87de13ed1996b0895d921ff222a62802c7dfa396591044d57f4dc27fc4c479fdc6bfd8253eb12b0fe2c8c34787ffcc3c1fce78eecd5dcd5f1eab93f5cdddf3bf7b7578ed79aedf383efc1b1162ba7db10260e7cdddffecf947f55a78f0a7bfefdd1cdebc688afbcf3e0a06b45574f848af1cfdeb4fb5c366edef560addde1ce9fbe6f2a5facb9a5e8bd270471c056f0e57375c0fd174fa430947f497e89fb80dfe108772343b69a951d93ccf60e762f24c5a857b601216b0213749416a2355b2ae8628642a58a8b9df5009c3388b19865165689e48a39ed423df0ac2c02160b7bc6983a472b63262e5e6cadc2d3416b8af0e7bf3907431ecf17167b8d941ab399c4db694b48437fa2aded6557ac54072563f3a2ea8e84a032ef8cfe5ae0165752741c89aaf6a74745fdde8efb6371ac79c5b1acd8ffec3467fe13331f2afd5c6d56adafaca59147de54c596f38b96d9ffd511997b5d4b84fc997e6398b1bd5cd934705a8dfca41db58833026dd498751efff5537f6bfd80dae6d5b47ccc3ffb02bd328e98d2b8e871f69e632b7069d937060b875d46f11542fd5ec1aed3c4073d4407438f3db84cb4e4b70d93a5eb5c7d62a69157eb45da6096f0d10981c339a517433f456cee0a8ac2c06fea0b75be3fb8a8ecaf17bc218e10b01b2e22001b4d3c16b8d13820bb703e0371706571eddb5e9ce050ef9f691f89abedb3dfbda0128f63b9f4b5560d31140662b674355e610999fde744cd67a079e016bd5ed25493a22464e40008194c04c065d107395d2ef5afd188397b3e2ea6681d6ab84bea288a2810b7da73eea2096efa08c5f9cad3a9cf0fe1037ee897585f597d75cad7ed01a499349016204cc851a3272f2211b2e508972a781fb1d7515f1bdc1c477d4ce58723062bea35a293a3433a0829b11822d76d5626175a0f94da26161b5b5ddedd131d27f373a861c160f316cc2494a42367b4231f33d7a1bbdd55677fabb672e52d6b4c9d3f0fe3943be1b9851eba11d484052b23003fa6d1334436eadb81992c0913884f488cb77d8012592afefa961d8d527a4bca50e6d607499200c8b3e923c8eca5e053a7a6a8e2ccd1abb33add8be841e9946ef38dab140fbefd215d656247ab07e0888180bbf92d8608cdc79c64beb0024128c4eea343148e8bb162233b4393c88e4d912548366c88804316ac01e2340d55ddc1e1c0c0e0fd5008489d9e5e278abf27873c427174c46e9c971f1cd1335a8d53c35626045921419a847f5cb5131e470d833e810dbc25254ce097bd2a44fc6adb04acfa8685ebc3125b5a67852aa2243a130013654b909272a7d323a87dae9db31383c0d1f9b2d9e82bc9e841150cfcdf7ccd7a20e72bbb1441335148b3c536ac56a2ba2854c1f96b423eb08e140b941851c1942d0fbf9d023574714f5e271d8d572c3a4d4baec906662530178acd9507c85b7004b79781878719834d226c9dcc1a4185f0393d54e0a6335316bd1cded72a0606eaa38add06a98fda0912d77e5fc5e6739b5694beeadb4b44f94b6fb546cec528e14396a05ed42cc9e0e87d9294ab37678d776599ced88dcaa9254946c7ad3dab267656d492b3f6f69d7654e2295081aa38ee4e5ea3cf5267e6288b66e99b645a2c62a1174602c3f0d14586458f32c500559ccab5766464d3ee1476dcb8b277282adad64523a0566c4786f76bc02b79717648d45c74d0b214558aba0d2a7a6d4f6afb553983a24f0bd30314034803c3e0c3e1f4e6a75181000a17a382a9227ab154ce19ee2acb09b3d66810e188f2e3a3800249d403a768a9864510e41c7513f6c18baaf96c71173a11e5980d6be96e5b7ef877bb4f3ed99f3241ed4760aad0cd01f560cf3b002b2fefe0bd5a91aec823ab55aff6c14aa5a8981581d3a504c61068b069355d29adf37cba493bd518271c43b1921cc721586b554e48ed1d0aa2e714f915b36be8cf39d01fc2160b110392e03873609cc869cd18d975362935452768363a529164ea11fe1ea3dd54b250c7d8e6bf364247a3d5d63ec3d22ba218c04fdea1a0d48350740faca0ec4c50019c5828acd49741f78e89aea0fcd2da75b78e0cdf61b14a2af6d5b47f7eb6a3e1c1878d5d82da626151ba036106cb31b21022918947818b6ecd8bae3f408a799ae9c2a4d1744a8b9587e55de95bef6d3f04dcb7584a60de4e65d42a4896e87720bc07d3e2b1bf18c5a562f0273da820023e38804cb29668ecd966048627ec65bc198467973b90986ba1cde9aadd1f9bba3b265f8e7e363b4fbad017a67317637690de482014911574aae1693dd0ca274d74098ca051ab69b6399eee660a7bb3a34157ea900facb07e3bb2228eeb6c7f162b6db1a2c88e88d270f082db52b21a72ab16cabcf40629c813436a757661fbd39cc96494ee276187579731ded68342fba81db4369a96ecaf7608e97fbaccdf70109a9a947539f954c78291810b82a98b2f9341acde2c12241200b233a665feb2f4434b567151fc95b817d1cb5bf3f278190522b02fc58e63b6a6845bfa125726d45fba3117913d1dfbac41ea37ca3f40e96aaeeb07842d43060d9b55a33dc38fedb25866e1725fbbb4e4deaa8712c9f6eb814acc61861cb04ef0cf0ade6f081c144492c19c298e9c8f05e2ea43e764f511c45f588a7957bdb72bb475c9c07732ace20e3dd549f79a0714000a233d764ea1cf13f583a1fc5ddf1f4438c1521f7fa8b683ab55325a36faa27ce4fad6ff36de9db547e496b19be0554e678b2b909b64dc44488ba3476232e64b5ea1ecda6b1ea53e27884c8168cc9358038bc988f67dc978d198c48c99fd5543d4889a7247e2ed45c5dd93bf382c674610ff64207ff9dc3665e0ff69ca444495e8357365b28afb7d3d94fb909873bf40af3493a6255b777e60e88640e0e0ef6da59b433629440733f87b5da69d0a90ba1753b6ac9215b607172345b884f518967fa4cc2f8a9a1096d3d6183e991f9e6611444e143292eed15bcb632bc3d740b219bc143ed2ce0fc472fd188a443501fda76f90314e38c7881697c1fe4f78885799b1270bb0e0eae703aadda5b0afb8958cf149b8983594f7995d570196da11fb4d231a10d785e15e5d8362f0f31312d1e57cfa7ca386098e6896c759dac21b4f1688c6d7114f4002e8c36cd6403cb57c09f2b58ba6dc7a5822a6d0936d7a3de5c8e95691971c1f66acaf9c6cb6f28c722b54c21d456d628b7347cb15cbf3008b4f6509d96c701ae3bb9a92382662f4673a23f6dcd41ddb1156647d82a3b11c7a46de0a0d2bebd5a111586a2967b37649c593582add404aeeb887cf9e161d81ac3d07b4629442fb3fb2971d328cf85e9cdccabbb47e0a64b91b8996b3291c269990e1af76e9cc58172f0be53080dc5863c333196f69a61b1fdd8fc3c364118d875a4d032a54d62a5f288de899ad4ba0c89d1afcd3cadb0dea259b00ec1cc5074c52244a2736571cb1d2788112f60c04670d1d184988168704eefc5877d2ba021b5932d51e1fd58e2da2d8e9366e66d6a3103951b6e3e335873f8533aa11d0cc08e5fb50fd3242cd0fa2d5baf866b20caa26deeda47a62a9a1efd3ca224606819441650b3b35a6f447ff214c4a79fd5a845719f7e5b0f85875e9d8f98899d54133503a927fabe0897fbbdc4bf8818cc606fa095a489ebf43858649fc8573820099576e441e365337007f4fb4d9366db888406da68279b3edad8261a73c41a0e168d07c42059e8d88061927d22eaf302fe2aee2cace4f12f10ae7eada6958715349b0661e680ff3bf59bfab97f73075baa1b37bba60e2b19327def2106e7464f7b09f7b5ed050fdc39da73d0e3b9f4181fe44cb4af327fcfb12d4b93bac5c07f1a8a993e59075aa3118677ad1ed57b75a1eed54775a75e6b4be6cf7c5afa31a43d259cac563371b1e2eb69f01199a033bb90d8181b101317c042d977f6c28b1cf2f2e0e0a348ef175ef05122807bebc7f06366271bbed697791aea90f018124d1cd096210e773ed6dbfe47c4c7b80fa3c6057e462ebad0f6d47de4de2be7ff7892edb61efe6fb7477b923a2b37f1def3eec2b3c67d5369f84abe5ed09f9046818a0eef32388245c5cbf2753ebbafcbba8c48a2cad11c3b6b4447bd84435a133fe83ac96202fbc3bebaf702ae614933fb7e1d70a57b27eb6c44cfbc8de662445d34f802ca3e6218ef34c3a862cdd7b4a1686d97c31defbffdfe5f3f5dbe79f7bf9717e10e0255a93b699fc52661091df358db43af877c591cf040063cb80bd10374e31058adb4eae4525ad5b06f2cc435cc2c5dbfb77c1feacb60140e8264bc3b0a47059475b11fa63d6a54e80742184a2dc7cdbd901d0918a0d81e1466844e69f9631d9aec77e5f68853d77b6c6fc26cbd0735b86776f13d0804d5f5de5086362e39aa4008076bbe05165608f7e5c7c313dc0f7b4942b2f29e6bb2ae563a1717344e127906b18a4b71db07271c93910762b51abaef8b5fb0117d8578228418224a5fa493b8c811ee9891884c4de17b338860106964304fef68cf390b177ae7b9fb9284b7a9a5b185b10fddf15d31dc4203f1abbdba6389fe8eef18c588d3a41d19627017c6ce5a0971ffdfb5e18a8aaa6e4356ab5f684e551b1e2ad56505dd170712b3b7642071112590939122cab4e8da620e2bcbca9680f59f31630cac9921f0d4e317a5eb22e36731c51f1839b8209fe527bc3be5e32b400603959dfab98589365bc61034bff885b92644cb1d8f0a7a0a63b62f478443435106af4601cedf868d41d316d28c14dca57408d654cf50ef42800ee026369c3da7963461b6a7efeb4ed3cbe2cc1e49dcee1205cc01e5cdfa1e5a718973bec82d4e12792739d2cc52d035f1782d413fb7325462eea117cda9e6f79fe4b9fe6a8b31bfdb9fec2925b2c5cd0a3386c39b7c70e2ec8bfc422c7333b49fed941e728088275ed62e1e562fba4a7703be1e2cd99cfd373dad3cc5114569fe7943fb869b6c276cb6b193b5319633a573a396b4578265c590bf5be6a7d9d4db3e8fff9867f55c673c9dd07c734c947239ddcc4b0be38de5649f935913afa884e3d8686e1e39464b019eba607250d2fd3c4d149c0257bf69edcd448c03dbbd207a678a06281edb9c08c6014cfe7a89629b1dedad453dbb4c45d27827de7bc45cbde6b342ab426af3f745317f8bbe5c8bb42c371c3d370242348360807b62e339a5331d2f2699c8c058f774418406b719732d7f9fb36f820e8951482fb2db56ea0ddbb76a69256f47515091f6ecbf5000c3b74fed61edfd94c54fc3917014340ad94166536d9d9699358eb6bc296f3da287622fce3ed87712cfd588481bce125a24e32761662912ec0c8f7aa3de7c4304022b300206d5102713f2250b41fcefe191faccd10152e50ce99917f4a19dde3b0e06f6d1371f86734442841b1a65a4118c9b091ee1a12ab929d7668053c0f14e740a8208095bde4780ce627591c66f91d3f69f47fdd1f86e94bdaa6bda7854e85e1c3a75629758862396a9ee0423ddfe808dd879f98d70a35347e236e098488c7c2e829ab25657c981fd321b0fb38fb87c1e6f6dcad52dbf632b82b244aee5f1cce02a07bd59269959d04e499711d1e4c8c79228aa3dea75f7defa78f7d9c7231903c310190beb8383bbaae1f0fc47fe747775c98fd8dde996afb436c686bc717fd1dab0ba5d380a2b1a2172bd9eecc7d9c00cec95930649955da28c0d6266fd041da175e01e7ca66211e6c9d5abc1f14aa192cc2084675adb1b6b3b50b4a2d25e65013fe3422d1ca7a55daa5a25b64989f7ef0d99f4688783c17d650732649b383364dd18e2a834b832136dc3bf6e56f9d27124aa156d0544f112769098abdb604e7c9d656d13dc86a78c75aae1cdcfc351fd5dcbbdf5fc5bf55a5dabc7e01afa8d29ccacf0fc525d813b9c411f707770f0833bf718a3736a3e60a3493c34c9b48faf32dcc547e23caf89c30ce78dc7a69af2ee76476dbff614528c8587298104369488425e87e72682e7e3abd75cd0b21f3ea205235c9dd3ebec8bcb18bf7d2b4491c1ce0eae1bc491f5d75cff6da38f285d13ae1b271f810b17d6043616fa8a3d7c8dc3b217ccea985a5333edefead26eff33ff40df7e07dc324483e70eaa24dcb9e3f846d41ec90b24c639ddc92b6a1a4e57abc40b2ec32127d0c5997be9d52f619cd937f08a899f5535aaa397fea31a44ad74e05f2a3365fc8426c38c5afe901914ceeb113e7766e4828270bec36fd245f6eade74edf9d4908aecf5cafcc4577834154457719e85b90dae5f9d07d7f82c491837ae9b818c6270af9fbf0aafebee3c5c1af6f042245fd7d3c6e05c1303db489dfd23fe5dabdbb031272154c6e316871f9a319b1be100837f1bde53a56a4e5ff6987ee4e53d461736d98a15e92c21beed251f8e048fba53af69fe9809abe7da34ec63c6d207be6d3cd64ea0d9bccca5132211babe702a5707073b97a244d68fcc0390935ec2197bd4b8cb2339afe8259ce0a94bb07966b0395b4e172e37e87d9293bd3c238683b708a9e2a17e153ef8ee55b83023ee71a55c9f1e93bc44ab18697fd6ee5b3d23cd07bcd21f4a6750346350643e53f2a28813bdac5feab858579e6f7d12f994579421bcd2abbd560b6ef5f87ff71878542f75dacb5e31fb0e6beab2e9f5dd75e0dd4b4e8ce046665698b34e9796f75ceb8413cfa8102f53a3cb9e43a00004837078b1dbe7e0467dd85f41cbdef896effed224a9badff8731347309447c739523b9ff52b75bce1d3b89d72c2ff476fdfd10b7f6dd671fbd7a6c701c9d47dd8686443daced6dbbad90c1ec0d0b90f1e1165f5b061aba123d5674f588398492fed6d9b54ba6d93527146fe1593b12e6d14433581fa9f360ba6f418f13ee8e20407bfa119fb60f26a114c80b0c0f130ee1b13605e9cd062cc81025ecd052c80ca71bb0c1690ad5e7bc6032aac2bfc43000fae0434bb2b2a4b2efe96d6e8edab388f01c7d4366edc369550db3d64bfa5aa642fd18fbb4d43513f732e12a20c1e274ee5b842120c1c2044f7c33c2abb23a0d17d211026b5aa295c271b37a2c61dab458c3add0fa5628d26bd2e364e597d5559d64e69d7ef8b4b4727639dbaf96959d70342f510b3742976ba43444a1d8648e2b93ca381355ecbf469600ba0854705d36975475ff4d4dd404930dc0a09c05b1eb358880cf7398909ba9a96a2e65be84174a45c1ae6d7e16d76dc40e4b52b470a3cd2b734169aeb59de850f9431fd4c5dd383366131ca1daa0728ef6762d4f1b469e1b105f807abe9ba704a43cf9fd507e6b22f176aa20fc7af9e368f93d3c86526b2b16f4a2e534110dda992449fb6553416b48f6e6a18576d200a7e9449b1c77e7a1d28fb0a5685e67166f06c2b3a8da1693fb4ec62705aa8adde64e5153d0bfab9fbeed65c01ed71835cdcad279bc2c889e70fc238e8d47323c992e6a1d411448416b3ee41414c85ec37c86564667f7d3bc10c59906cf7192e1599e66e62fcd1afd30d3c83822e2570cfa2f0d3d11fff5ca4d307dafe4fc3b348cd29119856da30ee521f3ba99dde8c27ce07936cdfdb4a87cbc872905626c027bfa1af55c111449e5809384b6ab95a7f0e0190ff3f9154de0df021e47f49141c159d0679f1347c17bc8d0c390e4f8382460c4efbcbd6783ca7818926fe6f2d05b33abf1d299a7308063d171cba99bf8832dddfa9a2b57f19c55dff73dea94f2d050b253877215e6f0b518cff0194f049a40060ced73fb78891a022b04e4e23d59bfd9c85737ba4bb0b7d7d46d71a27fe822e5feb06fb3fd2cd3b41ecf9358f5d326d21e4876edbfb986e4e0177e4ffa06ed329e345fe94a070fa42fe3f223518dfa5532839fd7bb5200645aebfa7191b0d06ad28eecffc25db7150d1c76bb5bf4fb3e4723af55fab9dfdfd7836f13fb668be7c8cc29f63f713119de9c3f2235b17fe280626c6b9821640215d91c474a49166a66e6e8f324dbcb564a42c79f6a6da16f135ca4b5916c25ffa67c95a942b59259972b017d36aef4d71664ddcc432f27fa1311921e8ee8f82ee4e2421c2350cc1fd5f89d18ba7bd0931f2a966f9fcef01fffe4044ed3a55b26df857a912ab59bf6bae60e8eaff61ee8cc9afdf438a840fed6797306ef587d9edbb24f10772378efafe882ff3c534c63de004fcdf1225074ffe3dd2aedbfe847fc556c9ff2c37bdb93fc3d5dbf1084d4178517f8e84f76c304243e62f70ab4ff66e718d1335ff8eafb8ab0f7cc91a75ff9116beadc2f74ff38726f4f31992f4beebbfc64daed5f6cf71cf3a433fc6252cfdfd947bc99c9c9fa4469f99f86f626e9a7d278ad04eba2e7cc9bcdfd3e293b7adc25d5c9819cb8255a31f27ca1c85f91fe95abb5ffa295db351dd6b89e8ebb791907f131208f69371cc0134fd3fe8a6ecdde8f7295143d69ec6cade76fd49a2ef8954fb9fe98663aa0ef4c519ad4410a011dd1bfc267fce371d7f41bf02d07f4f5753a25f428b4fe9eeb3ff407f67315166f9bda0f9db418517b8176f52ff355d17b4fd7e07290205e27f4fd777346968365c41fa6ed246e2bea50d6c8798248f63a41578ec0fb1fb4ff51be35178aebca8ccb878c11e7dddc5209a1e31fd807ecd24688aea6679b512a94b15385ea6257df68a57de2e072a90130580647df777e841688bdd757efef8faf0af4ed018756e6e7c36f426fa616cbee9123bf9a1757f6fdd1c994b759427732ace6897496f46a3f4e08f88f5dbddeb0d11911510fc6bae0be422cbd2a20fd50fd6af5e7073bf7b46e3f5ff030000ffff010000ffff56757336ef870100") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["angular.min.js"] = bs - bs, _ = hex.DecodeString("1f8b080000096e8800ffec3d7f73dbb692fffb53a0bab4a41c997292bedebb384e2f71d2f7fcf2cb13dbbd9b71dd194a8424d614a912641c9de3ef7ebb00480204405171927b6fe63cad2d018bc562b158ec2e16c8784c8eb2d53a8fe78b82f84743f270ffc18fe41fe1553621cfb37c4ec2340288b4c8e349596439233ea394140b4a8edebd3d7b7ffcfcfcecddfb53328b133a0c7600ddb324211c1d23396534ff40a3809c334ab219348b196159994f2999661125f0759e7da0794a2332594367e4cdf1d91e2bd609455c493ca529c3eec2824ca17642c92c2b81a438e534bc3e3e7af9f6f425ef3ed8d919effec192382dc824cfaea1efc7a4c84b3a82bed2224e4b5a7d5f2525c3ffc577b23b8696f3249b8409b9f798ccc284015098cecb24cce57704daf14af8c08017d3c23bd8d9f910e684add3290c2b9d93c3aa45b0cca232a1be57d779237271393ce00dca3c998480e69078c01f8ea7860b80d0593cf7672514c4594afc7b8ba2589de4d98738a2f990dcec10f8d10a8388cec2322958f091e5b3bfd310cade864bdec17fef1d9dbeff65ef2cbba22974b4a1ed51965dc5b46aabb5bc1db6c92cf22c4968ee7ba755e95191273050857636cd56c048de65453bb26095d30f2fc202bbd93fa84be7b478f70a8a704a9a52e451981782c17c2680123e108e1d494929ef9001c0cded41ab12d869962fd7c72f708c9e569a824422928b4b0b92e31407aa9127eb57795664d32c395ac0fc831cd7642a3034cf71ed18b8612da52fb1cea40684882626e9395d65969162715e00534357dd09303da6d756f2cad53c07b9394e67996caef185d2e859c3625e853f5ebef41e13ef058569570ba33897e5c487cf43b51665082b91996a799195d305569caf22900c5975db26e378ea2022a74bd023563accaa8a8828bb4e932c8cac8484aca079ccae6a52f81f504aa7b0fed339035d34cb724a2659963092c0da819202dae8f35b141c18669e97dfc411e07e1d03f21410c17a01999be69223e444ca121110e45914c10260940160b15e8102f30afab1f06e470ab637e1c7539a46af262ba6e07b5716f30c97cd7b5c69afe3650c0afe55fc7ccc860db2b45c4e68aea37b0f08c2f43885a17c08935305a5a82155156c051b51c9e569c7262bb7407812e621a89de43dfdb304c5a08e17b84060cca02dd2880fbb01e94008adc4ba6d710fb1fd029b0a11b582891dec5327379b86c9b3343d8145a760e4c5e4450c82011bde9ac8ea0eda2a442fd37092d0c88dab4183c2a823f91bdfd6ac5844553f34a7a8849f8b5d55155a2c264db9b3fdf9497a6252204a085676367e6f367d9666e97a99950c6c8b1027882b39b1d75a105dea2a6d5ec6a7f6a529579ccaa6f3e34dcb71546d53c2a0d089d73986d89e9560bb8045320df94679aef16e23c29390b1eb2c8fba912a5012f1aa29e9a4f6ecb5ba4ad172fbfbd9d9099878b04b41472dfe76217b7672fc8aaed5493b3926a244a20857f1157c6f4d526d428049705a4ea7a0f869e40f15ad1fcf88ff1d3718d4526582e3342efce1815ee57bff96d2027870c5f75c6f889b6c98f8de028c21af056d9a23cd8e5491d018275b92d134ec260261d9a22c70a7ea86b4d9493ad1b726737f0941c5999c750f2ba74599a72e76d827c4c5f59b4938bd8af26c057200fd81e4825c80344cb2308fa4d57deb9894ae01d656cf0cc6b140e0da225569e356690008fdca22bf4fbc315bc3425f028d0ce58e31c51407bb246c0f4e17d0039b08088c4006b657481e0aa3d0b75327915713a4b66b3ebf9bfc01db67003c63be6a1e0e0358ab2fc3e942411e476df43863b80cc12f534dce8b38ba248787608f829f456731b8665ebb29fe8025f496c2b64166b4982ed07fe3f6900167e733efea67a4f6d083029aa23b78fefef8285baeb214f41812dc77165a1c5786d162ba8d89fc3ba1e8e299583b881fc3d81990f4a50781d382f581c44f9e1ae3aaaa5c28be31dbb766bf6b1aeaf2cd13665d0ff6312b1e62ef758d9e679aa1b3847e2a7886d7fe70a44114e8e8f908b357fbb34332260ff6f7f775c83892db5af5a3b8bfd05e1f186eb2300718df70b19cef7d5c4216217b779d82cfb0a279b1e653e798a22a0062590a464901c6a91d0b76cae52f4ec15a06f2df84c52258861ffdfd11f92bd915bce410c7e9f37541d959568085b96771d60d28645e113924a2c69b95c5a6aec109e8d3b706e6ecfc96803d355d109fba586b3065bfef102c80b70e29c71f6bc0a3bda96c5a0c2210d17b1db4c317f6ee5af102542fe0181425d3365f2c6e5b1ab6fd07e136ee40c21001f334bd4ad136526d01ad0713354c14f89ab0c6bec32e9c984f8b6cb5829ead9879e4af106bd8434d6ae986d737ad2b70fef762ff3228b273e8203f82a981adffbea8807999b022f71f0c0ff471c8e6876480810230cd06e4d327d2941e47091db4c722aaef4335f1070d9518ff38a1f914f43db84e7262ee93c1f7c38175b49225ca802c337e94807ff1f5273c4e67d95798ed08bdfcfc8b4db636635e0c73e3ec592e44cf6554376898987827a6551e2f4370e36d982cec6bcda12e145f7d22619f748dd8c25e119ce7fa9ae3dfef87559bc2d5b480510104ec165639c18525ba18db00141a0eda7ce5bbd12cc9c09e876eec6a11c3cb16b588c54733cdd3426a51cd039c65f3920d82b7f0f7f8c5a52e74086833f4b13c402b2fa1bc5b6422b0c2b6a9d5aa75458a8cdb3f5e4f6bb9569d4250898f8ba5dd33ec42df0fdb183bb48ec7e3537cf8b536b6701623c3ff1a7ccdaeb6e5a77465b761da12ac3de6e696a9acff69d965eac75e3c3395e1469eb975238e15637fdf98639230ce34197aecd2ed3f77ccb7c2f2ffb321b49440e73ee51ecaaf74e33420313aa55cd094c33f07991242bad736fabe267b9218f6de5fdd7d6f9867d86e23ecd8e08e3e5c1cc1127d1a7ed6a91e7d0286a4a06a440ae9adba4d1b561281f540f3377088126f90d0745e2cc0e4220f1c23aeed838e814a6c602b3b85411e566f940669adc8da9e26ca60e0b250ea7986ee1d8d55908e31ea125359ffe0d3fe6437223083e2ad6de0ed294e8524b49af9ad0953f8d297297e295c2ede68d8c9a24dfce9c39cde9ca1515c28673a76ce8cc760aa5d5112128c47a38d026dd77575c5ade5eaddaaf2b0aba40e04f4b594804002a94e771b41509f5d61b8c856fd0cb6b7159836e42958b5364c78b8d3490600a80df1c840f2a16fac9d9fdcd8d9cac20fb07bc8348a8aa986b44d7151917f9cbe7b1b307e3c1ecf5a542a1462836c55f073fc05cf57618fc98d875946a000f7ce4026f901fc6a95c8d3acf11f2c4bbddbdb767463953123d6077dc1d880a011efc416e930a21caeb821e01af364816d42a2f6b4111eb053cb5a868925c46f9989de02ceca1c7e654b2a7293a62237459fb33a5fe5bb4ab8e89f659830bb948f4ce11e924f9f8ce18b9f6e9420b1235dc25b7a49d2d6662f66ab2de8f40a614a7eec9b57c7be6411624a064d0995eb2dcb491433fed9b043bbd6e90f3f589771bd4e9f58dc4f659aec8db899bb6fb561793cf72e04a1e2d89a9cbd076dcbd8c9e92ac1895cc74942300d071dc309ad250884501e19b6186d4e7b200e98793446130059e11e889966a59fccda07f10c94c81a68be26752a4e82c913c97ac7d2872ef10eadabc8ff410712b7da3624de494120f20ea4edafd99c26d46991070c5466e17b2354fce14a51561f154bee63002a7a09a600d734362a1aa5af1d3dee746f32033c971eb862c25c3e9c7a4b3bbed62756c70010677191a06d33785f170ddcd0cfb3684d64d85428c39829dd05036d509683f96dcfa91d5b93c4ec997bbc35c150d5e8a7d7319e415cd3c90a755ebd1e616da6fce859d19dbe7db9b4d695c8c29468c0ec4392bd962c742c5f7395b69119feba8e1b64e72c5ed2ac2cfcc6a63097fe35b834d975802b164102a597ea63ab9b11d7b30eb1eeccd41454f2dfbae8cae448772281533ecf79cbcf10cfb26af8cda4530ed26ae89816bc73adf61fa282244e613bc16c6e54d3d2f75606de2353a26f4a8dcbb29219369fa59decfc5492767ad89fb62c9f6d27f6b6a762b18c1f5d276be4a0e5495768cb3c07435db6b817d08fb0fb44fe0d2cbeaa91410a7601ec7bf911b6aa0e252fc14e693213c7ebad208e16c331c7db1016d4a97ab02d92c3dacfae8b833fb238859d9258143202bf044ab23cb8079aea24e7446bce334e59c5b62fe065c566e446633cf416477f2a196b6c915d7b765c61b401996d166f547e616af43a0d9740ff6d8f996c2951eb54da61be3da3239ad0826e64b6d1a3a14a54abbdc592cd4973363ef48bc6594329d5fa508c6a752988da1e9a8243b6e950b6529e9c82a6834850d152ceec8903bc8e673db450b72a7a0cf60e036e0fda9c00d3e0b538df9d5253c5dc8e30f01065291d91f860674ba1aae39396511950b5566c071181b74938a5fe988c81160fbaab4bf6aa92227b9d5d57c907953f60f4502b059b06bdabbf814c3235834880e2d93124264ff42521e2ca5071ffbeed744985bd882fd5d8bfcea20ef7bd6adc8cf8c00095949ba60ffe4c721a5ef5387512695c80c9b174c48857255bf8e6aeea502101cbf2c2af0e7cc29c7eee4aefbb2c3230dbf20a97cb76528f569caaadb766c3ad7fa34557c5bb3b976b0cf64a5bbb7d86e4a52d3682f01c18a299f63c885207ef1622cb88c324e99e874a4129b3decc5e7bf14bc1334e0f14302546cfec56251aed189ae8291a22c9cc940dd709020dd0856cd263ebbb741ba5639ad0307f59e5b4755a49ea053d8dce0b9d6a79e2b5471e5c72b2363a08bcdd9853e2b0e366790c6675b236a79515b94a6ab32d6f2fbc4df0be53841937a2e177bd954c6b653a6a1fc861dd70d871ae03781c41a255d647602a383de9dde9dae0d5a0ed5c1bd9420bde395d1ba50d884bc2f354aa39bb31ed67155cda3e46b2be61fc6ceaeaa2d22f97e68d9596d16a4125cf9cd19a6f62cd7680004f67b8121bb0188ff38d9c431ba91c12afd3293d75840eccb6af285d418bfbddb4e1edc0250bae00d8267d9bb077d77ffa44fef2b96e2d0a684f3f07bbfd027e0e388186d86f94f71b4da61e83f47ebefbf7ed878cc64ae798c575f255b6c144d7c8314c7489c02a2e06546d665d5c9a75fa02566c02730dd71a5e245ea0f365c562338aeddda595b638147dd9ed106510c220b8115ae6b124a4e35a4663e6738fdb4e6f2bc7b986b1e80bd30810b09a4631c7e055a7c902a737322184d60018b335af47758218309951a710f58289b095c3af73a8cd0dcb487b3478a56b385b2e5cab9d0dbde94408afbc6a2324517e73391228f70c9779cc05ddb5356fef702fc07d61adf55c498861d782d5e15a66ce3d16d357daa63ce2d14cdfdaa6a98c329964e52bb929c3a1230c2bd0719fcc6238f34a1e851c8c88e3d84ccc62b726efa5b6be4cb84a0a95262d965d534b7dfb46e2420b71db58e3d3541715b4596ba83c4ca36c291e73f01fed8fc8a3878ed86c1a17aedc177be6883cc3d8f6964d75e1cf76cd66438f5b5e5bad9866bf9aaa40c8875278f28ae9786f204a26e36c4954fd668b9328d7e9f786f37119b8d202ffcec08b81eb6de3e7dae06d91171b70f57c0bfe7d13ae7cf7ea7022e0b9e07ebb5a35edf5d1ab691f8ed495f1981c7764d4a434c64801092b3c29e6d6d069828982e60608d8ae29b90ed302f3444276c50ff74a0618e0fb52e4df4d17593ca501795e16080de69857f0363674986e52ce11cd9244652e0e0d418985099e2497ab11611962812f889abf6344ae81682b3220a6c0c8017f908a92599c83cbf92106c607e4bf163495cf4d092c31c3fb9a8cda09c3d7b16a7c00bac41761a0798acf54e56401bf1809e7d908a9939cb0e1e14f95e0b1e78e518bfb1b27f157a410d745362d97404f20286c82bbfecf8fe1bfdf3f05bb07bfb1dd61d308befd7608bffc8bdf0f2e7787c1eebde1a7dfe1f718f69d7b0f06966b8f7cbb681038ef3eeaa4e0216fd3e8106f9c35d767f182d9c132fcb80742c6ab1eedef3efc71f7d14fedb428fc71a6f757c4dd5758f244ed658f089cbb3c0fc08e007f70db2ceff618414dec2613707ba5b95dd6a1fdb8b723e3b0071d420d6c4b82f60cd5d6bb5857124247a7faeb555b3fb360c5a2066e5c2e36d786e7ef37fad86e752c92025101bc0ef339ea47541da85012fc0e6a89567eb6e06c951eb1d93ee295ba8c6b46a16168726d7eb7d1a839855f8a303ce87e4b45b28ef34262b513f364a8d7194ca325b9473c4482109f136c7049ed608c38c5930a03fb930a9cda2d655a10da6505b5066b0ffa395f72d3d8c91f6f6cb954b317c2d63f243feeffc74f07adba3807273ecbd18e7ef0d3a3bffed872e439c6e097249c33f203e017b8ee37ed86431e79b05438eeb68ad7dc0c9fd7ec4ca2d4f0bb91f6c3d81027906e2256bc21b7c141afefb7a1a66f872bdbc76cb0ecf338eabe956b3d6818c8c74a2a0c9f27a84e6d5fdba21b042f9c64a53bac8f2b9343f4ca6f51df540283af7a3cced7891289809809c8379eba63c544f7c31199547428b761427e2f455c186feec360685c024cac00ed3b4712cd13093eb4cdbeaa3165916cf65436932cd851b08a1820c76b9c66b7f08a760d66d1f469dd14b8a3f086874c1cbc098366d163d7d645d0dd7b83e0a98ac0a4011da3a4c2cbefab293b726289e568c761cb8bbc0a5d4932a4b054d7cacc0e790862a9f69828d1a456dacb52ed2c11d1a225a6b20cd55127c2235458aa5391e854c0fe1b2ff1a20448f288a4a5464c14cfe382e1336ad32a648a53822f261a97e125fafd8a16fe47202087ea3d75fe31c9e6e24338e15d0ff12194bae6c17e15d9c29e89fee80ad008c6b6c0ac0f4d90a9f1588db5243405d9c2563b82ec89a08dfff9f4893c92bb0dbf265416c2b11f0c46981e7a5a9d1c5e2ff071465fd457a7af4f087c10ebac61886855112f28c194974c92c32909183e35ec3f543499ecfafea1c4204160e4820b71eacb0ad1fb88e0c880251a4d756c505b0b12444bc2e11c6b9ed895c7e05e1a428b507f58b79a6f894d79e42b5d95c588f0072f2c42c1aba1d75fe28f34f26b91d35a353ab7f5e66f45d0244e43fe56645f7ada7a911772c1ad75a76b23dd27ce67310496a7a0e51ffe4876d53fc62108871c1f5a400f6cbd7673e9e1103d598ffc2dde86b43e34dd819837fd88e9a4e20eddbfb277afbe8d91e3abdd953c601b6f939c2d29beb3fd4f2467fce110e54f0737dba07791b36d28eb43d25dc4ac172d9d44dca1f7abaf20646066f257783f47c634e2add7931d9d86c975b8666fc58bbfdf42bead2feda8e4f762d309b0f80b936b2356bd75cfaf298539370f249f79c2e9f8e2b7f16fbf5d8edb075c02166c08fea1360b0ec923076794d15bb9330882608cde9240284c0015f9dec3a13cc31b0f366f9db0d1e3b1dfbf26179d6f396c62224773a171edc1e5265e61665c7ab795697bdd92833621f3ef653eb48b9a883b29f107ea7b198f788994962eba5432c43f15f19878474ae281ec5cfe5b14757101a6299b266564d470bfb69d9e206f5f02ee43f951e9e256414b97d05d818f2d3f11c2834eece1009f991e9074bec7e30387033dae77217106e0d60c9e3e19f3964faba7f0bbd854a6f19f253fb15698d4c5a33f4b688c2fa0cfdf2025ca289238bd7adce0e06c18119a2c47242c8a1c1ca26991276da1c4b2e01e481ba3390bca942de29972cb10ff0d845fc3c49ef1c2df5beb73465efd88a32e508f6512e10116b7a181db5660411970f657848a8b758b5b3c0fe7c068aa04a6d473f77a20971dc4612819c1451c999130c96918ad3f8b3c1e4e75d3b79906bcd8c8117e51ee182552c66afee86d6e8dc4d44e71e6138ab19238fa7f79de3c633abbba05da4e014f4846ddcfa3daf5e8bec0a5963663642f017f66c81fff7e11eefdcfc3bd7fbfbcf9cbc3db7b63e753ba7719f9c6d1f742ee5a881cfbb75e203c5ebbf57ef8d23377a8f33c811a8e2f5814cbe48b6f9905decb862efeb39505c8f8a38c968a1836454bf134c9980d0f3fb36b95df56ff7a0c72f07f010000ffff010000ffff327824516d6b0000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffec3d6173dbb692dffd2b505d5a52b64c3949aff32e8ed34b9df49d5fd32413c7bd9b71dd194a8424d614a902641c4de2ff7ebb00480104405171927b6fe634efc512b0582c168bc56277818ec7e4b458ad593a5f94243c1d920747f7bf27ff88af8b09f9a9607312e70940e4254b275559304e424e292917949cbe7af9f6cdd94f176f5fbd3927b334a3c3680fd03dcd3222d071c228a7ec1d4d2272c1292966d02ce58417159b52322d124ae0e7bc7847594e1332594367e4d7b3b787bc5c67147165e994e61cbb8b4b3285da0925b3a20292d25cd0f0e2ecf4f9cbf3e7a2fb686f6fbcff27cfd2bc241356dc40df8f48c92a3a82bef232cd2b5aff5e6515c7ffcbdf647f0c2de75931893372ef1199c51907a0389f5759ccd46f04da0b2af8c28117d33238dedb7b1733c2d7f9148695cfc949dd225a164995d13068ea8211b90c56319fc6d98ad1e9a28c4a16e73c8b4b1a5c0d8f05a28a659318d09f9000f826f037ed2318c02c9d87b30a0ad22227e1bd4559ae5eb3e25d9a503622f71a7c75d9907cd823f03100a384cee22a2b79f49eb3d97fd118ca5ec64bd1e9ff1c9e9ebff9f9f06d714d73e87c4bdbd3a2b84e69ddd668299b5a0445c0bbf3322ed3e9cf3059fc45819d879248fc006366e9fb4724c8808d87c1a8a9e0d54c56447ff2220f44f9edf0d8d70de2a18cd1e4054e473c877900b2001edb982c2d5991654044705e979e962c83c9d2f8cca7c50a8441b042e773cd5f9c3ae8f2dd332803561c1d37a5735abefa058a50c436a538b7312ba5c008c9aa39267a42b2722a3ae700f0e1f6b855096260972fd767cf701e02a334871586482eaf1c48ce721cb4419eaa5fb1a22ca64576ba0006c2ba6cc8d46080c1a80b2cdca01bf2e7586753038b826636e98cae0ac748b19895c0d4d857f71a989ed21b2779d56ace40bccef259a19a1b7ca13479ba61712368015b062066cf68a6491f14262953e52484ef43bd16e5092b91997a795954d305565cac125ce5b2eab64dc6d9d44304a34bd08b4e3aecaa9a88a4b8c93358574e42625e5296f2eb8614f1a7917490d6f36a3a059a68120e3582d21909bf11b2ac976ae348f3b40cd57a6caac2e0df725ade14ec5a884330c4f98fb33058c0220d5ad0f64ad930ab2661b36e762463d3b09b0884e58baa44267643ba96b049b483b93fc7a0f56ccefa87c56859b1dcc70ef784f8b8fe61124faf1356ac400eb8d0c1a0e4aee97a52c42c511bdcad6752ba06d82cc8198c6381c08de2d46913ca33028461bdc91d9060ccd720914ba091a3dc71aeed6eb064e2f6e04c013d768980c40864607b8de4a1d457a19b3a85bc9e20bddde6fbabc99fa09523e0190f75cd358c66057b1e4f171af23469a3c7192bd72b0a2690ae0d2fd3e48a9c9c80aa049306763fb082827653fc8025f49282954466b49c2ed054a2d02bb5e0dc7c165dfd88d49e04504073b4bc2ede9c9d16cb5591d3bc4482fbce428be3da305a4c773151fc2614ad291b6b07f163183b07923ef720705ab03e52f8c9136b5c75950fc55766fbceecf74d4353be7dc29cebc13d66cd78e9bdaed128ca0bdcc7d18402a3e5261c8e0c88126d9010610e1b536b48c6e4fed1d1910999266aa7af3f9a6506edcd81c112c2b58a47091fcbc5de27246411f357373918992bcacab5983acf14d5670dc752b04a4ab6f660c14e85fca5f9648516c2af71b98896f1fbf06844fe46f6252f05c459fed3baa4fc6d51c2f1e5d061475a50c8bc32f1484483b7a8ca6d5dbfaaca3e7d1b60dece6fe18407ea8d84d4c75a8b29477d87e000bcf548397e9cb6787b53d9b618a48ddc7b1db42d6b77772d5316d50b1eaa2a6e6cbe58dcb6345cfb0fc26ddd81a42102966c7e9da36da4db02460f366a98a87771066bec1becc28bf9bc2c562be8d989591cb24bb98603d4a48e6e44fda6750d2efe5e1e5d456571011db053981ad8fa0f6405cccb04cef2e1fde1b1390ed5fc840cd0aa07d36c403e7e249bd2b324a383f65864f501549370b0a1124df3d7944d41dfe351544ecc01197c3b1c3847ab58a20dc831e3a759ccbfc284a7707cfa02b39de0b1927db6c936662c48616ebc3dab8518f88cea0d1a2e27de8b69c5d265ccd64e4c0ef6b5e6d0148a2f3e91b04ffa46ec60aff483097d2df01ff5c36a4ce16a5ac2a80002760ba79ce0c2925d8c5d001a0dc76dbe8add68961560cf43376eb5889e0f875ac4e2d39971d2426a51cd039c63f3520da297f0f7ecd995297408e832f4b13c422b2fa3a25b6422b0c2b5a935aa7545ca42d83f414f6bb9519d525049888ba5dd33ec42df0edb183bb44ef02ce56af88d367670169d16ff1a7c2dae77e5a73acaeec2b425587bdccf2d5b59ffd3b2cbd68fbd78662bc3ad3cf3eb461cebd324615f99638a30c134ec1ed8d0a5db7fec986f8de5ff6743682981ce7dca3f94dfe8d66940624c4a85a0697e690f990a421daf5df47d49f66429ecbdbff9fbde32cfb0dd26d8b1c51d73b83882259e69841b5ef7ca0386aca4ba470ae9adbbcd37ac2412ebb171dec0212abc5146f379b900938bdcf78cb8b10f3a06aab081adec150615ebd92a0dca5a51b53d4d94c1c067a134f30cdd7b1aeb201d633425a6b6fee14cfb83db88c060e54bd7c0db539c4b4968350b5b13a6f1a52f53c24a1eb944a361278bb6f1a70f737a73862669794e4bf45a732f67c66330d5ae298909faa3d14681b6eba6bae6d672f56a559fb0ebf829028646b42a5240faa1bb8d20ba78f33c8f2799085985aeeaa7b0bdadc0b4214fc0aa7561fafbc559371900a037c49081e2435f5f3bc6383c87791ebf83dd4345f86aa65ad236c54545fe71feea658491e87c9ece5a546a14628362558a10d342847bf923f221c0803e28c0c3b720932236b45a65e934c6fec622c87a7bdbf66eac0a6ef9faa02f181b1034129db83c1d9697c3e737045c6311c7dac525ea8e680a879d5ed6324c1c2e7ec74cf416705e31f8a7585299063095615373ce9a50ea37b570d1bfaa38e36e291fd9c23d241f3f5ac3979f6e9420b12353c25b7a49d1d6662f26862ce8f41a612a8ec7541976c5212e624e2694e684aaf5563092a45c7cb7ecd0ae75fadd77ce65dcacd3c78ee3a7364dee46c2cc3d72dab0c29f7b17825071ec4ccee1fdb665ece5741d7b27376996118c10e3c170421b0902215421c316a3ed698f2e387dfbe25c78630c015015fe81d819006664d63d88a7a044d640f30da97522c98a699c65eb3d471fa6c47bb4ae26ffc71d48fc6adb92782f05d18b94834e54b6bf6173da50e7258b38a8cc320c46a8f8e395a6acde6b96dcfb0854f4124c01a1695c546c94be117adcebde640618971ef87cc2423ebc7acb085f9b136b620088b76999a16d3378d3140dfcd03f15c99a28b7a9548629d7ba8b06c6a01c81f95de3d49ead49610eec3dde99fba26bf4f39b1463103774b2429dd7ac47589bb9083d6bba33742f97d6ba9209420a0d987d4872d092858ee56bafd23632ebbc6ee206d9799b2e695195e1c6a6b097fe0d1c698a9b08572c82445a2ff5d7563723a1673d62dd994424a914ff9aa2abf276fc89045ef9bc102d3f413cabbae157934e3548a7a1635bf0deb5da7f881a923487ed041327514dabb3b736f01e99127d536a7c9695cab0f924ede4e6a796b4d3c3fe7465f9ec3ab1b73d158b63fc7874727a0e5a27e91a6dc51818eaaac5bd88be87dd27093fc0e2ab1b59a46017c0bee7ef61abea50f20aec9c6633195e6f39710c1f8e3dde0d61b5bf8c72d816c94973ce6e8aa33f8b34879d92381432023f074a0a16dd034df59a09a28dc3334e59cdb6cf70ca4a6dcf8dc178e82d4dfed232d6f8a2b809dcb8e2640b32d72c7ed0f985597beb3c5e02fdb73d66b2a5449d53e986f9fa8c4e68464bba95d9568f962ad1adf6164bb627cdb9f8d0cf1be774a5d4eb4333aaf5a5206b7b680a01d9a643db4a45720a9a0e3241c5483973270e883a91f5d042ddaae831d83b0cb83d687b026c83d771f8ee949adae7768a8e87a4c8e988a4c77b3b0a55e39f748cca826ab462db8908bccde2290dc7640cb404d05d5372589794c58be2a64e3ea8cf03560f8d527069d0bb9e379049b666900950223b86a4e4b1b924a45f192a0e0e5cd1251df632bdd27dff268b3a8eef75e3cd888f2d5045b96dfae067c2687cdd23ea24d3b8009367e9c811af2abe08ed5dd5a342225eb032ac033e31a39fbad2fb2e8b02cc3656e3f2d94e7a68c5abda7a6b36dcfab75a74b5bfbb73b9a660afb4b5db27485ede622308cfb1259a79cf40943e78bf1039461c6759f73cd40a4a9bf5cdecb517bf123c2b7aa081693e7aeeb62ad16847d7444fd1904966b66cf8220834c223e4263db6b9e6b1553aa6198dd9f33aa7add34ad2ef8e18745e9a54ab88d721b97f25c8da7a4010edc682128f1d37632998d5d9da9e565e329dd4cdb6bcbbf06e9cf79d22cc85110dff365bc9b451a6a376400eeb86c38eb80ee0f1388956451f81a9e1cca477efd1e60d54ef76b4512d0ce79df768a3b50171c9449e4a3d671f6cfb590757b68f95ac6f193fdbbabaacf5cb957d63a565b43a50a998335af31b5fb31b20c2e88c5062039e6238dfca3974912a20f1869dd65387ebc06efb0ba52b6871d04ddbeb98c54b1e5d03b04bfab661efaefff891fcfba71e6b51407b9e73b0dbcf70ce8143a025f65be5fd8321538f407a3ffdf8f7f5878cc64ae798e54dc755b1c54437c8b14c7485c0292e165463665d5ed975e602d66c027b0d371a5e265ee0e1cb89c56514bbbbcb6b6d7122fb72db21da20a441f0416a99478a908e6b191b335f9cb8ddf4b6729c1b1887beb08d00096b68147b0c411d4d963883910d21b506c0d8ad453daa13c480c98c2685a8176c84ad1c7e93436d6e3846daa3c12fa68673e5c2b5dab9d0db8708792aafdb484954bf7c0709947b8ecb3c1582eedb9a773f702fe0f8c25bebb99610cbae05abc3b7ccbc7b2ca6afb44d79c46398be8d4d531b652ac92ad4725386438f1b56a213673287e12c2a85177230229eb0999cc56e4dde4b6d7d1e7795122a435a1cbba691faf695c485964f5f9ffd42d7069fa6a6a8a0cdda40b1384f8ae5b9c856091f1e8dc8c3071edf6c9e96bedc1777e6888a61ec7acba6bef0e7ba66b3a5c71dafadd64c735f4dd520d41d7e91bc621fbcb710a592717624aa794ec04b942ffabd253eae1c5786e3dfeb78b170bddc9c735df02ecf8b0bb87e5900fffe1aaf42ffeaf02210b9e061bb5a37edcdd1eb691f9ed495f1989c7564d4e434454f01896b3c39e6d6d069868982f60608d86e28b989f312f344627e2d827b15070cf07b29f3efa68b229dd288fc5495080de658508a362e74986e52cd11cd9224159341435062718691e46a3522bc402cf003518b6740c80d10ed4406c494e839106fbf50324b191c39dfa5c0f888fcf782e6ea65178925e5785f93533761f8104d830f409705130fc3e4f8220c230bf88793785e8c903ac509179ebf2aca45847bcfaac5fd4d90f81b5288eba298564ba02792146e9cbbe18f8fe07f7f7c8cf68f7fe7fbc34d23f8f5fb09fc135efe717cb53f8cf6ef0d3ffe01ff8e61dfb9777fe0b8f628b68b0d02efdd4793140cf26e1a9de08db3cdf559bc6076bc8cdf1f829089aa8747fb0fbedf7ff8433b2d0a3fdef4fe9ab8038d258ff55e0e89c4b92ff200dc08f083db6675b7c7081a62b79980bb2bcdddb20edde1de8e8cc31e744835b02b09c60b293bef625d49081d9d9a0fabecfccc82138beeb8f11db18536bc78b3f58ced57c732291015c08b98cd513fa2ea408592e16f504bb43e674bced6e911dbed235169cab861145a86a6d0e6771b8d9e53f8b908c340f74b2a9375bc1712eb9d58244389479c1cc93df2211284f81467834f6a0763c4299f5418b89f5410d4ee28d392d02e2ba83558b7d3cffbc890c14ef14e5aeb48357b266dfd13f2fdd17ffc70dcaa4b191ce20b8676f4fd1f1efeedfbd6415e608c7ecee23927df017e89eb60d36e38149e074785e76eab7c68c83af3da9d2994067e3fd27e1837c449a4db8895cf1b6d39a037f7db50d3b7dd95ed301b2c7b9626ddb7729d8186817aaca4c6f06982ead5f68d2dba45f0e24951f9ddfab8320544affc16fd4d2530f8cef292b277d0c6244a26021ed54fac351d6b267a188fc8a4a643bb0d138b7b29f2c2f8e63e0cbac615c0c409d0be73a4d03c56e043d7eceb1a5315a9664f5433c5823d0dabf4010abc5634bb8557b6db60964d9f344d813b1a6f84cbc4c39b38da2c7aecdab908ba7bdf2078a223b069c0835156e315f7d5b41d3973f8728c70d8f292d5ae2b45861296fa5a99dda170412cf51e33cd9bd44a7b59ea9d65d25bb4c45496a13eea4c9e0835969a54642615b0ffa64bbc2801923c2279651093a4f3b4e42304aa5da63825006a5f8657e88f6a5ac41f89809ce8f7d4c5d7ac98cb2ff144743dc487509a9afb47b5670b7b26e6a32b402318db12b3393449a6c163ddd792d11c640b5bed49b2279236f1e7e347f250ed36e29a5055ca83fd6030c2f4d0f33a7278b300154d42595f475f1f13f822d7d98621b2554dbca404535e0a458ea024e2f8aa67f840d364aaeb8313854181c0c82517d23c5415b2f711c191014b0c9a1adfa0b116148891842338b679095285c1833c8616b1f9fe633ddf0a9bf6c857beaaca11110f5e3884425443af3fa7ef6912362267b4dae8dcd6d39435419334c77bd5fde969eb45512804b7d19dbe8df488789fc590589e80967ff03dd9d7ff58411001393e71801ebb7aede6d283219e6403f2f77417d2fad07407627eed474c271577e8fe1777f7fadb180c1fc8ade501db04dbe46c49f149db7f2239130f87687f3ab8d906bd8b9ced42591f92ee2266bd68e924e20ebd5f7f0121033393959f286306f1ceebc99e4ee3ec265ef397d57242d957916fe74b3b3af9bdd8f41a58fc99c97511abdfba17d7946226cc03c56791703abefc7dfcfbef57e376804bc2820d21be3466c10979e8e18c367a27770651148df1b424114a1340477ef860a86278e3c1f6ad13367a0cfbfd6b72d1fb96c336260a349706d7ee5f6de31566c6e5775b99aed72d05e8c665feadca87f6519388434afa8e8641213c5e32a5a58b2e9d0cf92afb23129c6a8907aa73f5ec7b532c1ef19e665562d588736d3b3d41ddbe04dc27eaabd6c5ad86962e57f83438003e96c28387d8934149df970392cf0f857fe06460faf52e15ce088e3583278fc7a2e593fa95e62e365579fa572522d61a93ba78f457058d81ba7cfe2b52a28d224bf3eb471b1c820d2342b3e588c465c9e040342d59d6164a2c8bee81b471ca7854e57c91ceb45b86f83cf76f71e6ce7811efadf58991d71f19ea02f558650906b0840d0ddc76024bca80b3bf21545aae5bdc127938c75653cd31a5c7dd9b815c751087ae6404977e644ee28cd138597f1279c29deaa76f3b0d78b15120fcacdcb14a948c35fc31dbdc5a89a99de22c26147d2569a2cbb3f0b5fdbf50bba7cde459b754bb297087877281f2c73439090e362376b82b41f1ae7c83ab3982303234d405d96b84be85d16ba877e563d389b3c615b2fcc22b46387077de209f07f69675c132a811f8a245b9cc3efb1e5ae2456de8e23f5b69815cbcd2e8a848619774144fb382bbf088205eabfcb6fe2f1d2007ff170000ffff010000ffff641fc803e9660000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["app.js"] = bs @@ -63,7 +73,7 @@ func init() { bs, _ = ioutil.ReadAll(gr) Assets["favicon.png"] = bs - bs, _ = hex.DecodeString("1f8b080000096e8800ffec3dfb5b1b3992bfe7af50bc7309ecd1362499ec1e01df11c8cc328f241f243bb737dfdc7d72b76c2b74b73a921af032ecdf7e55a57ebbdb360692eccefc90e06ebdaa4aa57a49a5de7b78f4e6f0dddfdebe62531b85c3077b0f3defc160c00e5532d37232b56ce370933dd9de79c6bee3676ac45e2a3d613c0ea0466cb51ca55669c3368c10cc4e053b7cf3faddc9f1cbf7efde9c9cb2b10cc5661fbb3b084346dd19a68511fa5c047df6de08a6c6d04c1a6654aa7dc17c1508068f13752e742c02369ac160ecc7e3779eb1b350605fa1f4456c70386e990fa523c1c62a0590644c30fc707cf8eaf5e92b1abeffc0f3002b448e853c9eecf744dc63f1c4e349b2df33b3d887e1e309bdf21123158642eff74ef39243abc31ef3436ecc7e0f2b858a9ff5b04bc183e103c6f6226139f3a75c1b61f77ba91d7b7fee9505536b134f7c4ce5f97eefbfbdf707dea18a126ee52814d02d8c28626875fc6a5f0413516917f348ecf7cea5b84894b695aa1732b0d3fd409c03193c7ad802c4a5953cf48ccf43b1bfd3df9eeb2810c6d732b152c595bee6aaf1d44e959eab11caf80c262e048a41b1f553cba48f3d4db518eff7c6fc1c1ffb091072f8001b586943312c88c87e65575738cfaf617e5fc3481b9bd7d77b0357ab18c0753652ca1aab7932f08d19144ffd48c67d78d3cbe0406e305321ac83909e999d2580841597161b5309632315ccd815fd642ce1410000792365ad8a76d99fb693cb1759d91890f6c63c92e16c97f5fe22c27361a5cfd96b918ade162b5e6cb1030dd4de6286c7c6036e9663d7c5f503fa9386ff3efdba1831e27a2263cfaa6497edf4bf1651ad6e1f81f522152b93705800576db0fc28e2506db11f55cc7df80b2bcf2860c82dd63b8465238506102f00c2a29bc6101c980db93bc075130c2db1aed543649df952a45777e91826a4bbb4e83958d8736b69d173505061a47420b4a35dace2065ea19aa8069977d9f68bfa4c57de5037ded7e58427ca485c11bbc853b026cf9b034863bd5879a31484822d86a2d7c4701e329c03add110100bd3282eda04d2242187b99431f0baf046a1f2cf723880b5dd4a067eccf9a3601c129bc03a65c188fb67138d120f47511ac09f8c369e3c7dbec59e3cdbc6ff76365fd429a8792053b3cb9e5690cfe9b3935cb267e5fb9c904fe0f593fcf575132f60b3b81f70101c0d3e0fc518a0dd2e19bd86dece76f99a389f877282f447245f2ca7554ee05c10cfd317e7823d94114a4d1edb9695003aa2687631955678b466b0e905089a9a34b8108efacfb6b75b7b0ae6048bc3ff0988956550047d13f130f46a54ec04286bfc5f910824671b11bfcc68faa7e77f4a2e378b0eb275055a360131012c3d746faaabafa8ccd8e08fc0fba06b2de3ac90b50c349945b12dfa93fe6e5197fd1188a241ca8c40b1b2640a9436b0a81820a12e184ed5480b7e66500f870a9a6b9168056d4260c181010d090afd42da69b547c74fa6cffe38285e3788a0814cf9ac5c17ecb837a025089a78e054f1833dc290f40f5831ec9d4a60a968860600be8bf979a1c7f93996b83f285ef29f8118f33404750b7680a07a72c249693a5db217c8a213d4911c90d659196a215815f531bc910663a937dc93d1242f41b9d56346fba8c63c7cf2769efc99b42773dabdf7f409e856e23df77b30648532dd23b6c93b9bca0004a87709daae3ebe532ca91530faaf402c281ab66a61ea6e98d5c83149c30a1e39752a3f69c11688930647134a82024f9309881b711c8f553f161715fa5045b018ad8a3355ed1e0afb6a64e37c00fc09ffca1971d68133d4c0043c2b06dad804f256319f84b3648a06092b7e79fe549c6bf89b26bd1cd5472232c98bf7ae13e4e3abab2ae8a01084b14820076405d74128eb986703075a2581ba88eb08f30cf43ff49af580f32613b4035104640fd55e5e05d23e8a4700e5dea8e03a5845167118c13f5e1ba89cb3628048c4690d1a827758c054252708b01391a895c8390d82061d0f82806173d0a84acf10b43a99960d8d3cb9d2d080fe857024680c8f5d740e5c90469ecb0079f206e081c8b5a74e249ad5b84d4d1af0e5cd6f4818b93a5d3e6a749e9ac34e41321f1fdd0b55cc34b5c8642b41a7c6e339d05cf31b5204149be5daaec82a63a83e6d0c7ce27ab8179af0914a57830d7496b69e88123b6bb232f6d106ddde200ddba55059b23700b0c9231a8020758aaf4367b9faa829bf91da585079175b4cc5e18c81937711333966b1f085315ccf5eb08c6aec82eb184d834cab66dd67a2ff21f43f9693e318955521eea0e35245d68009bd2800dd57d523957220890819fdef65c3d6256bb32e1235a05a7bd3a7f51272357bc31c8bd742042200cbe1e9b0a05877b7685734a568327c37c57805e29b6ab211d8941b361202ac637e8eb10b7093630596950fae056893a05f2a7116a548f20c1c34a2b24a14c100b559efbabf3748eaacb0146874a71aba7705ed8b2ad74455cdcb12f07e327d7f3febb0a95fe7f82484b5329697bd96b9aabfa83d561eb29f731c2f26690876203068839f6b9c9bf7870d4b15476e20db40e3116dfecdb287562e7fbe88c93d74e7921e930112361b410ab398ddb3a57175854d0eb160037ff58f8fc0aea3b98247c1adeb13ad72fcfb03808db3d649eec652aad5839a1d2bab518dec9e9a590374087962726b27013b06034c7fa8e19b9b4af81210fb4ac681b80464e6bb6f58dbcb8c14e6a8d43f925af8347dbf328a65bde5767a7dbdacfb720db08ac1edfa3cb5dca655d2d74de92ab3f2396aa204aacf4493c5b3c9c959a34a95fa44e4046605a5e7465b45b2352b36fdc9f6b9703e6db5096b0478b267703065823e494b2fd88ff3e1dacab054771561e174b924b2bc6998551634da49d0c98211829a7395f94019671d1f514833e8047ed00dfded11734eb6a712113710fc864a6e8359b1666e85606e234460a5863f6724fba52fe3731eca2e7e5819ffcc3ef08c9c3409f04a6bb52efeedc07ece89f655044e5dd3fd41bb620afeadfc3b990bb798ed1669f6b9509d846ad47468be85773cac799a7731b113eaf61b190a038a8187177c665ea7d148e8eb6b262d0cbdc53a1abd9c596a349231c725f2f2f3116caaa226bd7e50fe3d902bc45e6f482d6af30511cb0f551a78e881868a37a3196fc074576332d7d7a258777dde210763f0481c45876cbbee66ab0b74578a255984c2e6e7a5ec64e569c1262db33267a9545020ca2ec3627f1fd0186ee7e36eb3975d6651d1ef676305dc5f6830c08fdc80f774db85d359bf4145a2df0958dc6fc0fdee0dff26cc3262353a78d8e8e1b5fa72a99d82aa12fe9968aeb9e349acb4606f858ea431a0c5ccfdd3dc8d89439af5c95eebe44ba63c6dc1783c9cb31edcd6cc4fd24ed7d40fd4b3a1f03192646db3014aba1c0028a27dac16b76ace63a2d7edfe5bbbfbc23b622089961188c4b6dd070c0a9708af100501d3dc9761d338855e3aa46d2750018f2742f75a85077bf488adaa59f08c8d968168d12ccb1771d2a635b30ed9e1144134ad88b52f8f36b7778d604f35548391f34a908666ffcea2343174be5a78a6d8c0aac463b0f5e1788221999ff30db98dcd5fbe9ca08c432f8fc6e0938770ae12d7aedaa0606ec4f95e63863389865bc6414a7896444080c0bf0741e683207391d8831fd97b2bc3db798f66062653d4873f5f86816fb939330d4c0fdfbebf3b4cfd2405a5efc38a6998dbf0188317ad79b8bb737dfd6f5fa88f7394bd6627dc8a35290183c4c247529a9f1f5b6579f818a324a304792012c0e6fef5353e6d74d43d8ec9f978878f55b6d9fcdc446b5570ef937b21984aedea1403d7f4ee4996db12196703c80771acc052176fbe670ff7590af26b2ce34e91b53271f128dd54e9668c2e1f8d9de2d9e0f5a2754b8df67c5f17cf5b514393fab8bfd95b847d6ff8864ea1adea19cc0dd2b0d61e760c321eaf32cae794a6cdc8f95f8536ebcbd073d7fa4b7614d6f50ac89acbcd9ddb3a06b7369757da4124686907b134d3ba2c5665a742238ee64bda466cb1586fbb7fd83c69d4d247ab7dbbee6622f69085dfabc6f23d6d263649f4fb6662ad7095b0a18c9b61c3832000e4d60b5c3906c01e6ad3ffafb8d1d4c1e9bf09333943b88f12d4ed292eb5fd9a4d7ecb46739316abd8cecd36f762427f61f615e20c3ddc7a7dfd6e68dd455cb2fce9629383fa91337c45c7144cfbb94a8165eee0563f14f1c44e5d2cf7cb3b60f95a59e98b5b1dacac9a9d80389a9c15fc719a2961e1ea0adef6dfc948c00a065b50ecf6feb21b45bbe0cf5d5fefe6690d60a18db5147110ce9cc98a8d88d4b422eeff5065c5d86b3f5f59656a3ae9e81861b553d54dfbe3cdf79ff638658da78bc3c545ca0dbe7e499996ab65e2e4474eb34700520459aa66d5547e30cfe873a9385d092cf59c958ae8c9aa905197c91bccdddd1d008ac657a936a25fe40bf7636107bde1699a6086171bb06f944ea3f943db2b0d61608c89b4d374d407a36be0f3309a0e8aa1065ac08419dc6df8815252d8897bb1e6680b10f2a1ff89d2b341a0fc148dbf2cf5e9a8fa783f484a635244f165da9623710723c064b914f3c3962c91c5e7e76933097c41a5cf9c24c21d36301c7276764fe453b95ab4827bcc90858bb1201701c2250b22ed12d0888894eeb41a23d1b9df3b2c2c16a70b723e2f64547978dc0858ed786a7c24189aad5b0c8042b79c92e7394bb402c51c51b21d9b01deec38b698506f596917f5b36e4fc0709a41af8fa6220c65966e9889c6bd012157d2213bb44d27d83b88a08b2a39caf9f9ef1c533c6996d77987afd0fdcca925e3b12a51af567d09dae2fa9abd25ee6753150639c85dd0e639269db0e6392c39a498a6524052840733b08bde30853f14569460965353e600406d9a9c7e1774c7479d70c9e023304cc8f504c69d6160a3461e5809cae4250ef22cfd278795363f8f41605a3996be4b4f781405dc4c5f548316e5e6e3661125a90ad60ba02fc3ff50693552d5e911773f50ec5e5d45337702b6d41298f2981f1382c24225ba362ead9741250fd66c348a3998662e2bf2a31ee4fdf506ada423f4d0049c5b8c797823b70f8b515db5310f440b9e54e80592872a636c2f9cb4da54ae30bb1fa1c3ae7275d0566a263f4e9f2145f048d77eef2182082cf3ea120c1b5a2db5e699415526b64d9f7576b5524f68e8b674d5d4f97378cc19697b63a5a32c43167ff6b2cb2390ab5ed19c2c080b62837c239d0c1f7a7bf518d68d47c2f531a6fce61df56372d9fa5f65276ff178434b6920b59dcd47f9f6423e0203178674c0010f0eddc23802e98f65732d649c60d64e16ab9fa36b8928f2731e46abf036a1975d24d25830bdcaf514843b9dd380e5906a8c61226099878a775c7c4c259ec921ac3d1c4406a0b208bcd6485cee297470c282854c1ef61c0cb5a55c192bc97b04d19bb835dc16f3ab9e926a99303799bffeda3699e0f421ec00176658c56ebe50d991d860a4e5daae7de911830f5996f3d863d97256ae98c2d6d45d9f9d22de86aeb14191883fa15345d7a38090d89074a22bd8ec778672bb57f1f0a729487f771b00a8624ce5c241b7d8991009c21a4918962eafd913d1906ebf896955c2934b0b03cca03dcc7e0d7423294d59f5bb43c21def974c062dbb7ec1720b96587d4a601230bd0da01d853c3eeb866ba5f189255e13a32f0781580160cd41099430946b172a75e6164d9f1d5b4cf149c38008cabe7e42b7f4701fb90823c7303f3e86a169def0b82fe87428737c11d34ebed972369499639891a04619cb74e0de7030bb03f2f3c271a12ce391c824196af1c5b22c0901f4292581ecf7fea2a27c8f35135fd8559bf05a495a7177d6a75d2ab54a8a53975a1a1b0bda11699ec9e37c11fb616adcfca0b9d34c7bbc2b027217a64787e320ff79032a0633209bf4892ce04b61102c6893e37808da593e48ea72d075e95dc07a6af50de9fe8a6427c6f439780f092c030bcba7e5c288522bc864179ddbfc2857013efa1a0b1b66e4c91b82e44e84269b81a7e0c98331ea337241810b67ee06309177bfc28cef0db0af1b18302d419b95f2608be863e5303e3f1759467e7df22be2eaab22a5e9e6f19b53e8bf2d82b312bc454089764601363c479d1161a52cdd489d37f3470ed1d1580451bbdd81123cd78ca7221cf796404e1eb2cb34c664da2ac9611580abb5f23508a05dd3e6a9af23eaa2ed228f85f1ad5aa02b4ffe5dee7560ad7f05afa39afb7027be47578777e781e041e6a51e48355ade56de16356fabb78a275302d4c79f0d4fa6a5b4c393a1b12b0acc55c7fb0c6ad9abad1a8cda667e4d4125544a759d96c5f84c43b0cd4d6f9e88dce1f42cd16327eea879c5c34963f931c53301b0b6a07ac2d1068bf77b83fffd997b7f3ff0fe67dbfb0feffffabf5ced6c3d7f76fdd5a053f1119eabb92754b5990cd29889c24569292b5d9453cc21079ab8400bc8b0b18bc4b122ad7dd6673f66463dbe37300568d7bb2b9c9cb14367573acde755807526b42325c91fb29275953b0ad7c2d5ba83e1aa1e43172bb701b2aadfb03a2419d3dc1490c2d972570154a771e3f9b3d25b20932704eb64b3dd61d8cabd0572107096f1df1e06e486c0ba7b03fa55eb2f0e670bf09e3382dccbf65dd5db8924bcff60915072e537104bd8a02698f0c54d44137550174eff181c95e2291740aede9a22a8c8692f25d127902b8e985d92c59596b2059fd17aae8b933c2840f9b468d103c842f7d94f12240a30b3af05d9f672cca42d1d638102bccf7011580954adf8c28e51ff51b0a98bada478cc8a9b7c71e09daf28db5ce5e20c3cf585b1227abdf65276a82f152b15669c5bcf09526b75d1b2fa125be508c05a16c6f3d50d8c560caa3d6246e5485d76f164e7eaa352b702dda2297aea5838658e69f52e1c972edb3ef682a5df2ed1ba969b4b62c3485da2c1a3f391cbc75a45c8ca986ec622bcc84fc595501f8866bc85a959210fbcb9981b05912eb2e563309da35874c6e6fe69a6abe7fdd305887cf19359cb5c65f309b89f60423136900dc746d2baf9cde2afec0243a918d2437d8bd2279bc8eceef0987d73f08eaef976d2a8257ab000aa9bcc4e6323c1a0e1878062ca2c85b0bac247cd816a33523d5cbde464751d923b997c035e31ae211a90cec8e507e47a73897beda79aef92174e091a77fb1902846b90b28addfdf015418f01d91b4c74fbcb7f11696c24ee44e33aca4e0bd20e04a38555bef9647219034801ce1c9ec7c2186e94e01e960384ee05e69901d137367f9ddb1dee0a23b7e661bad1fe0bd0f0760120fa1440795ce58e2c64344596d2731553da35fc5e88a4cb98aed658d19c2e9bf486f87f3ea50b854dd59cae74e08e3b549e1718cece9b59cc73ae93c2568b24b8ec3bf7ed9b5769d8664557cb1bdb882e311394397059c991c0aab82db7855ac87d2f621d0bb63aec421b768e079ac0158095ae6956889ee55d38cef3b0c2d42d07f36f2a7530d12e26b70c0fe18071148b1ce6356ded358cede60640b903deb5255beb6f7e7fb6542e6dbbb4a8926a71363c6345de119a89b2e28448525b1341e6e788b287e22cb8838ed78c64a48f8797c0cac44f0f9c0b9a57226cc4ad3f05370d7cb27056b4c63091ebe14127453ef50648764b743d4e58619fdf37405069dc72c363e5abb8ef73c323bfb5ba63b723fb4c80f9e2763bdab620ca1bb8ef78efe153c601aa5e43fe91061056c544745aa67986b3abd847e6c4dde9c718237b8c5a74aec4e99dc70b6d5867a65c5de58df16a44ba20217ba6af0e61746881c59b192cc84f8d8e16992865557cce92553363c546c99bc465fe94fdfdb2d836e9b478bb7cb7566a8e940a1753accbea9fa3d922ba74fb066ba0be8e27f0a91cad0e769fa4f2f4fe38beb52c01d02e940efe49d7c3b7ef8f7f8b6be12668afe9112f62359ec833315b4284796c378a4f0b2cc9d7b083f36defcfdece330f46f260283378faf4ebdef0bde113ca71d85ccc69ab1df446069ea725ae929ed7eb38269a0d70f3dbe66bb6a6b0076f8fbf17b30d373c5843df8a5868de66da2c9dabb563fb9ffbbcd18dbe3cf24f6b50dfd434251e27d74bdb0ef334d59fdb3005f78d3ead85ff17b7cdac62ac1ed027b50e6215cf22959a0cdb13c21678e13f6f67c4ee55dc71779ad6d7b304636c6995aaf8594edc0d09b80c67749cb6eaf86aee9fd1814298f224e4161789d9a2b6ccc8bf67a765799214410de8625c6c666a1c8e6ec981658e1dbbd07e80e94ac5664ca2554470d1215c0a0467d3c4275cc6fd0a05926ef4f864a2c5843645f158293a687eb68f948e609d81bbcdcf0147ba68028f65f3465619823997fbb7a010456f176c375a766548c391ecad16f845d0fa77382a056c1fe625c5ade3ecb9ca372d6b2e011a544244e5006592ad7b7f8413f52bfb60dc8d3df927c3a0fd27908bd56b9af2efecc09bc4be3f594f26d245afeb8ac4f23aa7c25ff7f1eaa615816995897869ec6d05a2fba48ddb0d5b90a08895166596b96cb2c68d18b57cb32cc3ac7245368806111579b99db7b764b7b534ef722925adbb872c37f8c768eae7002397c612de72e0717c7940398c1be3ea4659e53284f2d38a2bccc9d515f6788c677b7ee6bfa0c95eb9bfb218cb95d56f51c0118ba4c6311d887716bffb8d774b7090a1f47abe65f5fcb44b119f073b5b9ee3fe29c854cafaa7dee9a976cd22015c1da3bcd3a17251c35c261d7d6daa935fe87b567576a9b2429d753242508f39334c776a58e6e982941bd8fe0544faaae37e0fbf49297d901ad91742bd9de7c965f17dc4e7cfcaef23c2efdae711477a508aafca3563b9d09aeee4b041c5ecae8564587ef0fa910f3f5fb86f5eef8d86e567aff19b7bc509afb142158d0e29d439ac7c0b1b6bed1632bf2b1cb4eceed9b466b363fef301d7c0b42fa518e1fd788d2f8361791c6890f847693ce5516b056da7a9660797e8a79ebcfa899dfad308c8d956f7a588d9a90ca6aab5a797f84d4b00e6ed548632318d5cedc657caaa52ecc6487f072bc7e009323c3587b9e7f3c07c0742841d4911b593c5c1080e19608b371a69d356eb64064bed340d4379ce5b47f9ab105602203ce6b18857c4b8fab3c66c65bab08cfd30a5edee1a4f1935b6179493a619d97cb45985a96f6aec3ec85a2156ed6b7499cb3851f8b5f33e70edc0ed317dabd85bad269a47110ef00394a6a8cad056d9626ddcff8465ed0ee8a3e078b8a29231df1c134da191b4a3d43f1396c63de31a8c3570220720302e4122345e2c1af988c712d814005009d8856285c17113b93f516a120acaff4f062606eb73e64d1490a0f8dd3dea0ee17bea2ade04edcaa5038eec038a5ef9dc9f82a22f7f0f429d760fff14488dc0b3e3d8bfd1981fd20fe9009de2504612c85c7fee1ef0193b84c98851c8b21f6c70a331c1de0dac4674c5b908831110b8f166c1ec6ec14ad3b0e002ae53f64e4bfc15f39b0c7f2ec1cc8d071fb9067c2b0f1d83de948f716d80cafb60b2f573e09ebf3bed466adb238aba29dc5a3e87888fb0e5d7ed11abdef065febc804bdd40efc0230299d81ca97a9145e3d2017c303e5860d629de0c49faaefe07b78144a5c366c50f1f53a167de93fe76ffe9f2dae5e7fb3f34bfdebfb01dacba460550a474f114686c1b0106ff0f0000ffff010000ffff937b7c71ab820000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffec7d6b7bdc36aef0f7fc0a66b6dbdafb5a33769266fbbaf69ce34bba752f891fdbd99e9e3e3dfb7024ce0c63495448caf6acebfded072075bf8c34bec57bda0f89471205022000022009ed3c3f7c7770f6f3f11b32d7813f7eb6f3dc719e8d46e440440bc967734dd60ed6c98bcdad57e43b7a2e26645fc819a1a1072d422df924d6422ab2a618237acec8c1bbb7672747fbefcfde9d9c9229f7d9fa10c1edf93e31e014914c3179c1bc2179af181153788d2ba2442c5d465ce13102973371c164c83c32594067e4c7a33347e985cf1096cf5d162aec8e6ae2c2d309235311034a3c3438fc7074f0e6ede91bd3fdf099e30055481cf16938db1db07040c29943a36877a016a10bdd873373cb458a84ef33b93b384d9f1c68e90f88eb53a57607d8c817f47c802019f5c6cf08d90998a6c49d53a998de1dc47aea7c35c81fccb58e1cf631e617bb83ff72deef39072288a8e6139f0158e89185f0d6d19b5de6cd58e1bd90066c7770c1d96524a42e34bde49e9eef7aec02d8e0988b0d209c6b4e7d47b9d467bb5bc3cd1a208f2957f24873111660d59ad158cf85acb5f079780e03e703c7e0b176634db88b90e6924d7707537a8197c30818397e862f68ae7d36ce98487e23d7d738ce6f617cdf424f6beb37373b23db2aebc0029b08a19596341ab94a8db2ab61c0c321dc192478a034a83963da6268ae895e44408466571a5f364f0899086f41aecd4f4222ea79809033115a8b609bfc7533bafa3a793605a29d290db8bfd826836f997fc134772979cb6236d820d98d0db22781db1b44d1503920cd7c6a41dc3c337f62ffffcdbfcc7a0ca89cf1d0d122da265bc32f59506a3b44649d408442451414e0ba09971f59e88b0df2a308a90b7f41f3940081dc208303501bce24a078091866602a5d501036946e0ff5c61b6b23ba5a8e5174ea4f915fed4fa73020ed4f33c8de52c88d4f33c85ec68589901e939677a1082b74f962262a6cde269b5f9747ba70c78071becc073c128aa3466ca34c814e5e543be04a3ba170263118059d75656e1b817350e02c6a951781303f0ec2ec1d8fabc8a730963c045967cec417ee798a0788b6d56490c7543e32c131661344277f30a1eef94ca2c5c35e8404f46793b5172f5f6f9017af36f1bfadf5afcb1c94d4e3b1da262f0bc4a7fcd98aaec8abfc7ecac81770fb457afba64a17885938f428188e8a9cfb6c0ad86ee6825e226f6b33bf6d249ffa7c86fc4722bfeee655cae0d410d7f98b63419ef300ad260d758326c01c91bd7639e79a394667f0d54b3034256b70c92cf75f6d6e3642f26a86c5d2ff02cc4a1716de5005d4f79d12175b114a5efecf80799c92b5805e253cfdebebbf4657eb198044af60968dc04c80488fed9da2f6658d0919fd05641fe65a4d28c96c2d81994ca3d966c3d9703b6b4bfe024c9160652630b192680e9c56a0540488109704876a22193d57380ffb025e972c9202def14104470a664898d02fb99e17215a795243f2975176bbc204096c4a47e52613c79d915141988947762a7eb6632834f30f7831e44c44a02a92a00380f7427a91cde3f4029fd83f685ed29f1e9bd2d887e916fc0066daf1193593a69d4b763c9e01c1399202d1327986b3106845b90f6722c1591a8c7778304b9fa0dd1a10255d9cc61cbc72b65e7c65664f6267f7c1cb1730b71ad9b3bf4763924da63b466c526073ee810175ae60b62bf76f27965833e8fd3760163c1a37cec206dc3869915212fb053a52ee147e1a85cd08373338ba501c26f0389a81b96147e1540c437659e08f69081ea316613255db8bccbf9ae830ed007fc2bf7c44ac77601d357001cfb38ed6d6cb1d149930f317d11c7d1392fd72dc39bb90f0378e0629d59fb340658a9f03015d08154c0c2cffe55c503f86ff99542015bb83ebeb22b9d842e99b9bc1f8bdbd0b4248aeff9cb4fef34d99c9a6a39165418193239f97f99ad0e2491179e2322c534b13c6fc69506d07723d9ba197890626b92842a9d0387ee3716d11fcf87938017eec4c325107d5d5c8ad09fca3a5fe7341c9fa0d5818979034648c33548b630856f3844502c7b073e0e69e5719b12a097b9e47101c4ceb422e92a6887199a95d18a17ef4c208b872c92c673ab042905df8648ce417dc43b559016b9815f4a9b5daaa17eaae9875a09d82bb1d1b797f2e7e9418f67561338739e6e8f02179a8e6b14601ee85b4984e3b31b6e06ec73f98c03595baa7184ea1f9bc039f130bf12139482722ee87324cd9523b2c88f4a24b7b10e612a47746b1df6c3df3273b23a0c6c48923985eac3bd03293dbf6e83f7cc3a5d2e0085c6e1011fa0b02a1ef6548f89484cc654a51b9f89a243c25975486e83025be46023e99109f03fc299f1d85388567661a00e78e430919df093cf0088ab36be139f081f9c4fcef24dd9667846a5be4b5675aedcc5f16e6b4521b138a0f521981789279cc03cfeae538e35d7b07e877550d7e5418c2b33966769007b134de14995345268c411c412f30cb136bf0f3c0077521088337bc61eeee9020c66148104377336964723de06094410f774651593c3ad1c7c0b3e2a5f4f053d0395141d1472111c4898967f4a89a5c75216a22e583b64df9d5a06130cb374a97858be4674d39d82cf6c1910659ae887e49c85378f8623e3d9b389aaca1f78d41d37a0ea151215e2fd30707e3e16840b887fc4e7ae04c2dd78c448baeaff195037cb086bf864787e0189b21844b46b58589610dfefd01d0aef89c4bb5aed40e5a821236a95ea59971ed4a9e1bf0c1a7914a1dba087c32ccd0fda9446fea0de24d20ec331e7aec0a1dd21af81e9e72d1e122964bc3432e996b86ef37629281c754cf6f6ebac0e7aa410a118b8579aaa98e8bacafbbc9a940d21a37d1449547a22ae2c9e0a4a251e44a79205206938cd3b5defa98be6ac36a40de3c163629507c85543264c93544e83cc2a0ae010ac2b14170d3337c2adb1ee1c379b781d2b4cb6d2c2878c15d03d84b3af64a416b125b260277746852c55e2b4da376a2ee4eaf4d5e3822626107dddf9896f74070a66177a23b753e0270adfd5f124efe3ae42104b0bc4d7a7ab325713c1cc5675d7c7923a5b8235b9a69f89462e18a00a2dcaec00f7d98b91421ffa7714dee2e1b0d96f2537160e68b4957ccf6376843fda688fc3ec46066a07fc37da6602ea2fe255da8b7713061f2e6a69ac019730d1826dd6f901658fb0b6d604d784851fdf63f1d7be722e8e2ee0fc27d38e6fa08fc7e786b403d21d6babe883d0723735fd0ae8cd23b884cde4d4d347217feb6b7a72d863a8408ccf27f4c36cb590a7189e1596605b2d4687d147320771d4484d43086357fac4099e9a08bb8dd5da06ebcd981ce26d96ff309b3ee3e993ce1ea548714fd4815449846571f448aea09eb84ef86e3271089bc0b7df0537f66aa8b8fada09e5760bd154f7748629877997bcebab4fb68160ac9c83193015798a2579f60782c128883ba8f112a817bca836416041dea777a5176e1f027aee7779be24c87ca2c3720a76eed3ec193b6200b1e99c5d686d0b516959adbcd31727388485bd24f91e40118e4a625325c16c809ee91808238c7e57e974b9fad145597833a71f568386372d0689fc8e79f93beb320ee0f93dc630db360b77588fa4cfc4907e4608e28ab65f436eb585322e216e9b762f20c97540a6933232bf796370b0178bf8459b6265bc890e1db07d31926c97e49d798d7d67f7d3a69324b5e9a1fc32b07f1ecb35651f4c5c1350ad3e5f384666348ee9899caf1e9c8490183ff484bd5d3529d29f3bd1fc97bcdfd7b09c5d502dcb960087f9e4644a3a93a571d0c38387e7fef0c70a318fc0c17f4ab125fc06548752ca9bfbd7573f3e77f9358ef3069464ee0ea6e0c82be43e622a3d52f5f68a1a9ff05e6ad26114a4cc04057dc9b1bbc5a6b697b149a68eb0c2f8b42b6fea979d96bf27c1f3d241f45acfb331202f8fbe764eabe247a0028ef85a180a883bdfb9e3cdf2531d8c6290f5bcd616f9ee3ced3b9905d39d6b477728a5bebef946ded0c3bd2ed01b86bd1bca86217d7c307cb9852df6df4ceecedcc30ed17f2d4faaeb893cf7bf63d9daed0f9a7b4eb5d8b2d7fb73bcbeea664c9f6b4a71c0edd36f6315e68eaa63d50f87367efbfd712b521c22c51e75e679b032ef49c49245d3da575ea0607fcae0bd4d5fd770d301addf5dbae562384640da6e8fb3fd06a7595457fac56971ef649cdf2b02b35bbe77940ec9df27e562e1050492a7e476b932d7af17bf6fa133e0cd10cdb45eb4e9fb5faca1f31402757fb8402d5771e2422f8f7f0f4901500e8ce4afa87cbf78009dffca74dfa8ecabb2bf196d953a39a771b337c66f7280e7d16cef4dce6ce3fedb6e3264fb2cae4b7427337371677d97b5cf08b811fe81317d8823d9b334fd7d7707778c6030666009c55b63df8763b08b62198bdb9d94e4f46810b39959c859ebfb03e35be6446c0e8cfc3ef362e78a3cd1b8f8b2a60f6fa5af9e8778ea1cb417af7fd27d9675cd2806c837e76980f6fef9b33dcfdcef8a55bb4934b409279c921f0a28bffacae16b5437e6d47e3caa7e10af62b69629cd1c468615580ed1190a85c114bc58659258261c8f4a8ae1ba771846749c9887c23641cb49e87e8d5b382ae675ccfe3c9109cc5914bfd603eca30184906e3a898aa63f18339df464e6c83bb21b1847c17ba9909b91879c28dd1974d8e60d65db7c2e3076509572a6e62c87ebce47cd43d74dc2008b650c641fb79b2e5c75ecc322284cd429e5b9b884baee007a51a64af4cf8695b195b3220cab8f7987bb31937341e605caf80bac0f0dfee0525c6b6e3b9c82f0e321fccce575f8091cde8c822fed241918482fcec87626093f0d0c78411f4e73708208cd90d53258492480a70360273aa982c8035e428d458394493dc051c82c06ab900789fcf99eff3e4a46762ba774686e49c3bc9e90a73f4a48535326b9232223db891d39fb739c35b18bfa73ce4e15464e48f8b4df761366bd89c756cf48d5cd2cc0b49296923223d7cd64a427ad82d2500cfb365086629dd849a0c1a162ff199664d83978f5a7eba07de33e3366cc3f3e8b01543ee7d0439f3a99c01060b4c1d95f8077a2554fac4d2901c242cc8a059303f02ebaef994bb464e2b62483e0f3caae65f171345f9faf57a2ea78549e112784ff03f9c872b053ccc252e89e194717d1d2cecfef57c86c383e0e9ae387898cdf2f61d5bec804023076c42300929f8a6f6acf847394ae10d468dcc34d4a20f5cd3ea34a5943ac859afb6d9947aac814ef3d0f138f545a20b8e3f6bf41eedc3a46a4c8b0769dba057583d123e7f55decc845b1c7707cf115910a73757e0b519552b014a9cc8fc70edfc550fa0bd60a2b7df00b4eac3d468abf9a23b532183a49600fe1c24657650d2de98715a929ec517d2fd19c6bf3377afbf00ed728ce5fe028b23a48086a1096f879f25bbe371334dc3538f4bbda8675b777c3a01f73e6718746ed104091d5b2d3a8449065bd5dee56184e7f79225981a87739251dad3c46641f20da149f1a58a3a0d0a257d0c17ccfe20509658625619114be27aac0bf431e6b853ccd0ef6027dc8399d1a0d7981b4d23a6169958a2e6262f51c3a1a4e885bea2142218edc86a785316b679575fc320da01feedb7a60186e818a9000cf1d46568470e6750635e88993a9b8a660d8cd08f4972ce7a4012b517f6b1595230e086e41439a04c1130349df813800a535c0a8cc91a373b10bdf5616b66bc4e69b3caa310afdd920110fcfc348739c8d665015f018f8a62a30d72ce588474071c483065c44c0d32c32c73da149803af812895a857b81d4c0bb10a5d2d2368f4779849ec125d2d8f238c1c9e9305fc263e0dcfef0d13c3d0b74663ba9131920458a748798229737cd717e2dc6adf901c693c1e18fb9e6126f9f2852991465d14425c148021717185c18eb39812702be09915abd0ec22511bd6af5335799b30f35222712d5ca884e6ed6b2d757bdbd33c52dc17668c23ba0dcbcd63e403117373466c77f0ad08d2b5fac42222a8267bd8cb0052bb3fadd9d045f523df4533746a4fb5874ac3c48ce39018fbd42eb87eacec98a1ef553d5d7dff4ca5763d0683adbdf4e70a9cf516c04aee1a56417889a948af69bac08307d6fd42f6e79dde760c325c4fb5bcf558bc31261ad76f28443e11a88b06351bf068dbd600ccd0c4282827158c7bc4a4713568ac0586632e31b135c8d7c2965864e9cb3d46706784b056f07b1a525abd8ecf6799dcc2e9167ac192c221e5212c98a4cfb2438c77cf6e9d427f4bf25bbdc8c8b27066bd1b50c6c304096f7a9df90fc445d761af030c767a20daecd2a04d4fe7d653e64f071d049918df9633c0a3f9c50102c987f8af776d179862e3aead898706642b711db9c252d230ad30d01d0561ab271705ad18fbf42c7f540f8c560b879a1643bafab9bf580937f877c64ac5558da6e74dab1b4dedfac45c394243fc5989b91a9eb6c45ca66f3b079a99cf36afb3bbf9407de38c684026e158c63c9ce4ca736492365515135b1386b464424bacd6312f9ed8931985c02c0ef9c7183797808242f388a2c717ee0e46fff30b75feb9e7fcf7a6f3ff9d7f0c7fbddeda78fdeae6b351eb446ae8ec175599a6cdde70c350658145c3b33cb23ac5ba17c01d9b56024b39b559499295e2580cc98f492081f7150c06c612b66e9f75a8cc76a856077e35b4ad136fd96b0c9bf1d3655170b2c0c6b6bad78e8b714c9bfc37a1d4379ab90d4e8970ad8a5216fed9e226c5415e7bfd2a8f618c0be6833fb5de1cc66ca4318c095b5006f09f07d4ae0dd7374c1c43d69c75f314770b4b654a5faffd63bdd447e82f9670a5e6cad99bcdebec77b37258e565999db3cfbb2d5dc5db4f5f1d14ad1cde58c5c019006513f7afd1616ee4523366dbddd290655539727bf6a8d6c932b8cd3ed9a7b985c26b8c0bca46294d679813f9186700f24c0ec94f1cec1208bd2b998938f894709d87f50c2784214165d11cf85b88e4d7feb59e669362dcf44755aa3958237c9a15fe203b28def9c9110307d365e6f6f0ce7ce9b44305f9aca97d84ccea6f8bfa6b5d9f0d21b7f2635ef777631a292842c483d21371d5269cad6a689e5a55b4da93416ad1a0fce8786d7daba0fcf6a8fcd29960896968b67ddd91b73d638a69cc48422ceba2164ca50850d4f1f42709b098ab080b795030f158b6aeda20cf245e265aa5f07c54a68b30bd240179e208d403f225943cf9412e9d3eaf8d73eb79fb471d68cc9624fd9309d776dc93a435b9c49c312632713e47bf2e19e0e4731521f966efcc7c59c25ab2867cca12fc5619bed6151935b047e2cd897893ae6b4b9055bb2c0d5ef1dc40c7a181324ef722270a627ed432d3a1d9a299eecf1cd48ed8366fd87f18f9383578d9d292881a2aaea91b6015bb306b606a7a85c16fbef97fc4b42b8edb0250b7926daa66eb4a4dfd8df2e52d3e9d91c7849b87438b9bfe30b51d44b86e683133f5eb29192a9dddb055e0ac6d0011404fd3c300c026c3cc576af21d4cf7e495a3afd3c9e33eeebb7df17bc6a23607bed86265173e7f7930c6ffd3015e6a948a2e7c0180dd9952b85ee2acdbf86ab9445a20995b18f07077b0f5785985225f9b3cf7e2f3cabaad3d460d9e02485e2e9820b1b876b9813398fdbcd1dd42e622024b5de89a8454d1cc50cc03e8e42146b8f71be8d7b18681ed46f867115becccf22fd5043755813716b214fb5b3afdb7f0faab4b2c8925e8b30ba661553b9f959ad7b61929e51071eb9c89d6d029e58550889bf96ec68c8f3b3167ebc2244f85d1dfc2d84e1777a2814f8b9fceb96066780d5703aadd39c48a1018fa8bec6dcc78a599aef61dc08fb0a8947c65a09cf12c08cc1f8b4aab2e2add7911a9f7871f3ec12252faf1839615a4e40339eac9ad20d51ca0d24a4efe49877b5eabe9ca683cbcdfdbe89be0790f169a2579dc9d4a8e21b817d021b10f48d70e0303d9fa2a38ea39b855b2883a88de999d2a6a58c0e7d142c61fe9d5290bbdef2711a8d0bb58cf044e1c782c0fb810704dd6bee7fb23b5de8f054568ab7967053694507a34469c30057e88d91f0e96fed47cec007397e91db2d697095548b766440da5476446b23fbec48fe4dead5852837707aed4717b34c61c53093e0bf34fc011664a838082b412d01b881243e373a54ffa31a606efd66ca963f69836c496c1b32a8b1c31b1bcbd698dc9aa66a400f02e86a488d793cea2568f52993598c3749756b64e52986db0c55e18be098db73a58928b294e3195b7ee2bbdf250a295e27b8c3bdcaa5c2178b7471ea1e8d33f5fc28c125f8fed77756f297a65bcff9d242fa9cabe4cf46c939565aff6da1312be87e2a62595bc3f0e8f1b1889b757e361f18d07655f4bf2e2913cf3c4f31e8cfff6fee896de780a62455f1c3a1c66bd3f9a997baf30584362f7623dc73d25f6341aae2ac97ef41a10b720d676fd880e945297427a8dd4a60ffbfa4e09a865544759a31ae5392a4fd7a2d4caa62846be3d3b3b3e358b8f4045935551ecec87d30e83920c3d36fc1d98e153f375b87d292e15930d2c33cf93c73d2d71e9957b6661fdfe5c8e9a6eafaa8df53dc1c747e47b964df26b3bb4a0b0bd4ee3ebd1c5a6f395b3f5caa11177ced9428d5ebefc7200924a670c0f9f2ff5f9fb1d9bc5f374a96d3e3e027c71a564e00c5a4ed419c8691635ff486fff4ff595b2c34cdb3ed72c06eb60b958c8a4295cd454f2e281c7f1a154642f14e12210b12266e4cc9a803974de64614e56f45a4e3e99cff2e48eafacf419dedfc95ac2aae9772ba1d248684b0a3e969f3af94ea86f3e9c8fff675570574bc8ef994fe7b76ae67fdc2d515ffb082b0b5db98870c7425c64305776939a47b9bf3047378b2b8492bae7e6501a084504a050bbd486799728fecfe464268da26c1118404cb3ada712bb33157bc1d02260bba1cac3721dd91eb9488ac0e0650e7c9aad36c988d119e5958fba96f67954bfcc1e4b3f2fac82dd966733bb6e4d6733c96666af2b9e6bc4f52c37d9fe174f4093fd05a117c00c13da514daeaf016ca5d8d38af34f71e24956762d778e25bbe0ecb2fcc5d8c203b20b5dc4b8a737b92eca4883a645b2b4669e779057bdb2f70f714c7e231f942dfd6b1f0289923d82ed2c168d4e3f1e0d7722fdfee47eece6cf854f76dcd66ce6c5a5b3754b170b47f7c4b197dd7c2beecd68da8f36dbcd894baafa60a36575556c2d954a0d4d52acb692d457c16fa309fb6d34b0192cc8ea67b556874daac1566bc5e6d6d896564fb7264e7123438a30ca74c8e12e058dc09b7ba6b8cfdab4b85bb150f9d0c8b38316a0c7505d5f23c4233ccaf10bfd158bbe143ef791f5659f954b26628f59bd99a9398b8dafa7bfb1be2405e36a6ed7df4c799455692475b413659e0e4fc1d89a5a7e06bab92a7d7e22ad0ce9e5329316702c5465ac558d311f586f9517f349f7b2b81445a12c3a09230cc45418e65b252ad3d238a60e8ea96ba3b403865e385b2fbe1a46b8ad40e9054281d904f306be437d3e0bb789b3f53a02fff3927b7abe3b78fd6a40e60c59667e8fc679d5a89d09f8e099b12b54374f4ddc7c2bc52d73d64b53e581881676343e77e1e7d7e4c5e6d62bf21d3d1713b22fe42c3bd33315387fe3a2d00126253868b0906a3b9b27dab6f6777da6272e79ca58476c8f4a10d87dce26265dc46bcf434fc2dc701887731a3436907a1e4bb27785c70d4fdefc444edd7900ac6c6abbcf4272cabdb96884b40f7cf2309733e73e8f54a5e659e56bfc450bb632d1df81d6283c0e8487a1b0c25b1d99efc0809043ce8266b6581c2386d4625964a99a5a9d2c40cd4e63dfe717b4b197bf33a6392042431ab2b027c5c59f2d829697cce2a1ebc766bf7149ac9498ea4b535d4512e3139a5d8058c4454c0b62966390d49c2b05f633e1c34c3604c11d59f7e76f027742cc240d02ece407781ae35c87c1fc066992fe1724790ff37920e2c352c1b96a9fe87a4db89ec4ee39d3a6df732ac19f83607f04a6e30a6c43e5c6b29e0f69c8416801011181ebc87a748ea78a863321663e3355f5a2910ac1415d3833012cc87eb7f7ba65e83db50d5721bb50cacfb27d64227d9742003d18e7bf47be8cdbbb7f09ac46e4c951e8aed4e787f8433cc2cc858f5b3b06e3f2757b87afc8010c4688e696fca0bd95fa04ffdad312c96517ccf726c0e0ca9d25a3bb017a2741fd3c2a63722639fe0ae92add5f70708fc3d1478aeb70858b964e579563d40d98fc3ea8447ff6ecf577a7ed446d3a86a3760837bac710e9617a029e34f8473432540dc6fbe9f51229b51d9d41d00416b2da536a98f2091f2f940b2e98b6336f421b6e9f1d7eb01becccd3714b4327b35cb778c5413f92f5e8ecc3c798c985f362b8397cd9dd3a63dbe8831ae53cecc62f8a2a0dc0013735adc13fd001b0eb7f010000ffff010000ffff192d18151b970000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["index.html"] = bs @@ -73,6 +83,11 @@ func init() { bs, _ = ioutil.ReadAll(gr) Assets["jquery-2.0.3.min.js"] = bs + bs, _ = hex.DecodeString("1f8b080000096e8800ffd4595f6e1cb9d17fdf5314042c2001fa66fd6d3679f04b20dbf146b12d0f6c2986010101a79b3343a89bec25bb359e151ce43401728d1c2527c9af8aecbf3363797763aff7c11e76d5af8ac562b15845dd7d45444767f3737aa6b7470ffbe169642c5c530b59068998e774e1722df476dcb35ee9ca05533bbf6d01034a07f33a84c497e188a1872cdd318bc26de8cc3abb2d5d13e82aa89516e5be3676f54791b90f935459eb1a9b697aadfdadf6223921b5c0039aa2c82166147ed4ac6421f21b498fe75774559bc2fca86ae32c73a7a4042c5c100fc74122ba6aebcd6a5dd3bfff45df3ef8ffefe82feac62de891f32b5236a77aad69e9d807b0821e3b5b7bb368e0f9f05074fd12f968c2135de85a0c4ba3447659536a5b77ab1a135ad0c6164e21205452312244d09f72231127bf3da98bb8fe63c01cc7dc949480562d0a4d57733b17d0e0b305d4da53e6ca5251d095f2302aa7eb23533de47dbd3e22d54624390f46beb5aa341918b5a34afba5f32529b8abc4aa33ca4dc81c42694b6e299e4de2b338fde79a2c2dce7b27711e0791f8d4c0037fd53e608f524c4f490320262d4d60062d4c1d48794d66659d87e19bb5b6543877c37103d3285b2bbbd26186a3a109124fcf2e69092d611b6a5d461f7c02adbdb95153099fe4ecb11cfea550abb2c2f76d5c5f206349d12cd41d01c19f635f6462afab42658063e25c823da7c596c2d666f51a16756bf81c534d17567957eb8c714befcad63154aa5c1ce310029e2c8e4938259ce01d00d406e1d3c614052d60314e2b9bcfc183c8a9db40ca8a06cef593d5fe0af3271788dbc498388ae4efafcee9ac01dee23448d2a1b90a61e37cced80fb10f2a4090f903c2c2ea059f1b986869747deda527116db54f39b01b2756e116aaa027ed7116c89436828e73df2e3182cfe548d1bc3b6d62e31e6a843fd3ba6ad38020c784087a0eb30367da42ab78594d2809e6b2e98aa6a4bd409a2311ee4147fa5064ec821d5a84be501c464267d4f0b305bc2349498f2556e552a2e367e6d137e1244a7c80dfab78d9d438fc36e79cf54affd0c021a115dfcb8ba21762d585eb3e7134ce9f445a1c0e1817aad41d4b3e5a262234716414c92f9f3109ffa7cfe5b2305660ed30316c47b74332ceefcb25bd463612dee0b303ac9cac895df2dc94b87f078efb103b29c0be7a93b7ae157fedd02274aeea759f26da3d8e2945e3b2e0bdc7b55a359c33e84d4a2e99d772c19a2561f2dc694e3e35e97738a033ba84242a30cc8534e555c68171fcf713ca9465e126405221ef515823f432ac7f192fd32fc798e41c3977b451b1861a7e2680d7b7466f4605ab20f7d1a3c8abb317d392754a4a409d396b7129d0391737b758fb710c80039c56acf35b8cf7316107140fee0498883b60dea00954482d30b05777cddd257702b58a1e6b8723065d689deb7cc06f2911f65addcaf192df4442ae8463385ee4bae4700a6bbe62e58a1c44d5c6d46bb9857faa483b51cdbd49881ad238b144f80dc0525947c8943680e642ef50e9b305207408e71697e5d22076b96e1b9f8f19bdc095cec1ccf480f4c52746e170a4bb3e2e2baef57fa8ae33709322ad1df60c8b3a0d226849507da4c4cba5dba010e1d2ae6e3aeb7e92483b5153e7108c1ad238b15ce3d1833e4ecdcef0330124a81e79b749c5c99890404dc50798bea1a7ce37a5c026a404440ea7394a3997b9626f15730fa257b3f66818fa143125f5402968698d14b6d0d015e000620fcc5ab1c380a91263e1603900a3be35b865bde1e845a84847cee53617a4da2d1f8e67f9591aa666048dde830f2142900d3da518a3dcc970a246ad8c56b394d3485b6c694c2d56a32c8e7911fa67c8bab5df42df7ffef1cfb1919f407f5c025f356ab5f27a25f711472936d864a9c46f1685c98a2da95b650ae996554d77778d2fdebf670b7f89786f004c5c9a55e36361dd6fbbe2768a5b07be1b710d9a5b9e6546bd5f4a3ef63ee559b8a705c5cc88db6ca47ad69afcf926ec17a96de6b7157ba9911bd6cb0dcbdb276d4f0e0f218f9d0b456e782e2a70f9dfc81301cc447f5873cb8f768a6529981fb913b3a805aaaaeb32a162d96547cfd3a119e50706511c7bb09c43a4ebba103ba5d825c123f7476e54e156d859657aa7fd761730dc049c0a206d4ad25de5c54f0c849bdee4b20414564d91b37245bfff76508685da7318609703073a8648f9e8d6c18b4bb14db9c0f8341a132af4f49191abb0d61c6822547178a862e0dc2fcdb0de69ad4da888d822ccbd2894bde96c3fc8df558190909592a4ae54cf2e5d0333d27d791ddfeeae9b070f7ea7295dcfd747ed8ea6baba7f5cc0e1dc598aa4edb4103a4e4f49273bf6febac60c9c233bc3fbe58ac17311ccbb41cb7dcaef63f2c4d52fe0a305f64dd2e1cb5433a996c9561fdce49f2bdf9be08755fdc189ee411d52d71b13a6f5e2f11fbeeb0f8abca516285d4ef69f95d3f6a074afe1fc2f870dc7b39353d9543afebf13e1225200cc389c8eff76329ac32217ee5fd19768e87d4e6dacf9a1d1f72ca805ed5556719bfc115bbe1f17555e552bcf6f87978eeebe4e51f8b5942143ce5de27415c65535fa8bc3f03301f83a13960c5aa2a63f5f5ece5f4bbbf1fdd579044c89119c5ec518d20e23e30d3fedaa5c5e7b94d4079c264ee59c7292298dec9daa07afa15d80e4393f070f734ce0c790da39f1dc27d37dc8f47e9bf64fa269d4b78fea0033d86523fdea4acbb40b5d6fb8f68a0d1a3f7d6c256566fc6c81c20212e6564b148bf1a5aab335e977885f1496ad34b77a7dc7f85b353d3afe6d6cbbde76bdd55bd43aa2402c87bdfca65363f7749b8b65d51f038b0a0dffa58445e2e0abf7ff050000ffff010000ffff84efef43041e0000") + gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) + bs, _ = ioutil.ReadAll(gr) + Assets["lang-en.json"] = bs + bs, _ = hex.DecodeString("1f8b080000096e8800ff7c91416eac300c86f7ef1451166f5688cdac5ae8a62731c4402493a0c48c8410776f0269caa84c171013fbf3efdf544a3f444be07d2d47ab8044070ae5c73f217ea50aa5816c2f85e98b74bfde8e0cf5b73741e07adc76f68a6ead61349cf2571503066d2780d0f1f12ed6d533f0ecb72d73811ceecf206b263c1584123f818983eaae963a48cb6fa2a7651ae28dc851508947d4a8ca089e3badebde7ddb7ee4cbe19e4d94c1c56b478d55cbbe2f76607c4bb3c2d7649ab625eb513ef7e9ac6574e715343373f0c0cb84b53c3e32d3b011e129147630134ba18021fc3d3feadc3258dd57f4c7561c8ef6817927ff71f4d3fb679cae2a0fc50b2f394c413abe000000ffff010000ffffe37f5ed168020000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) diff --git a/cmd/translate/main.go b/cmd/translate/main.go new file mode 100644 index 000000000..225edeac6 --- /dev/null +++ b/cmd/translate/main.go @@ -0,0 +1,78 @@ +package main + +import ( + "encoding/json" + "log" + "os" + "strings" + + "code.google.com/p/go.net/html" +) + +var trans = make(map[string]string) + +func generalNode(n *html.Node) { + translate := false + if n.Type == html.ElementNode { + for _, a := range n.Attr { + if a.Key == "translate" { + translate = true + break + } + } + } else if n.Type == html.TextNode { + v := strings.TrimSpace(n.Data) + if len(v) > 1 && !(strings.HasPrefix(v, "{{") && strings.HasSuffix(v, "}}")) { + log.Println("Untranslated text node:") + log.Print("\t" + v) + } + } + for c := n.FirstChild; c != nil; c = c.NextSibling { + if translate { + inTranslate(c) + } else { + generalNode(c) + } + } +} + +func inTranslate(n *html.Node) { + if n.Type == html.TextNode { + v := strings.TrimSpace(n.Data) + if _, ok := trans[v]; !ok { + av := strings.Replace(v, "{%", "{{", -1) + av = strings.Replace(av, "%}", "}}", -1) + trans[v] = av + } + } else { + log.Println("translate node with non-text child <") + log.Println(n) + } + if n.FirstChild != nil { + log.Println("translate node has children:") + log.Println(n.Data) + } +} + +func main() { + fd, err := os.Open(os.Args[1]) + if err != nil { + log.Fatal(err) + } + err = json.NewDecoder(fd).Decode(&trans) + if err != nil { + log.Fatal(err) + } + fd.Close() + + doc, err := html.Parse(os.Stdin) + if err != nil { + log.Fatal(err) + } + generalNode(doc) + bs, err := json.MarshalIndent(trans, "", " ") + if err != nil { + log.Fatal(err) + } + os.Stdout.Write(bs) +} diff --git a/gui/angular-translate-loader.min.js b/gui/angular-translate-loader.min.js new file mode 100644 index 000000000..6e12051af --- /dev/null +++ b/gui/angular-translate-loader.min.js @@ -0,0 +1 @@ +angular.module("pascalprecht.translate").factory("$translateStaticFilesLoader",["$q","$http",function(a,b){return function(c){if(!c||!c.prefix||!c.suffix)throw new Error("Couldn't load static files, no prefix or suffix specified!");var d=a.defer();return b({url:[c.prefix,c.key,c.suffix].join(""),method:"GET",params:""}).success(function(a){d.resolve(a)}).error(function(){d.reject(c.key)}),d.promise}}]); diff --git a/gui/angular-translate.min.js b/gui/angular-translate.min.js new file mode 100644 index 000000000..b160cb243 --- /dev/null +++ b/gui/angular-translate.min.js @@ -0,0 +1,6 @@ +/*! + * angular-translate - v2.2.0 - 2014-06-03 + * http://github.com/PascalPrecht/angular-translate + * Copyright (c) 2014 ; Licensed MIT + */ +angular.module("pascalprecht.translate",["ng"]).run(["$translate",function(a){var b=a.storageKey(),c=a.storage();c?c.get(b)?a.use(c.get(b)):angular.isString(a.preferredLanguage())?a.use(a.preferredLanguage()):c.set(b,a.use()):angular.isString(a.preferredLanguage())&&a.use(a.preferredLanguage())}]),angular.module("pascalprecht.translate").provider("$translate",["$STORAGE_KEY",function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p={},q=[],r=a,s=[],t=!1,u="translate-cloak",v=!1,w=".",x=function(){var a=window.navigator;return(a.language||a.browserLanguage||a.systemLanguage||a.userLanguage||"").split("-").join("_")},y=function(a){for(var b=[],d=angular.lowercase(a),e=0,f=q.length;f>e;e++)b.push(angular.lowercase(q[e]));if(b.indexOf(d)>-1)return a;if(c){var g;for(var h in c){var i=!1,j=c.hasOwnProperty(h)&&angular.lowercase(h)===angular.lowercase(a);if("*"===h.slice(-1)&&(i=h.slice(0,-1)===a.slice(0,h.length-1)),(j||i)&&(g=c[h],b.indexOf(angular.lowercase(g))>-1))return g}}var k=a.split("_");return k.length>1&&b.indexOf(angular.lowercase(k[0]))>-1?k[0]:a},z=function(a,b){if(!a&&!b)return p;if(a&&!b){if(angular.isString(a))return p[a]}else angular.isObject(p[a])||(p[a]={}),angular.extend(p[a],A(b));return this};this.translations=z,this.cloakClassName=function(a){return a?(u=a,this):u};var A=function(a,b,c,d){var e,f,g,h;b||(b=[]),c||(c={});for(e in a)a.hasOwnProperty(e)&&(h=a[e],angular.isObject(h)?A(h,b.concat(e),c,e):(f=b.length?""+b.join(w)+w+e:e,b.length&&e===d&&(g=""+b.join(w),c[g]="@:"+f),c[f]=h));return c};this.addInterpolation=function(a){return s.push(a),this},this.useMessageFormatInterpolation=function(){return this.useInterpolation("$translateMessageFormatInterpolation")},this.useInterpolation=function(a){return k=a,this},this.useSanitizeValueStrategy=function(a){return t=a,this},this.preferredLanguage=function(a){return a?(b=a,this):b},this.translationNotFoundIndicator=function(a){return this.translationNotFoundIndicatorLeft(a),this.translationNotFoundIndicatorRight(a),this},this.translationNotFoundIndicatorLeft=function(a){return a?(n=a,this):n},this.translationNotFoundIndicatorRight=function(a){return a?(o=a,this):o},this.fallbackLanguage=function(a){return B(a),this};var B=function(a){return a?(angular.isString(a)?(e=!0,d=[a]):angular.isArray(a)&&(e=!1,d=a),angular.isString(b)&&d.push(b),this):e?d[0]:d};this.use=function(a){if(a){if(!p[a]&&!l)throw new Error("$translateProvider couldn't find translationTable for langKey: '"+a+"'");return f=a,this}return f};var C=function(a){return a?(r=a,void 0):i?i+r:r};this.storageKey=C,this.useUrlLoader=function(a){return this.useLoader("$translateUrlLoader",{url:a})},this.useStaticFilesLoader=function(a){return this.useLoader("$translateStaticFilesLoader",a)},this.useLoader=function(a,b){return l=a,m=b||{},this},this.useLocalStorage=function(){return this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){return this.useStorage("$translateCookieStorage")},this.useStorage=function(a){return h=a,this},this.storagePrefix=function(a){return a?(i=a,this):a},this.useMissingTranslationHandlerLog=function(){return this.useMissingTranslationHandler("$translateMissingTranslationHandlerLog")},this.useMissingTranslationHandler=function(a){return j=a,this},this.usePostCompiling=function(a){return v=!!a,this},this.determinePreferredLanguage=function(a){var c=a&&angular.isFunction(a)?a():x();return b=q.length?y(c):c,this},this.registerAvailableLanguageKeys=function(a,b){return a?(q=a,b&&(c=b),this):q},this.$get=["$log","$injector","$rootScope","$q",function(a,c,i,q){var w,x,D,E=c.get(k||"$translateDefaultInterpolation"),F=!1,G={},H={},I=function(a,c,e){if(angular.isArray(a)){var g=function(a){for(var b={},d=[],f=function(a){var d=q.defer(),f=function(c){b[a]=c,d.resolve([a,c])};return I(a,c,e).then(f,f),d.promise},g=0,h=a.length;h>g;g++)d.push(f(a[g]));return q.all(d).then(function(){return b})};return g(a)}var i=q.defer();a&&(a=a.trim());var j=function(){var a=b?H[b]:H[f];if(x=0,h&&!a){var c=w.get(r);if(a=H[c],d&&d.length){var e=J(d,c);x=e>-1?e+=1:0,d.push(b)}}return a}();return j?j.then(function(){U(a,c,e).then(i.resolve,i.reject)},i.reject):U(a,c,e).then(i.resolve,i.reject),i.promise},J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K=function(a){return n&&(a=[n,a].join(" ")),o&&(a=[a,o].join(" ")),a},L=function(a){f=a,i.$emit("$translateChangeSuccess"),h&&w.set(I.storageKey(),f),E.setLocale(f),angular.forEach(G,function(a,b){G[b].setLocale(f)}),i.$emit("$translateChangeEnd")},M=function(a){if(!a)throw"No language key specified for loading.";var b=q.defer();return i.$emit("$translateLoadingStart"),F=!0,c.get(l)(angular.extend(m,{key:a})).then(function(c){var d={};i.$emit("$translateLoadingSuccess"),angular.isArray(c)?angular.forEach(c,function(a){angular.extend(d,A(a))}):angular.extend(d,A(c)),F=!1,b.resolve({key:a,table:d}),i.$emit("$translateLoadingEnd")},function(a){i.$emit("$translateLoadingError"),b.reject(a),i.$emit("$translateLoadingEnd")}),b.promise};if(h&&(w=c.get(h),!w.get||!w.set))throw new Error("Couldn't use storage '"+h+"', missing get() or set() method!");angular.isFunction(E.useSanitizeValueStrategy)&&E.useSanitizeValueStrategy(t),s.length&&angular.forEach(s,function(a){var d=c.get(a);d.setLocale(b||f),angular.isFunction(d.useSanitizeValueStrategy)&&d.useSanitizeValueStrategy(t),G[d.getInterpolationIdentifier()]=d});var N=function(a){var b=q.defer();return p.hasOwnProperty(a)?(b.resolve(p[a]),b.promise):(H[a].then(function(a){z(a.key,a.table),b.resolve(a.table)},b.reject),b.promise)},O=function(a,b,c,d){var e=q.defer();return N(a).then(function(g){g.hasOwnProperty(b)?(d.setLocale(a),e.resolve(d.interpolate(g[b],c)),d.setLocale(f)):e.reject()},e.reject),e.promise},P=function(a,b,c,d){var e,g=p[a];return g.hasOwnProperty(b)&&(d.setLocale(a),e=d.interpolate(g[b],c),d.setLocale(f)),e},Q=function(a,b,e,g){var h=q.defer();if(a0?D:x,a,b,c)},T=function(a,b,c){return R(D>0?D:x,a,b,c)},U=function(a,b,e){var g=q.defer(),h=f?p[f]:p,i=e?G[e]:E;if(h&&h.hasOwnProperty(a)){var k=h[a];"@:"===k.substr(0,2)?I(k.substr(2),b,e).then(g.resolve,g.reject):g.resolve(i.interpolate(k,b))}else j&&!F&&c.get(j)(a,f),f&&d&&d.length?S(a,b,i).then(function(a){g.resolve(a)},function(a){g.reject(K(a))}):g.reject(K(a));return g.promise},V=function(a,b,e){var g,h=f?p[f]:p,i=e?G[e]:E;if(h&&h.hasOwnProperty(a)){var k=h[a];g="@:"===k.substr(0,2)?V(k.substr(2),b,e):i.interpolate(k,b)}else j&&!F&&c.get(j)(a,f),f&&d&&d.length?(x=0,g=T(a,b,i)):g=K(a);return g};if(I.preferredLanguage=function(){return b},I.cloakClassName=function(){return u},I.fallbackLanguage=function(a){if(void 0!==a&&null!==a){if(B(a),l&&d&&d.length)for(var b=0,c=d.length;c>b;b++)H[d[b]]||(H[d[b]]=M(d[b]));I.use(I.use())}return e?d[0]:d},I.useFallbackLanguage=function(a){if(void 0!==a&&null!==a)if(a){var b=J(d,a);b>-1&&(D=b)}else D=0},I.proposedLanguage=function(){return g},I.storage=function(){return w},I.use=function(a){if(!a)return f;var b=q.defer();i.$emit("$translateChangeStart");var c=y(a);return c&&(a=c),!p[a]&&l?(g=a,H[a]=M(a).then(function(c){z(c.key,c.table),b.resolve(c.key),g===a&&(L(c.key),g=void 0)},function(a){g=void 0,i.$emit("$translateChangeError"),b.reject(a),i.$emit("$translateChangeEnd")})):(b.resolve(a),L(a)),b.promise},I.storageKey=function(){return C()},I.isPostCompilingEnabled=function(){return v},I.refresh=function(a){function b(){e.resolve(),i.$emit("$translateRefreshEnd")}function c(){e.reject(),i.$emit("$translateRefreshEnd")}if(!l)throw new Error("Couldn't refresh translation table, no loader registered!");var e=q.defer();if(i.$emit("$translateRefreshStart"),a)p[a]?M(a).then(function(c){z(c.key,c.table),a===f&&L(f),b()},c):c();else{var g=[];if(d&&d.length)for(var h=0,j=d.length;j>h;h++)g.push(M(d[h]));f&&g.push(M(f)),q.all(g).then(function(a){angular.forEach(a,function(a){p[a.key]&&delete p[a.key],z(a.key,a.table)}),f&&L(f),b()})}return e.promise},I.instant=function(a,e,g){if(null===a||angular.isUndefined(a))return a;if(angular.isArray(a)){for(var h={},i=0,k=a.length;k>i;i++)h[a[i]]=I.instant(a[i],e,g);return h}if(angular.isString(a)&&a.length<1)return a;a&&(a=a.trim());var l,m=[];b&&m.push(b),f&&m.push(f),d&&d.length&&(m=m.concat(d));for(var n=0,o=m.length;o>n;n++){var q=m[n];if(p[q]&&"undefined"!=typeof p[q][a]&&(l=V(a,e,g)),"undefined"!=typeof l)break}return l||""===l||(l=a,j&&!F&&c.get(j)(a,f)),l},l&&(angular.equals(p,{})&&I.use(I.use()),d&&d.length))for(var W=0,X=d.length;X>W;W++)H[d[W]]=M(d[W]);return I}]}]),angular.module("pascalprecht.translate").factory("$translateDefaultInterpolation",["$interpolate",function(a){var b,c={},d="default",e=null,f={escaped:function(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=angular.element("
").text(a[c]).html());return b}},g=function(a){var b;return b=angular.isFunction(f[e])?f[e](a):a};return c.setLocale=function(a){b=a},c.getInterpolationIdentifier=function(){return d},c.useSanitizeValueStrategy=function(a){return e=a,this},c.interpolate=function(b,c){return e&&(c=g(c)),a(b)(c||{})},c}]),angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").directive("translate",["$translate","$q","$interpolate","$compile","$parse","$rootScope",function(a,b,c,d,e,f){return{restrict:"AE",scope:!0,compile:function(b,g){var h=g.translateValues?g.translateValues:void 0,i=g.translateInterpolation?g.translateInterpolation:void 0,j=b[0].outerHTML.match(/translate-value-+/i);return function(b,k,l){if(b.interpolateParams={},l.$observe("translate",function(a){b.translationId=angular.equals(a,"")||!angular.isDefined(a)?c(k.text().replace(/^\s+|\s+$/g,""))(b.$parent):a}),l.$observe("translateDefault",function(a){b.defaultText=a}),h&&l.$observe("translateValues",function(a){a&&b.$parent.$watch(function(){angular.extend(b.interpolateParams,e(a)(b.$parent))})}),j){var m=function(a){l.$observe(a,function(c){b.interpolateParams[angular.lowercase(a.substr(14,1))+a.substr(15)]=c})};for(var n in l)l.hasOwnProperty(n)&&"translateValue"===n.substr(0,14)&&"translateValues"!==n&&m(n)}var o=function(b,c,e){e||"undefined"==typeof c.defaultText||(b=c.defaultText),k.html(b);var f=a.isPostCompilingEnabled(),h="undefined"!=typeof g.translateCompile,i=h&&"false"!==g.translateCompile;(f&&!h||i)&&d(k.contents())(c)},p=function(){return h||j?function(){var c=function(){b.translationId&&b.interpolateParams&&a(b.translationId,b.interpolateParams,i).then(function(a){o(a,b,!0)},function(a){o(a,b,!1)})};b.$watch("interpolateParams",c,!0),b.$watch("translationId",c)}:function(){var c=b.$watch("translationId",function(d){b.translationId&&d&&a(d,{},i).then(function(a){o(a,b,!0),c()},function(a){o(a,b,!1),c()})},!0)}}(),q=f.$on("$translateChangeSuccess",p);p(),b.$on("$destroy",q)}}}}]),angular.module("pascalprecht.translate").directive("translateCloak",["$rootScope","$translate",function(a,b){return{compile:function(c){a.$on("$translateLoadingSuccess",function(){c.removeClass(b.cloakClassName())}),c.addClass(b.cloakClassName())}}}]),angular.module("pascalprecht.translate").filter("translate",["$parse","$translate",function(a,b){return function(c,d,e){return angular.isObject(d)||(d=a(d)(this)),b.instant(c,d,e)}}]); \ No newline at end of file diff --git a/gui/app.js b/gui/app.js index e8241ac23..118d8214b 100644 --- a/gui/app.js +++ b/gui/app.js @@ -7,15 +7,21 @@ 'use strict'; -var syncthing = angular.module('syncthing', []); +var syncthing = angular.module('syncthing', ['pascalprecht.translate']); var urlbase = 'rest'; -syncthing.config(function ($httpProvider) { +syncthing.config(function ($httpProvider, $translateProvider) { $httpProvider.defaults.xsrfHeaderName = 'X-CSRF-Token'; $httpProvider.defaults.xsrfCookieName = 'CSRF-Token'; + + $translateProvider.useStaticFilesLoader({ + prefix: 'lang-', + suffix: '.json' + }); + $translateProvider.preferredLanguage('en'); }); -syncthing.controller('SyncthingCtrl', function ($scope, $http) { +syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate) { var prevDate = 0; var getOK = true; var restarting = false; @@ -47,31 +53,6 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { 'touch': 'asterisk', } - // Strings before bools look better - $scope.settings = [ - {id: 'ListenStr', descr: 'Sync Protocol Listen Addresses', type: 'text'}, - {id: 'MaxSendKbps', descr: 'Outgoing Rate Limit (KiB/s)', type: 'number'}, - {id: 'RescanIntervalS', descr: 'Rescan Interval (s)', type: 'number'}, - {id: 'ReconnectIntervalS', descr: 'Reconnect Interval (s)', type: 'number'}, - {id: 'ParallelRequests', descr: 'Max Outstanding Requests', type: 'number'}, - {id: 'MaxChangeKbps', descr: 'Max File Change Rate (KiB/s)', type: 'number'}, - - {id: 'LocalAnnPort', descr: 'Local Discovery Port', type: 'number'}, - {id: 'LocalAnnEnabled', descr: 'Local Discovery', type: 'bool'}, - {id: 'GlobalAnnEnabled', descr: 'Global Discovery', type: 'bool'}, - {id: 'StartBrowser', descr: 'Start Browser', type: 'bool'}, - {id: 'UPnPEnabled', descr: 'Enable UPnP', type: 'bool'}, - {id: 'UREnabled', descr: 'Anonymous Usage Reporting', type: 'bool'}, - ]; - - $scope.guiSettings = [ - {id: 'Address', descr: 'GUI Listen Addresses', type: 'text', restart: true}, - {id: 'User', descr: 'GUI Authentication User', type: 'text', restart: true}, - {id: 'Password', descr: 'GUI Authentication Password', type: 'password', restart: true}, - {id: 'UseTLS', descr: 'Use HTTPS for GUI', type: 'bool', restart: true}, - {id: 'APIKey', descr: 'API Key', type: 'apikey'}, - ]; - function getSucceeded() { if (!getOK) { $scope.init(); diff --git a/gui/index.html b/gui/index.html index 9eb6a5247..9d9b0320f 100644 --- a/gui/index.html +++ b/gui/index.html @@ -97,21 +97,24 @@ Syncthing @@ -125,12 +128,12 @@
-

Restart Needed

+

Restart Needed

-

The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.

+

The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.

@@ -160,60 +163,60 @@ - + - + - + - + - - + + - - + + - + - + - + - +
 Repository IDRepository ID {{repo.ID}}
 FolderFolder {{repo.Directory}}
 ErrorError {{model[repo.ID].invalid}}
 SynchronizationSynchronization {{repoStatus(repo.ID)}}
 Global Repository{{model[repo.ID].globalFiles | alwaysNumber}} items, {{model[repo.ID].globalBytes | binary}}BGlobal Repository{{model[repo.ID].globalFiles | alwaysNumber}} items, {{model[repo.ID].globalBytes | binary}}B
 Local Repository{{model[repo.ID].localFiles | alwaysNumber}} items, {{model[repo.ID].localBytes | binary}}BLocal Repository{{model[repo.ID].localFiles | alwaysNumber}} items, {{model[repo.ID].localBytes | binary}}B
 Out of SyncOut Of Sync - {{model[repo.ID].needFiles | alwaysNumber}} items, {{model[repo.ID].needBytes | binary}}B - 0 items, 0 B + {{model[repo.ID].needFiles | alwaysNumber}} items, {{model[repo.ID].needBytes | binary}}B + 0 items, 0 B
 Master RepositoryMaster Repo - Yes - No + Yes + No
 Ignore PermissionsIgnore Permissions - Yes - No + Yes + No
 Shared WithShared With {{sharesRepo(repo)}}
-  Edit -  Override Changes + Edit + Override Changes
@@ -237,36 +240,36 @@ - + - + - + - + - + - +
 RAM UtilizationRAM Utilization {{system.sys | binary}}B
 CPU UtilizationCPU Utilization {{system.cpuPercent | alwaysNumber | natural:1}}%
 Download RateDownload Rate {{connections['total'].inbps | metric}}bps ({{connections['total'].InBytesTotal | binary}}B)
 Upload RateUpload Rate {{connections['total'].outbps | metric}}bps ({{connections['total'].OutBytesTotal | binary}}B)
 Announce ServerAnnounce Server - Online - Offline + Online + Offline
 VersionVersion {{version}}
-  Edit + Edit @@ -287,29 +290,29 @@ - + - + - + - + - +
 AddressAddress {{nodeAddr(nodeCfg)}}
 SynchronizationSynchronization {{nodeStatus(nodeCfg)}}
 Download RateDownload Rate {{connections[nodeCfg.NodeID].inbps | metric}}bps ({{connections[nodeCfg.NodeID].InBytesTotal | binary}}B)
 Upload RateUpload Rate {{connections[nodeCfg.NodeID].outbps | metric}}bps ({{connections[nodeCfg.NodeID].OutBytesTotal | binary}}B)
 VersionVersion {{nodeVer(nodeCfg)}}
-  Edit + Edit @@ -322,12 +325,12 @@
-

Notice

+

Notice

{{err.Time | date:"H:mm:ss"}}: {{friendlyNodes(err.Error)}}

@@ -341,39 +344,38 @@ - -

- Syncthing seems to be down, or there is a problem with your Internet connection. - Retrying… + +

+ Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…

-

{{restartingBody}} Please hold…

+

{{restartingBody}} Please wait

-

Syncthing has been shut down.

+

Syncthing has been shut down.

- +
{{myID}}
@@ -384,39 +386,38 @@ @@ -428,29 +429,29 @@
@@ -524,48 +523,117 @@