devicely 2.0.12 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/devicely.js +1 -1
- package/lib/.env.example +20 -0
- package/lib/androidDeviceDetection.js +1 -1
- package/lib/appMappings.js +1 -1
- package/lib/deviceDetection.js +1 -1
- package/lib/devices.js +1 -1
- package/lib/doctor.js +1 -1
- package/lib/executor.js +1 -1
- package/lib/frontend/static/js/main.96600727.js +3 -1
- package/lib/logger.js +1 -1
- package/lib/server.js +1 -1
- package/package.json +7 -2
- package/scripts/shell/android_device_control.enc +1 -0
- package/scripts/shell/connect_android_usb_multi_final.enc +1 -0
- package/scripts/shell/connect_android_wireless.enc +1 -0
- package/scripts/shell/connect_android_wireless_multi_final.enc +1 -0
- package/scripts/shell/connect_ios_usb_multi_final.enc +1 -0
- package/scripts/shell/connect_ios_wireless_multi_final.enc +1 -0
- package/scripts/shell/ios_device_control.enc +1 -0
- package/config/apps_presets.conf +0 -271
- package/config/devices.conf +0 -24
- package/scripts/shell/android_device_control.sh +0 -67
- package/scripts/shell/connect_android_usb_multi_final.sh +0 -67
- package/scripts/shell/connect_android_wireless.sh +0 -67
- package/scripts/shell/connect_android_wireless_multi_final.sh +0 -67
- package/scripts/shell/connect_ios_usb_multi_final.sh +0 -67
- package/scripts/shell/connect_ios_wireless_multi_final.sh +0 -67
- package/scripts/shell/create_production_scripts.sh +0 -67
- package/scripts/shell/install_uiautomator2.sh +0 -67
- package/scripts/shell/ios_device_control.sh +0 -67
- package/scripts/shell/organize_project.sh +0 -67
- package/scripts/shell/pre-publish-check.sh +0 -67
- package/scripts/shell/publish-to-npm.sh +0 -67
- package/scripts/shell/publish.sh +0 -67
- package/scripts/shell/setup.sh +0 -67
- package/scripts/shell/start.sh +0 -67
- package/scripts/shell/sync-to-npm-package-final.sh +0 -67
- package/scripts/shell/sync-to-npm-package.sh +0 -67
- package/scripts/shell/test-local-package.sh +0 -67
- package/scripts/shell/verify-shell-protection.sh +0 -67
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"iv":"e7fccfac1d49a1bbbb5cb8ea5aa4aba2","content":"bb29f9f6ffafe2acb858764e52d0f30858e2077174d2b69576a9fb3273f65690ecbbd945872905e7fe9625f4da1de8f9b77ca806ef949bb1c247b5447f7818c0f47f77b735c699dece441ca251ebad1c03169b6f3421009105a47bbf2cf98c2311a2b79967f45856a2ca0c980980d1bc8f0c30d38964da880d33277fc51539dd6f2c5af0ee79619d1ca4bc7834e030dce693904217be43c2236c7af3dbe0f737247fa6d3d603024a6a9dd2cdac623543fe1073f5fe6400ab1c85efc3e976a6b534774ff8c2fe3c1355b925d8c91fea30616b85c11762820604d063733185c1234604ebbef80dab831ce96afdd08f66d3297b50c5482f996dfde5b4918afe2bade8dbdbf8d6904bf1cfcbfc4878fb2fb5b7d33d9f9155495a1c6a1d4ddcbdd8e57448d1591938469173ae270035101d60b31f28f5ea5c21df4339c08006dd737f7dbaf4829c3579aa0a7097b64ec3f7629d17c5cfe069e0a33a2c3a8b4a48bbba0c6fc3b839df30b587e00ff956fe55cccf483629157b325ada628ca2ec3ea50597a1c12cc19d337a55707b7150e78ba3eb038dc4c0e460a1c88aeb6550498744e23eb0cb95dee10a2e2868337c8280d30ff169a26807557495cc6e293e7c845b8daa0d494aa7ae73dba4d728b343a806baa0d3e672a3d2ddd352d26eda9698aa380ffe69d10a536454cd1efc8d5f5c2333e99e877f468d6020c773c17bf89273a09548014d58483282618ab6768be8c599a82edb337df595bc6c924a2d0268efdecde41585b890a952d4784ccc6bb8728f5aa3a61570c0ece8d7daadd1dc499abf4f08af8821d36ff71b6c736988807516d2e90239822d5823fbbd13e8acc1fec03d6b6f2668bfc2ff2aa4004666b33d6f16414b60c7f6fae83894f23f4ec04529a785f1d92336c010ec3185bcc1d5deb4d84e9dbad97a6030fd5d25e3a8517c616455a22b18f02546b5ca330c998d1866b36a122379769b576344d04a419a2e33c7a2620ea78baa8e9bd47aab99717cf014fc9b6f25b9fcc73169043b83d4a90887b21a920bd6b6d365eeb91017a87721b57a9d6de301686a219d7006089568e65a38ab2851a95297afa0630591998d1c82a776716f56703d292b4fda50c2a13be9090d8a4128c06958a50bc972ee7c35741ba79cc6c6d592de5b4df101f5fdaf9f521a6ca6bbec7f819dc1f1192ac69fd60473ad37ca5c21a6b54a5177d6d52456d98957f425d97d82dceea30c682ff9c5f27460addc7214da44c5d3d0dbe529358ff26e500706d4e66af671c5b4d7db04c90def3f9f934fe8620f9ae0e3366c2d5e646b4abfcb947c55bb1050c21fd1b158cb84b27c180d01f62e5222a6bf36d8aa4a5e4859d5b7a36735e896bce24f6aa7f1abc03f5657ec032f797da3c2250e7669cf0dd451a28ec9733e22383acf2405186ca86d5ef6c8e92793dfceb5476e2cf710b7e4e9bbd2786590c8feba270cd97ccc259f7b9b854dd85eccaf8972e1402a6d8f004b9ee549d6098cd49c0454262447a2b856c9bc511415adf0cbe8c2f796b09fda23a4ca95b9fe2849029e147dc3adace7310412c40252d8341d57c2eb8dd3a2444aba6abf9235b15a20812652f18f19692e6de2dd6fbc24209febd91a09ce4838b9d6fa2a0f77294ef1db1092a26859c7f23820cb949a50514e57138357aee0ec7e0e0b45c3ffd40a1b8af3a71433d2e459bbf47bb724213588e0f8c4438762f4739a115fc773d4d4a19f705c29164db3dbd7d0cbc40e6ee388eb04ce793087ca882c950f0b63d681750c5ed507b37b0fdfb867cd42e89b051caba4e016334812b8cd1d55bb428cb9dbb7f3b458dabd68b18de23a8377343c58564620f5b2b3e7d808b9074aabd5c6ffd0c35aa3bd80989b7d343efef415565ea9291613dd2a374d9ed636a4742d0e41fcbe65a8814af2aad0c3b7791b9b9c0dbb4487950bf0742b0f7e725704bd9bce9b8ffa01682a9e6b853aedeeda46cdf5f25499f32be4f1f413e104e726f745f9f18242af44a5012ee252413f1a1f188c8e328fbfcb27e845ad3087cc232510cfb73cf4ae89aa6fb96046e5a8542bf11f6e37a5cb17ef3599dd9764f2a850c273f1f607215af7f3f0b3cedb5e366dbaa2e521a79afd88b39803ea2230d5a1d8196dbfa3d7c20f6352b8152a6529af3417c2e3e78020779e2717a885318e91d8ef087f0faba10d2c14d9546d543180fdf96c58cf7ed78b3ad18f107f4ba6dd325f0948711306b04dfff221994533f24d96022953a1701c82d14cf996947774ba038d9f55f03ce7ef4bad02b26789ad142712671b3197b54cc93f0eda7f82f1fd92037096910a31a1e9dfd1bf97464fa5be31c22b94230d5df9db37d9d6255163723269a0ad0cb09f835c415cf57ea38df7d657ac0f82da98723a005296d8a3154dea139d761e9fe4b3a0b92c02c38d52fa0c22c376171818eda48c6653cb5c030653ea29d6c70e48943d195ceaa51085dadb6297abff3086aaadd08a3ec823ce8855e051ffe0ab78342a7c9fe48e0dd80edf463e14529dce7dfda6b305f8cf3fc9bf9b1dbbd661dac8877cdea8a6a6e8ea4f6e6b55f89fc70594b38bb47a7c1ac6ee842883c70bdf03251888d4c0a3620e6f35b23ba58a7f28cff3aa67b6fbc6598160c6fb886d57d61c78e0f082c6f5e906b50a9e489ff60c381f6fa8c1f2013270c19f98b079c5074fdae6a26d124cd1a9c55983bf345c656c0493c0b43cce997eb42cfc96e633b2028398eacdcd0067d76a33873f0bc6de621b6a0261c1a23b942aeaf21b8bae1757524b98069b6ecc91dad22ba2ed5ab7a0e3d398979177c4338dc850587ad94286f39ae9705222dfdeee19cf7815da4b6f8fea9602503762004868415d75481df8e530746122ce1d9cdabe00aa797f89a2d7190c069e85cc4e038273dc03ede0c0938c96eeb38e804aab438a2a90ee1008de471a9ec25d27fab601976e474510956b4ab9e88a99d8426cd72b9cc3de931195bc5aa8c994d43f5776f7089d3f013900b7680a11002d4330adb3be619d4cf1fe13a5f0258e7b98925f704f5c291ce8f499d546cae4ed2ae7024544be235d5e521279c3b03fedbcc8892e357c1956ed5c24d1abda710c8f2f16d96d1fb51716cd79ac4cda89c2c1ff7a37bb056cb3724395f21a31abe667ba16433317a6678b6744e8cf94c323d02a19a4f84d7838e3bdfbe4efeedd490d12b24db895b62de800f4309501e21ee8ce814ad1d17fa6e7c46c39bb402cbe920932a5f0e70a3ac454d506c225eb810d71b65902578c8835b505bfb16d6e41da82ec929af78ad0d62720f265d80c1a2ca0943ba5df2835be5e63b9127cb1e8e83e23f69ef29304f035ed07bf7ec4b30fd38621f47a97b9cfbf4fff2463ea0f1ccf135bd7574482668d7acf7ee0c47bbbc9217d86299d686514f58c382a25eb3ecdef15542dc9cc61c86552daa053ab1eb314899887a8ee3ef868559cf2117b9b564207991a482bbb631da9d60e9881bd1f771937bfb340ef7d5d7d6028e8cb5df3cc3065f2ab48c209a70678388d149f052fdbf5f4717d56f92adcb15212591b2833085592f8376bad749c84d214b209f788b1b5036b04b793fd2bfed06175563305a0fc8762d0df7fce06c8d0fee427d4a6ce40999312345ea0570997e195bab5895901b8780bb75d5f7b8ae67e5217e10b5a42bb32029d7de62d0801cfc697f53539cf232af974e4fe01060da536213850040057f93479edd1c3b64f30bed12ca476c5acca8ca953f305d86838b3ddfe7209b7e8106f8e67575687a0733561a86aeece0b38bc29d25e162996edf0ba398ff555425c63c9b486af6c8b05f3b45ab19dc12671a457d33728c7a394bfc4531f46ea9dc57d71bc0eac339debc75401a7d692fbd8601a61dff372fa43ae0164c20d677cd0d77db35da8276007b672d16b90a5ad2cdf7c6b2e0a995026086a2be61760a13a50dc7cd98e16a649de0800106522eca9bd068545159084aa49df7d31849d0796ace9ea0da827b3def6c8cfb40431e3af5fc5a122f33c7ffd6f6ca00ad41a8452c507eff313bad3e70a86dba63ed70d6da69feed9599160a7fb742deb6e29db0f36975e1f94021e83906d375a082e731925466c55af8cc0d2e6636739c09f41a29279dcc8e3e3d33291b946cb093552156c28e2f0f3ff8238473a99946bc49a0d332d4de0c72ee003f79a1ed652b8e5a37b74fd4797631e0e5e460c57aa62683b5ea6af730b9ac9fc495aae58e0928c87e4e15b59813abab6f5acac09ea64845dd831060f7bbb70a24d10b3388817ef372d07ab28e260df862773c9655d97a5507111f95ceba1bc9f8104f949da089732f62cf37e7fc840bf747dd6569eeb35aecf54b29d59fd51de8622f18eefa05dade1e21b36959602cc9929aacfcf7d12bf0d82fb3655b089b10b227f2b0c43c2121c1426b2c1d59c53a646337eeabeaffb2e845dd50bd1985dfc8104cbad1f137ded9b598d00518ff65a27070b118963967f22daa2fec7e04ce70dc916021c972e90f87975bcd26f2e46bd9c549e2f20bb8488ec129ea36b095659aa0cbbd59b63940567ebefba16395cf71061bef7fc4da14f354eb8723543fb6963731513d4a45fd409cbf47c89e47595f48d95724a11b5b9db2f5ac75bab9d50d17d1367650213e777fcb8e49cc2d844294d4a9bfec9479009932d3d8336bfc970e98f5fead8a8e6b26a14af83eb4fc95b8eca76f5b3bdf85001fc7209f7c282996a263731347d54a8483b6fa5d25a594762ecdc83cb2c548b65593f431639ea87195c36962d05cf3d9a7361c89f0bc1829641a4d220fc0e28fa099f5382d765f9b4c06e862374cae20439b6e366d51d92d0adc7cd9bc1d34c358ca5c6bebb6afc0f26a6bfa16b9eef498ffb89900fec0b3d5987c5a9b56782dd520cc116efc513f35bac9b288039d48860d9166a84f5fc32a0bf01ded49a340c230e37ea2a690d7f27e41dc4dfc1f5f290e34ea3212a2194e4ff4bacfa4597050ad3e9c4c1e5f0cadd386f9e62bfef9af66c2024f8e8e1633f306a77b0fc168d8af973b62b7d6773ade3fb0efa6c8e65a79eb198a066a18e7b231dece245af1224bd95db22c0e2a395397b446367e18b42167eafa4e8789e902b0890d39254b825397eaa4dd2bda7b96e608009cb1837ce72bf9ff7a6971f14933d2279a9bf784adbd8fc908b2c5f81fff78c66be4cf34495e2f01385b9244a1fef765c21e07bb6a893e344edad2aa4485eb5f45f52900a8f54f55efcb1141900455e25174aed03f5bf83d404412a7086b8c5497acf6add5132a0a372bf2e1e63918f07d2495f15240074fecf02a1c1b341571146baad672d018860ff879e661be142db9e2d357f7dafc5ff8cbe3a77f5cde4261599878183c1f4eaaed7de683fa54c5e0c166adf9977851225a93ee40757c1a88016074bcee8289d8e8029e84d565aab4d3bf8fdfee597cb1636ebed316f42191752e14e69447cdd72c213bf8e93974cbdf3712a90db37e36a019c67c983a7c3acf3d8339967c6cf59e8d166416fb04e9c1fb9a466c0e991cdccb64dc0422a5dee981bdc3c34a70213a7b9e69730da1f7253bbfd3369051aa1634e8e8a4819acca7ab6a06c335b85063b28fcb75920a4aca8f7006bb7dc5d3cc79b88ee2e8dd676a5a11519a5eb8084466c95a0bab4565b79ec8a4fd9f48d350306a1eb01452fda1c74bd85e7e133ea6e54f9ca697dc75d7bbb54dd5f4938d034c53bc6d721e63ffb5c1e035939be54060ade5225bf2ed9beec43d81e0a60a6cd61db3d21f104de83bf14916e61963ff3255d97b37bb2479190615cbad13403ccbd4a5794faf6ff1feb3f5c6a55c82077750ed0c65e08b591ff7ab408d46b0d47fde298ab825d02c0d4164ef6219af1f42da42e5626108a53b875e6cfd129858437b64a1d0bb2e34cb343f12e83ab68f41557adf76af84d844662b1c409e38d0da3fc181a1667d11a96d1a4c775e726ce675798ad1c50bd350867acab3cc0629148f5a3f5da7b4ac49c0bd3d0cd7bf93b07ef8b23af9b4ebfa6c331b3a66d28d613a5d21793c4d25f555497d37d8b6bc918d3ee69699c8e7f96ad5656bd95230cc03c714ca45555f87e961ae790a5ffc3256e47b38ccbe549bf5c6a817169278e329a412d4da76a9b454d727b58b28ab2afd603a22d29d95b3f57b5b62ec167d82acd8a9c5584c045a01e1ee9497e9324cfd576ce03ca10b761887730006ab0468c0326b7793019642532d211e7409b630344f5ada0f26fdf5aec77d201c8d5b5a7ece51e4168f559b2032626af30f7a1ce2760893fe3a0c253c9e43cec5918ae92d8b6ab848169048bc288b0c6e10a38222642a5600bcc47aa57b785f32dc837eff2e3e553eafb141490e9d5b468b30b42eda3b97a16c4a4861875e4e0dce1beb01d5f926210c48ec4c197d68c51f125d25eaca78f9436b87a7141c2005d71afbceae583d20e0a61e8939e51fe02cc9261de89ec78551449550f564d790226e33b530d3f06bcf1f0334d167be2c2db00610f5b247f92c6f760e8b7dd39ae80bc8c7b3246987e3dda713d45f2116343b635740859fcc37f10362e60f2b77753aab3f778d1d267fdd441cf2419702790f1566c67d61c054272026e35136873add86a7f9f6f18179f0b976410a4607615763001bd9247605c627fa8addb896a54ae38704aaedeb227a13fa2bd3548599a6cf06f69853969fc073ed0274023bc56c82f680e212a3473c268963649db42273f49b5fdc9d620cf0ad31976078f05fa5802fc4652ddff4441881312210be7c681ebf3e71fe71b6a26467eaefb6d8725a6653ec9ed9ad915f3c8bde9de422bc0118dfbbe9c45e39dbf289ba9fb8d95e4f75682094637bdae92671a8618634c3691d4beb1b59422cff1d99f20f05afff535d14a44ca4c9b733a7d24e0504c16f12d147641e531897ac4e945e0366616452a175ae320424814047eb997ead475cb64c8dc4bf7f6e7ae42052597e6453d1becf694358d6272e2d33607618405438d156e1dde9ce3b518261b6aad799026edf7a4a3b17c4d1a87715cc0e83b4cdf9b19625b76504f9589a94d4e206b28b9f8f82ae502928f66ababf7ef633e37b3fd3e3fcc1fc4807d3424d7d3f1f91341402ae47f2ddf3cb1ccede0005cda24524e18f3d1ed3a4a572e4a9c709457bece17272453afedf3dbe7f915b8282db445de12d3206de83c4f9e936dd6edfd7d835c35f32b57b0a534aecd565f7335add381a4e23f70d9d6ece4d7a016622cc0c04f22b43bfca9ce085111d91468b82f313d34c6508cdfa42335a6240e1684346222f44ddcf2275410040473b61369a3cd13fc951d636e596cc79513667650d29c2ffc4278dfe98f036b8434a5560960607badcd231842592138e3f1251831912b5d5ef76eda445912d3f6b304e060613633d3acb7b33f2aeb3ea505be4ea0cfff7f27b435390c0cccf3da6934c945ba2f9b41ac0e691c08e6b496f211d207d0513cb2d10fedee6333e772a4658fd20f04657589920922291a8083521aaccd4c4a612ce04f82cd4a6717bc40a776dc3c142c1f7037114098bbe5adcc7728881143d347d72b74ca6f6637679cf53acef06b8a44f42a6517c01ea174e0db7965442769f68712a6112129b23730fe70f774857afd78f7269a356defaa38f4315d4251ab54425768efc5d9be4b99a8790e8db810c1071aefd631dab17e26d6300d9d15dd79f5383461c78c1c17d24a0112edb3be85a675a703342572c6e49e7376095b7ae8c9ac8a2a474f39f89e6bed27ce147a0ed9a0ac95e53c951e0750ecd358c52fe18087f83619ac94eeacfefc02a962dd5334e6b2c30ebfd1aa2edc613f7d33750c9b8179e6c516f9afe501c9a261acbef3aa40e76994cb0d6e009c30fec06128589c4216be89d27308b04471666454617eef52cef09807ffac5317368d7e8f97853779ff592a01a9914d5c7a81102d4ac1d43c84c323002633091efe4d7245f3f5747f377c37ba799881f47b124c05e65ad544b6b889a608458c4cc042274b61d29fed50e8854ffbf4c2b649d2eb12fc94abcfc319cbab9ab98737d1de0899f235f139e86446dba63bb8c3de6414cc8aad988d17225df88ae32a37c462c11e7b93b044416451180d151f11e6d53c8e022bb5a60dfdc284f148fca2b6ac881a1d6c73167613a2513ec72ed7bffb51826b76e02e87b0879a34e41ca2bebe995ecf26d12d3b5b4c9f3ba4626d8b2ed99c0d21f59ad859e395c10d48235b4fbaf2d2f5daa74b27a4ad64b9905ebd07f7aba240a933a19b060e193ef0cd9def6d95fd6cdb42fcb0108c5e2919084f43cbb4b3c9a89eb60af1dedad8ee21239f23aacf573a3fc93dd29c5a5a94ab84b785f23f7c15f0ae04b06c7fbcbecf8530ff3563a3731dd03333416863b87d7d5fef1000b80568cfdc857944b5e383e9a62eecfb1c9b8c87b57c9913df87caf6ecdecfaf79c310b5c3e1f3a81ebc3f7b41e1ef2a575d70205733cc3df972f386d518b73e5490d4ab8ea6f02225c54067cc29c613016115b9207143036f8de049ab14700efe3784679a3b1c3f20501332f7af93249791da832a1a0d8f046420f452c47855a879b7cac3f0ee34e83428e94777672554507b27e21d2fb9c2cb562276496dbb42bd10756534c8d171c201577cbf69d5b2d9a807f7e309133928e90544c6c0e7115f4ad7e0d74416ce52028439564ca6ac8a97387816e2ef8732e9339da5c98ec7c9ea1928db4ff404064426ce00c5be9c17032d5324560d998baf5ff345aedaeacc181af9850554cb5f142046b8469809885c61a9c062dbc88a9402f71b04452a47fd101ea826063024410b33fe2c4ca5ecef29887bc3a0d0301450e6869812b358f1edc294ab17421e5ab64f11f0db74275186f26f3a6b6851ee5ad0be0a8ddc33334dfbb4d6d385b00f6980b6ed986aef8d11e7110d36a05c274cc1dae5d8a177545078dd2383fedcb934cfb9ed3c2c8874a51798774c7dc631ae9423d164a3059eb678fbcaf49f9ac58616ff066cbbce2edaf3ad0aae56aa79fdaac1b76c0fd42e8c91b267203cc982789e4048fc2a1aec7259116be531c59afdd08076"}
|
package/config/apps_presets.conf
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
# Platform-Aware App Presets
|
|
2
|
-
# Format: name.platform,bundle_id
|
|
3
|
-
# Priority: Most commonly used apps first (system apps, then popular apps)
|
|
4
|
-
# All apps support both iOS & Android (cross-platform)
|
|
5
|
-
|
|
6
|
-
# ============================================================================
|
|
7
|
-
# SYSTEM APPS (Highest Priority - Most Frequently Used)
|
|
8
|
-
# ============================================================================
|
|
9
|
-
|
|
10
|
-
# Settings
|
|
11
|
-
settings.ios,com.apple.Preferences
|
|
12
|
-
settings.android,com.android.settings
|
|
13
|
-
|
|
14
|
-
# Camera
|
|
15
|
-
camera.ios,com.apple.camera
|
|
16
|
-
camera.android,com.android.camera2
|
|
17
|
-
|
|
18
|
-
# Photos/Gallery
|
|
19
|
-
photos.ios,com.apple.mobileslideshow
|
|
20
|
-
photos.android,com.google.android.apps.photos
|
|
21
|
-
|
|
22
|
-
# Phone
|
|
23
|
-
phone.ios,com.apple.mobilephone
|
|
24
|
-
phone.android,com.google.android.dialer
|
|
25
|
-
|
|
26
|
-
# Messages/SMS
|
|
27
|
-
messages.ios,com.apple.MobileSMS
|
|
28
|
-
messages.android,com.google.android.apps.messaging
|
|
29
|
-
|
|
30
|
-
# Contacts
|
|
31
|
-
contacts.ios,com.apple.MobileAddressBook
|
|
32
|
-
contacts.android,com.google.android.contacts
|
|
33
|
-
|
|
34
|
-
# Mail/Email (default)
|
|
35
|
-
mail.ios,com.apple.mobilemail
|
|
36
|
-
mail.android,com.google.android.gm
|
|
37
|
-
|
|
38
|
-
# Calendar
|
|
39
|
-
calendar.ios,com.apple.mobilecal
|
|
40
|
-
calendar.android,com.google.android.calendar
|
|
41
|
-
|
|
42
|
-
# Clock/Timer
|
|
43
|
-
clock.ios,com.apple.mobiletimer
|
|
44
|
-
clock.android,com.google.android.deskclock
|
|
45
|
-
|
|
46
|
-
# Calculator
|
|
47
|
-
calculator.ios,com.apple.calculator
|
|
48
|
-
calculator.android,com.google.android.calculator
|
|
49
|
-
|
|
50
|
-
# Notes
|
|
51
|
-
notes.ios,com.apple.mobilenotes
|
|
52
|
-
notes.android,com.google.android.keep
|
|
53
|
-
|
|
54
|
-
# ============================================================================
|
|
55
|
-
# BROWSERS (High Priority)
|
|
56
|
-
# ============================================================================
|
|
57
|
-
|
|
58
|
-
# Chrome
|
|
59
|
-
chrome.ios,com.google.chrome.ios
|
|
60
|
-
chrome.android,com.android.chrome
|
|
61
|
-
|
|
62
|
-
# Safari (iOS only)
|
|
63
|
-
safari.ios,com.apple.mobilesafari
|
|
64
|
-
|
|
65
|
-
# Firefox
|
|
66
|
-
firefox.ios,org.mozilla.ios.Firefox
|
|
67
|
-
firefox.android,org.mozilla.firefox
|
|
68
|
-
|
|
69
|
-
# Edge
|
|
70
|
-
edge.ios,com.microsoft.msedge
|
|
71
|
-
edge.android,com.microsoft.emmx
|
|
72
|
-
|
|
73
|
-
# Brave
|
|
74
|
-
brave.ios,com.brave.ios.browser
|
|
75
|
-
brave.android,com.brave.browser
|
|
76
|
-
|
|
77
|
-
# ============================================================================
|
|
78
|
-
# COMMUNICATION APPS (High Priority - Daily Use)
|
|
79
|
-
# ============================================================================
|
|
80
|
-
|
|
81
|
-
# Gmail
|
|
82
|
-
gmail.ios,com.google.Gmail
|
|
83
|
-
gmail.android,com.google.android.gm
|
|
84
|
-
|
|
85
|
-
# WhatsApp
|
|
86
|
-
whatsapp.ios,net.whatsapp.WhatsApp
|
|
87
|
-
whatsapp.android,com.whatsapp
|
|
88
|
-
|
|
89
|
-
# Telegram
|
|
90
|
-
telegram.ios,ph.telegra.Telegraph
|
|
91
|
-
telegram.android,org.telegram.messenger
|
|
92
|
-
|
|
93
|
-
# Zoom
|
|
94
|
-
zoom.ios,us.zoom.videomeetings
|
|
95
|
-
zoom.android,us.zoom.videomeetings
|
|
96
|
-
|
|
97
|
-
# Skype
|
|
98
|
-
skype.ios,com.skype.skype
|
|
99
|
-
skype.android,com.skype.raider
|
|
100
|
-
|
|
101
|
-
# Microsoft Teams
|
|
102
|
-
teams.ios,com.microsoft.skype.teams
|
|
103
|
-
teams.android,com.microsoft.teams
|
|
104
|
-
|
|
105
|
-
# Slack
|
|
106
|
-
slack.ios,com.tinyspeck.chatlyio
|
|
107
|
-
slack.android,com.Slack
|
|
108
|
-
|
|
109
|
-
# Discord
|
|
110
|
-
discord.ios,com.hammerandchisel.discord
|
|
111
|
-
discord.android,com.discord
|
|
112
|
-
|
|
113
|
-
# ============================================================================
|
|
114
|
-
# SOCIAL MEDIA (High Priority - Very Popular)
|
|
115
|
-
# ============================================================================
|
|
116
|
-
|
|
117
|
-
# Instagram
|
|
118
|
-
instagram.ios,com.burbn.instagram
|
|
119
|
-
instagram.android,com.instagram.android
|
|
120
|
-
|
|
121
|
-
# Twitter/X
|
|
122
|
-
twitter.ios,com.atebits.Tweetie2
|
|
123
|
-
twitter.android,com.twitter.android
|
|
124
|
-
|
|
125
|
-
# Facebook
|
|
126
|
-
facebook.ios,com.facebook.Facebook
|
|
127
|
-
facebook.android,com.facebook.katana
|
|
128
|
-
|
|
129
|
-
# TikTok
|
|
130
|
-
tiktok.ios,com.zhiliaoapp.musically
|
|
131
|
-
tiktok.android,com.zhiliaoapp.musically
|
|
132
|
-
|
|
133
|
-
# Snapchat
|
|
134
|
-
snapchat.ios,com.toyopagroup.picaboo
|
|
135
|
-
snapchat.android,com.snapchat.android
|
|
136
|
-
|
|
137
|
-
# LinkedIn
|
|
138
|
-
linkedin.ios,com.linkedin.LinkedIn
|
|
139
|
-
linkedin.android,com.linkedin.android
|
|
140
|
-
|
|
141
|
-
# Reddit
|
|
142
|
-
reddit.ios,com.reddit.Reddit
|
|
143
|
-
reddit.android,com.reddit.frontpage
|
|
144
|
-
|
|
145
|
-
# ============================================================================
|
|
146
|
-
# MAPS & NAVIGATION (High Priority)
|
|
147
|
-
# ============================================================================
|
|
148
|
-
|
|
149
|
-
# Google Maps
|
|
150
|
-
maps.ios,com.apple.Maps
|
|
151
|
-
maps.android,com.google.android.apps.maps
|
|
152
|
-
|
|
153
|
-
# Uber
|
|
154
|
-
uber.ios,com.ubercab.UberClient
|
|
155
|
-
uber.android,com.ubercab
|
|
156
|
-
|
|
157
|
-
# Lyft
|
|
158
|
-
lyft.ios,com.ubercab.Lyft
|
|
159
|
-
lyft.android,me.lyft.android
|
|
160
|
-
|
|
161
|
-
# ============================================================================
|
|
162
|
-
# ENTERTAINMENT (Medium-High Priority - Daily Use)
|
|
163
|
-
# ============================================================================
|
|
164
|
-
|
|
165
|
-
# YouTube
|
|
166
|
-
youtube.ios,com.google.ios.youtube
|
|
167
|
-
youtube.android,com.google.android.youtube
|
|
168
|
-
|
|
169
|
-
# Netflix
|
|
170
|
-
netflix.ios,com.netflix.Netflix
|
|
171
|
-
netflix.android,com.netflix.mediaclient
|
|
172
|
-
|
|
173
|
-
# Spotify
|
|
174
|
-
spotify.ios,com.spotify.client
|
|
175
|
-
spotify.android,com.spotify.music
|
|
176
|
-
|
|
177
|
-
# Apple Music
|
|
178
|
-
applemusic.ios,com.apple.Music
|
|
179
|
-
applemusic.android,com.apple.android.music
|
|
180
|
-
|
|
181
|
-
# Amazon Music
|
|
182
|
-
amazonmusic.ios,com.amazon.mp3
|
|
183
|
-
amazonmusic.android,com.amazon.mp3
|
|
184
|
-
|
|
185
|
-
# Hulu
|
|
186
|
-
hulu.ios,com.hulu.plus
|
|
187
|
-
hulu.android,com.hulu.plus
|
|
188
|
-
|
|
189
|
-
# Disney+
|
|
190
|
-
disneyplus.ios,com.disney.disneyplus
|
|
191
|
-
disneyplus.android,com.disney.disneyplus
|
|
192
|
-
|
|
193
|
-
# Prime Video
|
|
194
|
-
primevideo.ios,com.amazon.aiv.AIVApp
|
|
195
|
-
primevideo.android,com.amazon.avod.thirdpartyclient
|
|
196
|
-
|
|
197
|
-
# ============================================================================
|
|
198
|
-
# PRODUCTIVITY (Medium Priority)
|
|
199
|
-
# ============================================================================
|
|
200
|
-
|
|
201
|
-
# Microsoft Outlook
|
|
202
|
-
outlook.ios,com.microsoft.Office.Outlook
|
|
203
|
-
outlook.android,com.microsoft.office.outlook
|
|
204
|
-
|
|
205
|
-
# Google Drive
|
|
206
|
-
googledrive.ios,com.google.Drive
|
|
207
|
-
googledrive.android,com.google.android.apps.docs
|
|
208
|
-
|
|
209
|
-
# Dropbox
|
|
210
|
-
dropbox.ios,com.getdropbox.Dropbox
|
|
211
|
-
dropbox.android,com.dropbox.android
|
|
212
|
-
|
|
213
|
-
# OneDrive
|
|
214
|
-
onedrive.ios,com.microsoft.skydrive
|
|
215
|
-
onedrive.android,com.microsoft.skydrive
|
|
216
|
-
|
|
217
|
-
# Notion
|
|
218
|
-
notion.ios,notion.id
|
|
219
|
-
notion.android,notion.id
|
|
220
|
-
|
|
221
|
-
# Evernote
|
|
222
|
-
evernote.ios,com.evernote.iPhone.Evernote
|
|
223
|
-
evernote.android,com.evernote
|
|
224
|
-
|
|
225
|
-
# ============================================================================
|
|
226
|
-
# SHOPPING (Lower Priority)
|
|
227
|
-
# ============================================================================
|
|
228
|
-
|
|
229
|
-
# Amazon
|
|
230
|
-
amazon.ios,com.amazon.Amazon
|
|
231
|
-
amazon.android,com.amazon.mShop.android.shopping
|
|
232
|
-
|
|
233
|
-
# eBay
|
|
234
|
-
ebay.ios,com.ebay.iphone
|
|
235
|
-
ebay.android,com.ebay.mobile
|
|
236
|
-
|
|
237
|
-
# Walmart
|
|
238
|
-
walmart.ios,com.walmart.groceries
|
|
239
|
-
walmart.android,com.walmart.android
|
|
240
|
-
|
|
241
|
-
# Target
|
|
242
|
-
target.ios,com.target.mobile
|
|
243
|
-
target.android,com.target.ui
|
|
244
|
-
|
|
245
|
-
# ============================================================================
|
|
246
|
-
# TRAVEL (Lower Priority)
|
|
247
|
-
# ============================================================================
|
|
248
|
-
|
|
249
|
-
# Airbnb
|
|
250
|
-
airbnb.ios,com.airbnb.app
|
|
251
|
-
airbnb.android,com.airbnb.android
|
|
252
|
-
|
|
253
|
-
# Booking.com
|
|
254
|
-
booking.ios,com.booking.BookingApp
|
|
255
|
-
booking.android,com.booking
|
|
256
|
-
|
|
257
|
-
# ============================================================================
|
|
258
|
-
# FINANCE (Lower Priority)
|
|
259
|
-
# ============================================================================
|
|
260
|
-
|
|
261
|
-
# PayPal
|
|
262
|
-
paypal.ios,com.yourcompany.PPClient
|
|
263
|
-
paypal.android,com.paypal.android.p2pmobile
|
|
264
|
-
|
|
265
|
-
# Venmo
|
|
266
|
-
venmo.ios,com.venmo.touch.Venmo
|
|
267
|
-
venmo.android,com.venmo
|
|
268
|
-
|
|
269
|
-
# Cash App
|
|
270
|
-
cashapp.ios,com.squareup.cash
|
|
271
|
-
cashapp.android,com.squareup.cash
|
package/config/devices.conf
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Device Configuration (Auto-updated)
|
|
2
|
-
# Format: device_name,udid,ip_address,platform,type
|
|
3
|
-
# Platform: ios | android
|
|
4
|
-
# Type: usb | wireless
|
|
5
|
-
#
|
|
6
|
-
# 🔌 USB DEVICES: Automatically detected and saved here
|
|
7
|
-
# - No configuration needed for USB connection
|
|
8
|
-
# - Add IP address to enable wireless support later
|
|
9
|
-
#
|
|
10
|
-
# 📡 WIRELESS DEVICES: Manually add with IP address
|
|
11
|
-
# - Format: device_name,udid,ip_address,platform,wireless
|
|
12
|
-
# - iOS: Device must be paired in Xcode, WebDriverAgent running
|
|
13
|
-
# - Android: Enable wireless ADB first
|
|
14
|
-
#
|
|
15
|
-
# Example entries:
|
|
16
|
-
# MyiPhone,00008130-001A45C83ED8402E,,ios,usb (iOS USB - auto-detected)
|
|
17
|
-
# MyiPad,00008140-002B24361E41901C,192.168.1.100,ios,wireless (iOS Wireless)
|
|
18
|
-
# Pixel8,1A2B3C4D5E6F,,android,usb (Android USB - auto-detected)
|
|
19
|
-
# GalaxyS23,ABCD1234,192.168.1.150,android,wireless (Android Wireless)
|
|
20
|
-
|
|
21
|
-
iPhone17,00008150-001058D13478401C,,ios,usb
|
|
22
|
-
Pixel Tablet,emulator-5554,,android,usb
|
|
23
|
-
iPhone17,00008150-001058D13478401C,10.28.127.167,ios,wireless
|
|
24
|
-
2109119DI,100.84.68.240:5555,100.84.68.240,android,wireless
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Protected Shell Script - Devicely
|
|
3
|
-
# This script is encrypted for code protection
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
NODE_BIN="node"
|
|
7
|
-
|
|
8
|
-
# Check if node is available
|
|
9
|
-
if ! command -v node &> /dev/null; then
|
|
10
|
-
echo "Error: Node.js is required to run Devicely"
|
|
11
|
-
exit 1
|
|
12
|
-
fi
|
|
13
|
-
|
|
14
|
-
# Decrypt and execute
|
|
15
|
-
$NODE_BIN -e "
|
|
16
|
-
const crypto = require('crypto');
|
|
17
|
-
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
-
|
|
19
|
-
function generateKey() {
|
|
20
|
-
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function decrypt(iv, content) {
|
|
24
|
-
const key = generateKey();
|
|
25
|
-
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
-
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
-
decrypted += decipher.final('utf8');
|
|
28
|
-
return decrypted;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const encrypted = {
|
|
32
|
-
iv: '455b5e3bb766808b1acc33a302de1aa3',
|
|
33
|
-
content: '7c868a5aea3ac9ae07f421595f10f0dc4642de7b475a4024f1e94f960ea4b14dc1cb53982a1bbdca3868b16156d5a01a9c1a19af307217829d2288977affae192cde728deb1b4819bb8ebe4ace229eee0dd55acc2a13490a4df55a85d9b4b3e49af374248a3a8ffa46b652601c8d50ec84cbf2d1eb2cf62f1f0d24bee23193c7fdd8127f8459513bcf4d1759ee3c47e6998ebbf21ad24977121117e955780546151ade1b6c81332712c44afac13d65ddc48349b7ec8910dfdc0d04619b55562774e1920ed9ad89ea2b8ba3d77140cd8babcdacee9ec9b8b0d7766dd44690735f9f5efe9731325516dd13dbcf6e1b4b6ef2a43aa16ce49a2143994b18cd7d8e7ab9d0369a065f063520e1b1c80758b1692bda5bcbb47a147565efef25e6c95dddd56b32c8ff3225f8c2ebf63a711dcbeccec041e582cc2bd8576f9ad2864676d9726f74c52249a11143a8fe6763e4d4be388ea0211921d612c2a2947c09717bb01e7c9c34f9de71c8d8d6ce92b25cd038ecc635b9576a98192859024560cad23429d0770e241ab693c6c24030d4771c2a7cd769e40cde50079dff500023b512b87376aa0d8c0859187a6bf3927fd6cc557f041ac242917228f286f0896543d05740d6479e1205319d2cb06cd01185dab292c5e4cacc1b829428716ad9804ec2866e80594b9874a3255dbc3880ca68efef6ab11edab04e4afd3376c84671e70516fe2c03562006649bd0166bb591be7dea87a98ae098a3110663eaae9ca1129ac5d8eb2615670528dc1b91d37de38751878f04c5e86c255b10cde07ce6b9c5dd53752b87f0331261460db2fa8843ba4174e44ebd73e38aca5536d45e40eb76fb25449c06551bb143bb5a8bc46082c0c566e88a6cd0395fcc5fced296b547c2d77f05bc173302b174813e8a1c1df0d876e91f4cd0f6962244d312d37edceca477ff565fdab8c20cc650888f15a2ca2261e976f38dc0ed36c7d6c4d3d2078cf3ce02106abf2b456d29b4e10c2eaf2b9ae8031fcf65690641274a3ebcc6254e61dca03e6e44f49dc89e5c06ed73548653b3180075f12e3f6d0dc918975c23ddafff9e4c84ec4a3f9453fe58a79ce4e7edc68250b5299b385a24a852c7eec5b58572e5ac91e5d69c2b23c6a07ca5581c535b2a8d0b327b6efaf5cb3c7f3b96c74fc69a6e27f3045aabb94c86d3ba6e20c5679568bb9863723a66b43ec283035e1b94f2c6ef324f5e12fcd55a5346fc6c255d64b18c3edcb2caa4bd1ee80d1f265c9f6efbecfc3908796d97e8f024d1d2a0deaa9a807b2f41e960f72d277a53d779ac8db5fb9812bcb1eaa5e2f453d2de776d57850eb370fd3b8af6e20a305ef1932a9e28ea2e096996fa30dd237a606bb2e13b86d36497ee8bbcea472a7799b658e6facbfce4fb4539f8b70833dcab3475cf4984bc893ca76c44ce94985d56caa9832c82469bfd98c9e64fdfa0d68b6be4b06c5233cb90a968f35f2f8c80068dc69cdb8ab80bf0df86a4cee9a9b9284774056ea0a508bd66f466311908556354fcc7cc97caf5bd5a27a088146d87a98dd65bf23b297f9fac747dc687e2901442f25124f1dd18f1d0b231852656eee87b78a396a35847c9ae5c30ab1ca3207ae0f79c8ca16e57a094e9cdef803606881b331e7ff4032d68ff32ba79f269a1ed7caa70b2021000b1317ba7ccb4dae5e715f51302fbf243c6255040106f2660f00d6b2ed3904cb7074e6f90abc4331a846c7c2f13dd3c645b4dfa60fe8717ba0191faa26e53fb8a148822c02017b50aac53ba3002c5c6119f88b631733d072e6ec6f15427426a413ae2b08cdcf9e21a73763c81f516b793ebfa2389b5b16bd08700c365af15aec85cba0f09ebc180a8c27de60aaa0281aea1b8f41d05d9024d0d85b07b3ff0c7ca0342c143c8d04fc52ff8d8fb53e053913366384471850bfc69e7b87fca79e34516a5cb4d0478f0cca67394baac7ba7339508b35fd6d3c25e1abbf98033f7981f36d40755d0bb9edd2640e0d2ecc2bf4548514ecf930a72f1ac9ec6bc8575fa48af5f33b65c3a72f71e9d11d58450ccc04656c28e6aec2dd85e8341e551e3dd3d06a64daee1413abb492bf6c417c2e9218e1b1e77a8d9c243951418eae006ef43f0cc4be441fd4c29d219145ff703fc76924cef903425ac7f6be95557a0fba44c48c850bbf14ff625234cc968d679161081770d7396721bf4f838b18bc023447ce274d319af49bac67cc854ec2fcfcca901d85f99bb6792eaa65d14f66ad537f26f5b4d4bf137e4f7a4130b46d298ce3d140d065cbcb2981b1a2a6b67043ffc763655637a66448f0bcc3185558724898f71627ca6945deae7efc678936576e35eccddbb3d43be176fb2f28c2d7b0f72316c615fd87a57ff257cb12af50de2ccc7a05fab446e7f05ac073354b7f68c04907a805f6033a972b252f0fc7e883d79df39dc4e73e91261cb5a6ecd20b1ebfaa30ad32f2a32ab65dd97822dd70e69881e6e6c8431993c12f07c2eb0a3a87b746269045cf4028bdd641cf67d75f7e2057fffc447e413bbebb1823daf2d3f02e6bd2d2895f4a2228f45a6d735c5475f0c997d463169d7d166a2f1f55689068e7ad9593185657a5064deedf849530e7b8221ae5383e329f6ef380189dc05f2bcf6a44b37dc6a42595b19ddf73ad04a14d9680fb01b7af4cb869051ea2ab3234c59f53a10709e1ec1735e280dfeb01e41c5c978828c348991d3ba49deaabc0254f83f850b5b3a3639e33a501121613b6f05777b9e78d7031fe3b0874df9a578ae66f1e7e261ec4502b01777b81617f7900b3333f99f578e2d297367ef166df94efd457087e4334384b19ef4c08a296fa4dc9bf90c963bf4e5c9a5501206699e8002b5290903674562604b704d370cfab4ba9070fc997a194b322e30c39767dbd6b81155732bc1e454a1e423dd0c278fd6b15b5351373240f20a5ab185b962fb515d29bb0ff7538b9e997864cbc96187398921d47ca6f29c2b3c2a6441614c04806bc068930d06c06a765f385fbe9949d3393c55393f52383fae4d012db8252e18e8ba9594e4f3a42c7058ebbe588da1dcd766895c182f03aada9fe9b05ea70fa5f52b9b775c928051b43f508bc77ebeda0c5a5b8ad8e334d5636badee61e39cb692bf3db5f636d804a57a8c61f6b40fe64a34bf0cf87889270b8fa69fa85103dc28d71ae22e74f051bdd1a7c9d8a55d2e8db84328a6765ca3058063c89546032bf85a0440907b77b4ef007545cb58c1b7801f162685c72b846fe31fa5df6eacc878006c318e5a8a5a35f73ba9cb746bba227fc712414a7e6a7da33ca50fa9e8a32039783ef6b297ff825364b81a432fdc4aec65654c74f6ba3909d2f623a9933bf956e7b9526f145075b2086a617d89d2b2a2ac3cf271dae20c62e0e7014b387732f9b4e617714f08dd2137a733d0a258fabc75d62f207aeda32c8983ad4abc36d04cf6ca565d3cebcbacbbf09926d3e2018d50bbe0775e55a9961ab2e8f2786fa42678fe79261e7c2c3b97a4d4711c8cadaa07323676808af0c6544ce0472f2c57a2dd3279fd29b62ca8e11bc091c61de85e25d174bb62982e5cbdb423b9f0857de6c6ea66844bf7fb2e85c9df6d752afab9a398bb38a95562b67b65f69e650eee9491925cd385752e0aee44766ffea484f937ee72086200483981cf9bc73862d98309db844f1e2c5c3a69dcc24c47bf32b2b6388c77833dcaee2623f3a9e0ca9ca2aa82494fe4433475b6c41cdf51dc39f31aa19ff043a715e59056202f2610c3f9980d6ba23aab95bdcec4bc0986ae6a0a62fa5a8175798e2bb46e2a9e59f033d4fa75385b6107ec358e4371fd03c9078a01c6659ddb0d2b3d8959e9cd87f3b41e108264f686c24164156c51f5f1c37dcfcf92a263eeeef18124953eeaac5f159a65a8587e6b3f4dac2292b6122254277f40dfe6c91717fdf96d8a2a472cc348a643ee0c29a2cfff7c2f243bbdeea37040746c6192ede5ddb78faaa6b3e213a5ab08ff374fd1480bfaa03ba818f357ecccbb8f2867564e17bb3657c3dd0c77fcb835ac3e95453478b3e6d2038373c0c74bf8650d4f15818b2bf527f154117d7ba603ab41c3fe3004cd627456e9041f2bbff42ad4f5b2414bbb505f5fea0a369b28b81d81ce54c5d7bfb9f1b0d54f7fb1a94084f3e5135d78755f94850e4067e6147890e77679d72a459a7fb0e18febed0d94f1fcc2c862a94fab6ecc3dde0de13c7e2cd20d28a1d79c3014acc165d3eaf28007dfc759d915f76e2349f16dc9492510c3c5e00ac7c5f3d99424bbce6b22220a426dcbad2820ca3db6955fdd044e667020f7740c1a77bf6100ad1389df40d7b6952b89b4b6c9e6739163328fec5b2036a413656921b5599b07d59feea4d787255cc4e29af5138cf8416ca517ba0ec399be2c109e02778190f7dfbf6e4499c0f3b30ce44f6d0d208143c8af689240568c9f3f2934dec547949b0a8e5369c0bb09b66866edf370cfffe1d0bf543a0f3029f025ed53b7a82d85167f447379cf94089ebfb5e8a4f4322c30547974c36a57c327931c87180397b6ef9b09ce2b748a1d8e5a377d8f06d15b715d27136f7234cd330d6e8fd2c0ae921484b4a7e6485ee7bc684c77a9a622b53019378a101ad4e51221c3ea2a5e2d5f6349ae3138a25f3f3c574faa6a2aaf9b3f4d2efd03051c42da78fa0b0c1ed404a3f956cd478f7ad302ffd0b3323e2bc5b0084c367884d554447e1d6267c5153c82502cd541268800c050ea3f2b7430b19230cd31f327a4488ca154be11cc3a7c2173f84c09bb94ec7299fb9ffc245eef35431066d30e28e098552006b6dece8dcceec66ab0a5f084b4e5de0a61540c16d7ff4db75366fe978bceac7ef3db3f93fd7f5d720aa57478a7c22ecc4ac6fb0f02eb164329d2f589e28e3df98202ca6a4cbf60e0add84915fe77f91f64443cd067a8d2d335b19c7000441d409155069d26a01b6e5a704b00eab03573859426fa7df480d5e239a36cb6916d29679edefe66d166788c822cdeb474da01b8be4f984c79cc253cff8a876d45a20a19fa0425416f318027c5083baf8573c5800fa715244cbac6bdb53997b39056fb1a1ad93b33b5dce6dcedb8a6e85254097957c67fb68df51ac88d1672de918b3c554f205d7a6e7bd75f702a0e65e4027a2f6e48b6e907fe6d8585397a12220093e824ad9c5aceebe5859bfc6a4cd46e7941940c76377b9fa95171f9dcd51612cd6dfd82648a730e124f3eeb68bccd8d201efa567770b705c07f73791aa5622315dfaab8a387ce10e517f3ec49f2fd9818a65158dc60f7ea96f0b90d63e05b60397d7c4ae7f57c5f1edfc8c17d3a659a02a3f22fce8497a7e5b7a4c9be462b4483986e807e32cd3a2c03e2c5ee9709f9c8f11603f6d9d9f2d2656a90edddd3af29fc45da5111c7feaaa709ff4387d60ba8909691a0a4625b49790d21057ad9adb3fd7541442b2505311f698999d243b4040df591ab13f3672b60bca4a24ea6403e36c92d1becd2f83f788ac5f7894d52d750c3f29b3411913cdcbaf0e78c140108ab9a3e60195b7142887af783900a315da44b4335856f5131f7411a5d71764b7b6fe5c9c1c8305b568c194e395ee6394c9da5b3e4a37a55b14fa6ae6374766002b2a6e80c5eedba5cf9e44f90170c9ca86c7b3a437103e31835b3582750f31471b686e8e608aa9ff75f0b6ba9cfc90bf18779a4375e8c139fb894f687534d8a987bf402902afe1319fd4f38467a8097458f6d7a1f13e4377b5c826611e77acaaa6d88e4abace4c72a9a992cc8815711bd185660d48ceacd3c75bbf04bfe5f5012af5dc04675883997d38591ff6850df2eec8689c214ef0058868c3509f00b61f6182ad25427bd94154a0e8cfcfefcd85ccf9c0be168c33cf09e74d22da15e2b484cf387f368243fd64036f351474876508a8a15d6cf745d5654d4b2fb7e79fb9da5c925d0d7460ceb09d8a6d4719b488fc609951088a43e91466243b5a68be7f57015b54be344fbf6c652f00bcb412ae2004727a769a11b5440a7329600a3862ea3d69e71e2481f443995a2a29d9a001f2ccc350ed87cc6fc5e3769b3552362622a6094ba393b64dad8daeb497d44cfcac56cff50c996d4121b200334b5c7aa6091f4d0ac51ca3f148ffb6c9f759f5a924c142ef730cddd5bafd68ff76e21fc8b0fa509278ad6fd941bcbdcac891e888ec6d8dac6dbba6c8f1cbcb83f26200e9d153db879d4c3e8afe4e49de15ff7636b541cf6da5ba20a79cd83a7993e5b802aa4ff701fa95dd6a28d4a6ec41561c6712c2509595e514a535d3aae4ac72cd464b08e65d1bac0f39e6289c80ffbef315e7b16ef2a79d3faf734afac2de436d2f353e0227227915e16addc7adc1fe1786b01ea2647d022784d2b597556ce51ced2cb7ae7fa6d090c4f9aa7b7b3f81c223aef0eaa4fed6e275282869a1408b67f2484d664943358734875582b908518944d7648b2f8727176196e44ac1642ae5f59195d5a409fd7de87036a4b807bac7dcf7ba3d67fa075018c0e94661ff7028937187d313ac2c397d45ef973e9c1502143a89c6db17dbffb40485c68093ad537dd99339fbe71e20ccbb4063feaea4eda98f9fcc860dae6397bc7f0a61cbe35d9f6ec4db1dc9b8016e468c2a1c365e2622cb8040db5201983e4204143b608b56feee5d4542cb3e72633119ba2266a5e05c846f98137efd0e36c3bee92b2a86e5eba6b0580322061113d33a0ce487da644fb3a03359b8efe9f5c35ebb41eedd5290a5eafa76accb9543869d45a5c84806d3772852d26083d1367f1b458a3ee9a48c3f725260ccbc06224a7d5fe0520edc76561a1625caa44afd994450d6160a9d873c107af9e518b12ad160ec19fdb76f03fd372d3a2bf9eeabd4e02ad0535910a9d57841167225700c964d4376942a1b576d0101ceefb3f4a3d853de54892fd59f7985c8b4001cbf83375e22dc20b6e588a07068b15968e3fbeaec4ff47775ea37514c6288c0a5d6cbf4cf23b74ee08f7781297a729c7c51ddcd8184a6f288638f898728174a8aa553f36d71a996823ac698907b31f76d40a707feb6349cd82dd5c234fbea9dee98af8cd7d9d91dac1b26602b38c8c68266d2fa51625541e55b4de951e0cb87ffc3b72f841515941f1cc04190df1336fbb916d0253bb10a141842431353d95cfd890e6d9a89ef4d45127a81e0444993691bb564c4fe2f2cfab3c4c8a8108ec35eff50e69a9a108ec9018e3da15613e7605cd89b6bd7fe0e2dae9f6595ea13663c3d12d7b5db214c4eebf5975eeb3bf3f148a549c5393920fa7a617ca6403c402a30f1bb5634d9170d89e9af88afa294e3f8ef7e113d44c4648416a30d00960a7912544efb1fc8aa0846c72a6b14e9cb483fe44b206fafeed2b23ae7771e5ecd5d3c77f93af7877b37ba4d88e1df6f2e28b0379da42a445f082331534c8d07c51b29bf66a1a69b8aca83901f423e4c858dc02761e3deaf507ceabdd75de917d4d317d0be26e69372f63ba815bdc328965a3235b9103d8957be9cc398af3ca353d1b22515e4963380c10eb81c5295918b6f946812977ccc2288086bde846c5fed083436a66dd8c9c8038d7d4536829d64ac94bcde2bb83d456e3e07fe01974eae8b899229ed0353b45039e6a75350878ddae9902642cb23b52dcc9f86d6693cd704c2dc0405f96b1e83946a4cf52a0cae796be24d384cdae7564c965332824f8c6e65a1c4fac77574287de8f3276812e9817945cb13972cd4b8b4bfcfa1f26447b2132d401adc9866f230a52e1ca7baea3ead52af767b611812c5013850ac58e36770eb3f1de2e4b916d7375cb69d078b2f28e22898d4369f83cf690fa30548e11101e12677875a289233ae5dea019ac9f07d9366d59dfcc0fdca8ab5171c52ed983e67981add1e29e89392067b1bd3dcc2160af5c071a3ce47ad7bf37041668f8d70cac17fd3e3fa389cff58d8b323dd290b4ea4fa0be0ac3b005069f05bc506a006d5f716902f784a1566d916562c9a10a3eabbb6e86c1492ea4a9972961afbb96502ec8c60b0aef20a12f0c937e6202e976babef891b0b2ba924270ac6e8caf2e75aaeea8bf855eb8fe64906097d8dcdc41cede50a960fe19079ceec294c8ff71a6ee7adebac1729eaa8dacd9b5f4bdc9dcf8fb98cbc47e2658abcab3c9e715c443f7aacd78e745de2c8c213b180fd63ef9b54ab815d21f1f509c76414a2adb395caed5d5b1acae24f863b02d7b1d630279767fccbf5b9b3f36e10220d7cdf6a90e9606b62be7451faa187195c4277315ac2f11d971e95dddaea0ba10c8cd6e0c3525ce3f4e16db353ac25ee30efa4311d524555f221b4348edf2f0fee904d5a3abb63b3e3fd711c8bdeea46c5749929f886a736a80be86caf4fd1fb63660ca89031660fe0ea4484f38ae8ea6ca15aa9a3de5b8510a7155b8e01996a75d7e727a40b4caafe4096c5ffdc3f34a80f196627a3230860fd75ba4188406fc376294994367aff52ad67f5838941cd137bf493f8d02b263ac0ea412cf0373e66ce9e42185f7dd084e88fa44c579e40dfb7a553494cab46533947df2f5e3234ff2f41906011082bcb4936f01536fb343aaacbd0427466210e509a41d58c06f05d3c900929529f4e42cfcafd4ffff382a8dab1718dbe925ece7a692c12734d1d47468bb5fa173351928a779fd6cf2d4603ecae90d85c56824b02c7fe293f3c41edd087fa94b6619fffcd9418b2d4dae126e02cc4232d13c6fbc9fc0c500a77c0e42e48b6beaba22338583db36ad29d691e35a4354d84fffde6bb9fe7a8e5579c3a531efa87a210658a0917ca63ed3677a9690f517478d950b3d5c98e646a7a370158d03112a2ab3b925a51c7b6e47468062e0964d7afa3f6ec998add452a315cb50dbae84006c2f981ca1d3b3ec37ce1cd4900b48f2f0bb95765596e9393e864074f98dbbec83c95532bb7005291fc38d2c497afbc51b4f04f9e37fe9be4e57f4b3350bf00266d2c7dc4f7434e92f74b52ecbb9a288d97b8ac1d33201e09e300f6575a5d7e43374bea14dd48ed86bbe84d5f6d553f145dbb2dd196dc023cd901f8c68e32b091b4d445538271b4c39dee694768b8b4055ee300a165e0237835e47d9e04a95d44ed8d11d5842e7bcba3daecec0c555cb02e3f9f0b0e15c4efea3ff87e29483b13a0c72f9bc9103a3397ef36bf61a702e392ea1eb425f768576e8f24506ae758e25d6b48c19cf293435a5a38e8620e1ba0eea6394e5f42a3c1b811c08ef8d31ab8f94c373259c14e3fed5d3acd39384211fa7208742eadbf5dbc245127495a9f0a75c03cfee563bb4c68500cc7fc4ebfc00747ff41a61b82227680216f8cc4dbf152854cbec07b3d473893d37966131a0186325a3175a9c42c541efe655ab5773ad2d1dc30aa1c1290b90a095585c80962da115f28f4e9e21642f48c5e962b0016a33eeb7c52c1e7808c68c4ffb49cce3cab07cc925f8acdf1bc95c6e6d2b18b308a80c428b153b3153039c9367e3b2d6147666912d2c005f2781efafc7d11d3412b67050150aae509209c7e22502f11be22b8b6dfd6e5e5d06c1562ca3941948356e32237013eb77773981b3f9af789c2726c706ebbbd1120688957d7b1aa82150aec0396153ca72d6991bf43470d0313f292ca6be9c27700b9539379a784af78ed434b45ea29234e94792ba8efa2c912dbe624827206d4cc3dff9d5e81f65d7568f92138b446d695c8f6d605b3c90f8cec8e6ee12b6208add084f389e2f3823f441218512c0ae712be8514af3fb7366d6592b448b89b1ab88ad871fb1fd4bae0e42fa373395c9f694a20a948e1ef0065e5f747fd949da03ac4989679f46ce41bd04bd3d4ca4c6a69259f56c0d72b5da0a0f6bfd2f1be7bafde41bfca6bfc140c2ac45c989ff3ec88fdc8ca76af03563c95e206329dfa3302c78dd3f6b439f1ea877d3b20f67fad836bf045dd72f9947b40657db530135e243a7bebe51d129a99c52d2df43a5b09d1f0b0d0e123d210528d129fee2594973df9e73ba9483912a065b5df3cbde05f887a623fb17a68291cc0c872cf9ed54a713374be542604955f9828c5bbb93a2c2a32f9d8148d850b0fe7b5bd25f9fc50647042bb22340f437ec6929db39e0f04d253131cca81504dde65110c9dd6cae88f889ae9ca095569ed8eb794fe562b11e40e27acfb0ca4ec22694e6ea068434e00c59f93fdb48752eb5af77fef4bfbbc0192be67e3bfbcee3c5f28d2281eb415d5ecde6816205d1337ad882ace18cee11eae414bba7eba3856caf4d57e37e646f03218b1422ef22218a28bef8abfa86cf5bd0693eb9f47aac138fc4a2d6ed24ce4f81f395327c22e99debe12c51dd0e29a4d59f6cc3e1149001d2a180dffbc48dfe0ca7a2a5364e62f9f68ce7c5068f71820f7210aabbd198deb0552d71bae66064fe86e896ada9956fdeb1b9690a0c0e4850c9fb3f92c7b657303e53a1bfb6d0a1dff82e08e669063832848d29d0fc1affe534592905fb03ec1405fef575450d4612dc4e8d15e380e5f60a67a6b666a8e0944d28cee7dfa45c47f4899cb3d431f3ab1d1cfc3b36e9ea348f0e76f12b870ad46bcbdea1fa4f0407b33e01f9f50bf733d0eb9be0d022790512aa33715e0c6e61c219688221fdffaa68642de54e5fd0e1d8677dbeaecbdb235da8f8be5e609ec8863bceed91429e043b907389adf9f7f550d9ef71583f01d635549dd0d013811bd7e32c86a43ff44ced8e35c91d495cf0f22108013eedfcd7bdad9b13f57d276ed7d0f2028b1fa8b8302dd15f2dfe174a18f3067a9ecf5df3212c0baf8f83bfaf87dfe5a73de07b38fa69bafd03c248fe7c2acd148185add1bcbbaeff1aa3b2ac6728cd5f3e894cde56ae97523d0f5eb9be8eeb987a578d45775e31000ac5f214913d518513fe877657e91129f45a50619b152a5a96513dd2881af4b8f6483af59b990bc1956bf16f6d00905291f5a7b3c131aaee791f0d890f7740ec7aa6ae0657395e8d9dca9c3fa9816423cbd7340ed8502dbd248d126110746f916210eeefc7f40d1b0594f4e0b11bf1a4169c85ffafb585ee151c6fd4b8c43ccb0d79e7365cb8cd2a57026cbc0048e7414e0f3472fc81efe3ef96ca6d9eae3baaee3efc99066cb323eaa252a522d05401db75b02cbd40eb73f04a1f27d2c352e056a84c5e8003da0f361199e3da39f653c2121a60d50024aee8426f52676ca75a420ec45e1c25b97538116f80d4395882eff0985238fb547a74aad4827a79c9439cac6e582b535a479cd1df56665b188a533f829f477b8d60bda366ab53c5e33af75439a2892c2d4d137f1c9b217c3ffac85ca852d47188fd6e868738156d17505a70d8bda856f1cf2e5c017c3a6c8583c26fdde34dd2725cc2de185362800a7850c6d38e9be660d1c3834ddb842f138fec7a1322c5b6155f5ffa1d07e12e36a175b0cfb02e7e5acbd1ce3285804d5115963f3b56c563c43186f3189fd775f50de1a1ae516cbd694fc82e002ffc93afbc07f059771d2ad4ed931f447899df411da9c4a9456480462ff24a58b52a69da512c5844f2d22a741130d01420e2f6d328f847439150561e9254746fcfc185e56742d5006b28dddeae25552b4c984e7ef530c90383249539738ddb81f3c5dfc2f7691221f113ff3dbf4cca11ecdf50962d13c4f328b7b117798ce0404550fd0a4ffdb4928f9d0c46634d2a12d1d9ae3f8a04b2e48f562020dca06c89d7ca65b6e54adc9fc05bb1cf0453609373c0055738aad7e2317717d94a5a9f871bc4caf231c7ae554e53a1c24d550ff6e3aa7e71b34bf694cba9b3402281d998df4a264d84fa615d00c2e4d5924b857cf8a3071d35a72860e7a8645a024fe69f6a73eb705d65de6f1309d8604e53be3e4decd2522f95065532b3a628101bcc97100b5b9a978f90fb7de09ccd13d64d246586fe0f2397aced6fad8d018027b9a36bb07eb8ac83d4df1661aee8264d193ddbcbafc4c275cc2e9c84c3316177d0c11181bcc15d9457d3d2bae6971f86c60e2a89f339726cd09c4eb4967adeec1ec16a64b6cf8a196aa065438455e4da58e6b24bba4a46a0b9c0618b3e18158e22f79da047aceb88582142416e07d743d2c826c6b6415477c61bea7a04960d6caa96b1a33aa1e43d28355008e63a21f5bb63adf17b9924ca013ceeddb3adffb7c64a7101d39bc0be2f33a0acc04748b8d7d65c65f38566a5f70d959aa44c9e7f8dfa6ac4cc7041438badfa7e1dc44fdd1b7b7b46cb671680c1106d6d6b4960d9e7213c6c2de7d8d7fd0710f187d2d9d35f59b3929d953a741b210238892b7b394f362241f88ccaa78071541e88d245d499f44e3ece642a68e8aa52a545e442ae8b550665232231029e8e0184b22b621ebeb0168581286b780480893fbc074ea83a2442b7ac86901b153b1f839343c2a68fee3ac055a2f2e4978dbe135c238959a9b63c20ca159e6603c456e4fe492ff0f4398b9edffab950d03250cfbf3edf039faaddf59598f6c6bf147bf812322de20f9810ac151bbe799b2bee519b808526a0a9be57af1f39880dc8df370b4051a35ccd4c2d0ae5b52f99ed819a7a0fa4ee917903f5c826e0db8151f27ecb9cdf5206d33644f3ff77552e4a888aa36fcdac9d36091e324525634331bdaa7a3db25e6c80a3e4daa0bf2209ce394f003689c942cb934142d3bb209f605f5c2609904860270bad1bfe3f2c81c8a0e7e56839414048ff07c79b6c396ff82e13c96b5b0cc403770677aad5fda22e625410d9f3ca2782b4d6b369edd5fab33585b0172078c1d3725a655ad9a8097f558dc5a0f007cdc6ee934ecfeef4deab26c95ec88626a68d25086e4c1aec2a1aca91d61a380483633647f8df38d624efd64a946d8ab82bca71a6117d8378c882273d0188f298c5e7948734baba4f78c47225d53b2bbf2c675d02bd729b82724b18639c410cc6051cc0f01107eb417ff738842a9e019617179120d1f7dd1e668feb3f38829ad734263b3c312dff87385ea43452a56541b6747df169d6ebf211b38aa447283b996103d9013515d94372dd7441f8fe7060a6a7eba32fa7fd549377b6ed4a96496facc9da2633c7d148c397db141147ead56a1ddbdf9bb5a357885bf600854f53e6803eb154ebe26ad646baee183f479989cc4fa25d00bd953b92ccf89176400213427054cdde7e38741da76647ca2f1e415ee501ce656fe8b60e493e5b884afd2dbf5853feb9be1ad3f1a5d1a27839cc8773da7a47d4f28f0d54bb40ac1fe8e9cc2bb823eea3ff1e088685f393e3bf99741ffcc469528b36f8a072b0136cdaa5fc04d43813b255d98f7fadd48934207319be980c8f0d9b677779ac80d0b55c6f4ee7e5b53d3a5cf00512eb7a8351e42f84173ef4d18691a43264d5d94f30ced5aca02e0264517971a3bdf265eb47aed828adb55d36e1576edfabc86bd86bbff429c7f8c7da5e865ef3b5c37e62ca4d681e1b373be745a8d195e5f4017a0ab615dad67a69ca4a1a060ffcf235158654451799f4765a02aa5c0e39fd2cece31f21c808f90cbee872cfefdfe46ad7495de6824494b2a77ad0907f0bee47f761f5661b6083b88cfe76d1376e3d484f7e74249c96f75dd9b79df7c247cd23a1b2954aff7e5ac42a8d004491eab121c017526f607eac084e40990bafa4148496ea2102345e50dc38f0911af3f46e2a5c2c8de830ee4f5b8f9a334cd82f36a69b2970ec7d233d339ca258c340e6f3fa71ee181b64c29b93cace7680328f33f587a874c3989b11b235c179e4a153148428bda57ed212a05002a1edac50991d3581eb7978e4a2a88876e41926dfd6cd4b5fbedf848a69e4fa36a5532503e15bcfa22548d4b0b3e42db0be2d6ce8683a31ddd4e9c65e309dd1244a8587f45ba5b9f872d067c46372f42c68c8a8a693824afa880c8093ab9d64977523dc3e8f8a9753ae64e49277b52d82aed58b9dd187c92b6cced60e2dbf83c5b13bab11c5191b92c108b0c59b34c0356c9c806fce4f07b825c6f83ca43e3841897d4aa649038b64b49dc79d879b62efab8d5d08f63451dd2345da5a31760cc6bf947d7e51ab4ee1d40a70740704a70d9935059a8141d52c9851ca616b2321648e2cc75821a1bfffdbd683e929ada8cf3e0954c31007afc78c3d74f4fb58f81b6570200cab6c172f8b948c73f94249e668c836ec1107e600bbb737650c856ef35d68c212eb3a15436a5644f1a800deb6d71bd2f03b3e935c1e2a10819064d55368aa400418e91f7f18f320e857a3be4b58c0e33543d295011962bf6c77560d40d8bb89eff0327a0aa8222a123b9b3f212ee5c090ac0d4d8559efca8da32124494d2c606ded5cdacb9bd2a79b7f741ef1b07b2b9a2369818153f1f47ab2441003d12df58f70942b0d0a7f5ceb3889fdcd5ba9f073dee93cd83e37287bb4c6838d3fe28a38888d6df174b02fe628bc03cbd9f03610cb747e34e87148b30c9a10d24d0d61c83bd95cb196154c545eeb5c8e4de7dcac8d5e991a1ae6accd388520237462f75669a34277c4612f98591bd0fe40dfe2ebbfd073c5e4cace4270cd3bd8ea32468325f3961c5a5d6815d3c3119f4bd00b61419b9f22246be105df2ac2c29585b7e878c5d9d88065c3b95ce607cd027a1a9922524fbe5843ada2a79bfe7064815fff3c638b19ade25d58594e230341ab8c5552ce61033bf1674ce32fedc26bcf034630234fe92ed9686ca364d3db32c25e5e460b4de0985b218860a1eb27d1448ecfd66c5f28827c70c019ac198b7b466d37f15bb2c03ea582de2c530f6d4acac8728441799b81987ba87903cd412900223d9ec48ad18f0bca1b58f946e13e509cf7fa6c068b307b9bd404fdfe2a3cc5da4459e9f8c397563a43234af91d466bc34ca3bdaed5f1f5617d112574e2fbe5265345f153b3cf4e000eae347cf929e0bf0ca23848afa7bf8521785498f208e5412cfa7985f1f235fdbbd5305f600fc07f484588006331426fff87702112a92d8a799f6d83b5d0148aaf97e55161574c605546c555874f2d638f97aa0d6996f98beceb24b1e1da7c3a845befdb7693651000d62f8e97533589f7b4d3e8cc9519cebdbdf2469c1d5f570432482558cbdeaf099aeb8eb55a08c52dc3ea4420265a24a1a05f44f1cb7418f8bdae640138e0667fc15e2490c64c63bc25f0b9a561eddf24e52815d254adde290ed7402c2b3c6376d02cc02c8fb916db999c1c8f57c32da49d8312c252facfc77886194b822857568f1b1c31738d0575b2db1b56d8094f74774f23cc2cba4eda7ada6166a31b45e3516e7d116b548a332ffcf174e4f991f07bfb32b070f0ddcbd84d412af81d0a2da19064ec6576c41c322139989b69316eec85da90c04391391846c4f12e14d9b45923a5d7a596c0376f31722ae54c47b066b4579f0dd8b31d1e72cf25520636ca900c5bcecff338236aaa71dbc87f65480071515cc847351cd437013f7c436476104bfc8213a9b52f6624e64fe44d14cf61353538be10af64efc1a0c16dc7357f6b92d63d8c7db2bb360161480d832d8775d8ec72c3c9151a9fb9b2e9e1e2bc3e179437aa87ae76679932378d71d8a32f3a417a80556fbeb3d964c64a3fea7e219640a2f0d059df90b0ecefcff29b7d5b46c5747b86c675c8a63a6728df41931cc2b3309f6f546672de72ade04450cc883ca802eeabf1d54602c2c8037c19f3caaea8e7f4d208d544990847bf876704a77fdeab534927394482b1aff4b4a2d3778e0b60c87e5543ed72e36cd8333abc38d04925218d5bcb589ce5a8e2168f30b2b101acb7bd51ec48a9d7f9fe0ec5a09d51fd878a872fddd8bb66c07c29310a19401151f759affa5a01efb8f1bd9012db4e0060e1539bb5968839cbab2a766177c7ae5a406fbc73b5df58ae0a14d3fcc012d98af20e607ce866d15138205646dda2afe06a8c67892cc7f3485fcc42dfcca9e80b9830dbd49456b6c715db30a38f9ed0421e96cdb09037d9cf97bc8231738e97961e91acf8083af3e1582a00d4628b0eadf9385a0dde638d49ed9fbbdb66fe5aac6a75c287556330279dbdef89aac2d6711d62cdbd336eeb0ec3f1410f1d182f2873efcaab6e6f487560c93477030dcbdf1385e2d298c2602b1032e055a306a3d13ae73143a400bc41ef7abb56ef18ac0558a353be19ac43584d74a5a1f99b049a29b424831eec1f3d072f48cd1bffa8ce7296c0d0f4653684b508728e3eac72e91c11ebfb9e17b51242a0236eff24776865ea42d09f061ae476e74bec790435351357accfa2fd62ea09a72f7a691708b88e76f9d5b482e29fe9ae28c2d9511b1a1d587e8862763fa7a9fa9ad3abb9fccf8c67734559cf0642cd0220fa434a79fa2fb11fee8b657c42e0a51339638b9df51c00be75565cd264633fd58df16e4af99965f0792ce282aee1ee19419fd8d20d491dba5b0452688c63e5a363dd149a2902edd168102a83b3619c18caffd7eff2f6bc10ca2b0a07c48f150ff94f9b80309aeb5bea181e6447feb8733c230a645289ff4152e46969aa1ab88fc83a4523c507ea5bf0b8eeb63a2a7e5e1668a6abd811ce10f0b118b32dcf1e802cf3a40f7e3cdf189e1e68597af72ba79399a09c837f7c4baa6f06c9df851d6b17fa40e774bab0c031f39cb3ec2772ec9ce3239573056586414188f84155dd49d5ce300ae61ce7ddae756673a36a5bafd6fd1fd8ce4b1832fef4414688a7a6f158a66866171d0fe337e83b82b7a304914a7433444f7bd09158043626f86ead4d0b4c038e019a4b782c9b7afd503a93e3a6491085bda88b2bc6c7ac94cfc99309c5f277e85d81d81795cae1b8ab399f6cffab60c10743edc2f12aa21113688a8dff43416853374ee8bfa19c1d8ef7b0cbf8d3a523bf9284a3ae8097567c982c5128bbb0387ebb14bab329eb4fadc207620176d8901c984061bc8bad9f67193659bd2ca1486cb82637171d6b81ec4ba28fe75a1bb129fe9d20e43efc0e1243c19b65352fc3ce4150eede1c3388f8a556ead1346c1444b6209e49a35297fa9d75dc058131fa93c41d0862d865c8b652431878cab1d26638978e7acb737845f93a9b9b64f822f177916be44e6656a42aeda9365c4b37720d8c3ccf9dd07ffc5af24cd36c439cf947ee3b033936b6330befe010fec80e7cd7da00e2f6dbdf4f09a8ddb855f5770380c377da103055e44ba86c08cb8f25eb7b39c3d8c67f01487ba88f6ee0c451186bf6465460e92179f578552e1229c6db8c573032f9d52609cc17a9a28474adcf79b22b3a996ede0dc4c2a9ddff47715dfc42c55f93e4c10498c8f17f2920710fe470e4066b07ae7a00ed8cca193e4cd7540b10327e7e2206d4877f5f24b880bd1817aaa72a1331b07d0a2e33318c5424bd9dd0679b77186c506d2d56b6b5ac1eb305dfb82ecba1c35b233271209e566551a12beae23ad55c4491fe62f13e3081d42951e2b9733ed3da4e79d907e56fdaa0faa4f2b9bf3a9ab611294e69654dd6c0cf960b2ac079858630816b18dbe2ec1b9c90ce085a9ca1a4a6638b430062f1ed60b1e8e90f7dcb8a108b54bc25de80bf844e61ecc64a5844442fcef25d225069daba7a391787370ce6613af6afa1216941148dc52fcc0cd7e865ecc32fa0b1c037af9f6ea2308395ce6d648bdbee9665cb9b66377d68ec9d2eb6afd637a3cae1e0644ac5d476b7a20665d50ea9ffbcd83125a98aa083dfdb98a62ed32c6a7a21f3f9a6f9f8f8d377940718c5d16fb8eedd255d0e0fef8c35494d3bbed9188cfba3dadc12a7cd9b7cb40ae6aaae313d3e88447adb52c55ccf05f189769660886758cb55e277838e2155277b3760c076405d6c5b22f8af7121aef57a7a19fb6d451ff4cc441cbaf8a9250668976431b34cddafde2f15cb4d634dee16500e3383f5327b762ee75f1d2c6f5b362c1d8ec7187b550be6178d7d477dc2c4a2814fb621b9aa8c4d4d35605fac743199d390281a960ca267f74403b6dd3d2080e54c7a30e3fa0d6d49ad25c1ef47b508ea39e60841babd1f1cc66263a51188232cc8f7e58b3ab39b46b296c731841c7054e17c621a10289478fb1999d56c2a33e8c5ff5c6811c626da007f50b3dac51fe387373fcffc00aaed57a9f78b5e08eabd4ae0759793d8fd657148c7aea6d029aea31dbd9dcc8fed201430e0c74f58aebef6e1fb0c4bba2f5c1ec8c17fb07e621bd4d3c896e22a1d7349f58dbe4bb575fc3c11063be9b2938c56f08655702ec62568f3b549ff098f318b3a9e1413b181633ffa13269b86a046f634307b0f477465f0a70a3b72e732ae37c77e9f3dba688d4f9d406cd1f9ccbd022c0027a685947e8ce5a2bcb4e6353eaf4f9eed66c624e8755a84c85e827a77e5c1891c3376aa733bddeaa2335bae7278bb1a9f08398923c8b0617d23768c68b5f959d6c6ebf3b22569b1abe1a4e053c4a8c8486730f543345a33140a76c246e4a9d7e731139f62093329d6627a7bfca9b0c68b6a1fd1c4e398ae6dddf44e0c5120ea8ac5d00c662acbd3971954972876e7b829709e1a161b62a5a5a011e61adbc838142abb8af7688d8d8cf6854aceedc7e8c063dcebec34fbbeeb1548cb9677f31b4cb9e7ba61a07366c4ede959f378930eba9835b0dde0c88ba99415b29178a1603c46477345ded1271cdf948a01c698001895733306d7b11e282a9ef394c774b787f111add6f61264fb0114d5f304f580b21d52ecd5b91be56120f51d140bb4dd41a7af1128b362bd6aa391bb8f820b73004080345328652af89edaf2e7e935499f030694d2d060e2aadf23229cb47677e7753f81af2dc536785507cac225f927a58d33b0da6f0970102423c82fc629a3ad75b719c52eba1c676db6f9df8f61cf790205c77b65f417018d9cddf92f32387029ded2d2063b358a04dc718337a3d79f9fc8afda04e7d13a4b3f684061643e51d74b611dd48960a90f3804d6996d3b3e5e56fff84971ddaf60c9ad250b947cd12e74f21397a6b49392a3ba2a56aa7bf5d65da8abe9b511b9778a212e6cc086a85bc5b6cea63f6fe2521de07f2692cc60d52d9fab626242152e3d268e056300c7ae617ed9b678e02009f6d3b41097be4b5a425fa7357d973aafa42a36425ef5092a6cb3e416d9b43acbc8b53f35600107ed061e1a8adf866db0d1270542ccf1391d228d7290a62d04ad82cad949280eabc689b003d9b77822fff712427e9e0b86f0acfc6ce1c01857a27971913acd1eede25c75ec2787499c1ccea37aa32bc29190cb46a8e7165af5b6644bddffbab7a54d3e1849a579edc071993d35da12a59c8a6f366d61c5f545f1533a284ea49c6877ab420734a0e53719d5bcee14623e35a1d824bf91d246ab088ae57f4185cc29bcb5b33f294def78ff3bb7b73cc55e3a7dc53c7bc0b3a6b1a33f3b2e7b6b20ba0587ded33deb4a916e482f942e195e7f3d6c38bf5f271469f77dbec8e4a6502dda04a3d0db346214843160c88f9f97b63b86cff6589b1444055897045eec477a5b2374418277c3b7e8b32017251f59b7c0b88a2b4810b8ca4b36085a08b9dc7c0755c3c5c2520e7140320acca0dfe742e29a4323b24914ee0b86e83ce664f3b9c9afb930cf3c261e4bb706e8aa8db4e198b26e44df49e0720ae7a30aca8c66f7dbf5403ac6965376710df2273031b4dd563546f2cfd431693d7fde8f22fee4db74c20c80a504b99f71d5a6adde037a0dfb0ad26662c82a53ddbc889de89cac5ad816dfe4546b8b67ca4c8d0d14304efabd8c13be6cefe1f3b326530415baab1ba0778e914ac24174307ced648731f39fb17fdccdc6d454dff9e68850efa3931c2447dcf81e71e7564e629c9f297a0b6c4d972f7b162716b5759ee861daaa3741f775e6c7badde3183d59031233d9766cc6de3fa163ab53039023a96d6a2315796e06374b7453df5dbeed3cd63a60b51d157db82c0c010e6ca3ece0e7a51b5afda9ef0db563648717e1fc917bd4f50dd68689b73ba37e78c7ee5573a19404a046a9be5e5e1c065fdeea097829ea9807c9b3a168aefd170598d0dba3d7e6f4d0746958487d17b42b3f50be3ea915d9bb6b709e50c8dd1b8932c344685ab1f527050a919cc7890178f349cc3522920c6e6fe676d04a7bfb18402c0f994858d01b4ff82dc1ebb55d2b2d80f8f37107c08729b7a5dbde5da4b877d51c0dfab1ca89f28823a3a0eed7fb9f6cd1852bbfc389ddacce0e439360a08c8c9f2b8697212493337ddd3cacd5e1b67cc24fc647911f3ecfab48f5acfdffdcab36e19065ad85c422b5a1c15d73a1d18d9b3ea28aba9db86c798055ca6a093b65b3eb56c7dd953fbfe00f056c1b96325f71f60770bd7d479fb832d30381c2b98062ec2646a48cbd6ac7601fb9a0072e722f74070fa5917de4bd9eca62e0f2332ae434568b352e854f3d656597279c09ce8adb2d439b36461c266fde451010473f7fb4aa5ffdd1ed01eba833de87c01bf2cb00f85db7750a7122e76371bffa220a24cab9e2c73fecb0a2df55c5174165cf7f3c7e887627e2eabbcdb4462bf857c0f0fb3344176a91eeb724b68a86623c116d19d818ba45dedd3e2bc87456fdea51c9d9c5a87af0c50c6ea2ff06548569b032cf17dc9616175ad4bbeb6a2c0d1efd0ee8518d0bedb9c38ee6cd71cfe7160ae03d25b08cc1a711a787737a1ba5c2759d6db6faf74eb8e1dac5b5ac716bdf1029c6a514ebe36588dee5c25bf2a0e386abcabbced368dc3ffdabb3a4438a33c078dca178a889450e197ba2ad441a9e3868199fe9a0e3d7a21bbaf97250854ca6b110a24e01d7a3bfd2f39cec286f7727b6b4d63c274ba8a81b7a6313e10d41c2f3ddf056c74cdcf90b4acba56d382505448a6f81d0759a4d0bc1316b71e09115505722f64b285fcf27218722c27d7e473211ea8465889bf5706f3467c92dd0848e29f3075cad3882fda68b6c1e1a1096f6958090d325abb8bedaf951ca65f15ad865d86bfa6d87e4fcd14d5ae30d71ca6b38e4ea5dbfab388006ed3e668f06f2bed43b17d005e5017ce24b317d541c7a5336252909f36c28a79bec1904184ade5f6d6ba1843418c0c48ef017f5ebc4868d854d73509b0bbd9c303adc0d0cf85acb88694ec3a62c4a6b3be4ed4ec73a9c89c66fe47b8de2712259c7710d125e1e83a5908c0d45cb889e4ef0c08f8d7653627cdc89e68011443d37282b690259a39dd0a036ed5c5ec179557cf81b095236399436b06194aff27e67f35780cb7584b633cfc5a09a370c5b0e46002fdcd45d6606bc3901ffea5302fff772695633c3e7db1cb3e2cf5cbcaa4dad01b8192b0a13717729223fbd3078c7fcd11c9b6808118a96c07c3df16043d28a5f7f2e9db38c16ee7ed7aa77e33a21a80aac3657216fd93ec27ee1679af6b1a0872a0f004b4e02e9e621d823a7add9959205a01a91aea444181ce3ad5d305a8c4ac38ddf9083b086d5f83c8af0ea7f9af9572b00a95c1909628637ac5a81839fec8c908ec2a9c906e98f2d1e027e95183a6c7449682a52b9df062b1a925e69a6767928322b2f94912c091a4b8175279a7d0360b922febc3b72453e8135187a4fc0494ebd5eebb67f83aa9f139925c0351e3ac371ab5ea3107681ff313851b8ab2dbb62a1fdf246caa1b96d5a2c26c883e99604d0da1923ceb77803af6a64fbe7fde9759e53d99de2a4f98275e8ed2f06b0fc45c603ee3c2e12f6eb48830b7c00a9a207d1dd6e2df1de65b04960469ce1d66178355abc2167e7a42fa8838488aaf7001c6b0539ffc3427e279d5869ffc5b2abaca5a64b92c61eee811a940f6010f1e5974f5f650ddb4920ffc8475838f39d8a35d2fca51deea05bdcb708d445333dad653b3b666a3b865eb4ab62b4562141deccf3fe26e29c7bbc0fe9474bb98c9298c75d05d92ec9e22b2d479e8e1c2dd5d8f8e1089d7b2737aa14f84b78ad84827a99140959e114283d95f440ad5dd028c11ae18acbf8e4cde45bae5a10c77e512fbcacc20c90cda53164613aeccae0fc3cd7f7768d6df8f632923df6f2d39c256fcf9d6df2893ebee03f27a2cad160a3487fd4443b86383cbb5e89e5fc1fc7efb3fcdb0cd4573d7ffa8f5f9f184364eb7e38c23baff67c844425a63fc155fa6a790b23f067a6fc43acbdf5895791f105665e43ce0055f6497f960af06fb4e4820cab874210da24c80f8e9dce94a2dfeb73b8aa5e6058825c439c691476d65d36e9569a60f223457ce8d14923edf6af4e294752b1da438aea66f7ef549257f940294040415ec7035db2a1851f50996fd44d72b45692e620f1bee8cde6cb97207c4bc9da56451544515354cce7675515f68af82b11c70527cb23043b561c4c825828abdfa5caa2f8ef6d5a4fb7063a6bed2aec788d559a9d5f34f0b78155aa99c5568dd0094d8d40b9925df6e993c6daac1747aa3b76b6b849d415ad3cc917a9bd5a501fabf15aed4a0acdce828250e5e6667281f1bab747753f3eb60d19215b030b5e370609f534daddc251e57bf04f7341bdcc891ab71263844544020641a1ae3c84c476c5fe8293d83aa3f15e464a8f5949adbe243439488e1024d0898654fdfed98e6cc2b20e999dc78b4517b50d0c6180e3c1360e538f6634221545e65d91ffc5bb0bd6455521f53fa9048dab363ba9a315f8719224ea2458ac2fb37fa40cf3656173e4f7799958ef70e0510f56f9f23b3771b5b85140dccd81b14421e7846f9ca5d5efb5eaa86403cc52780f89f7df667d52834dad2752597ef2e027177722c035ee19f38a00ab2678c16be60182ccb7c1c312c558e7075128d124d7abe594cdbaabe981770fa8c1b6ec951a263ec1558a96c6611f5c84975c7602fd2be94fed16f8668a137e73b9d5336fa77123ad3612a92c1982b28296c75c820ec564c6b24a39b748066da708e5eb1fee974d1fd0bd69fa3d5b86e5eb0b946ca8558524faab8d6555c9834e1b307da95a7e435fb588da406d3281248580cebeae729e6dc62fb86e60d20d333a265c8ed13d1e1687598fa53015a2b7f859ea3264aa022b19f3c1d18e5cc09f1dea87f9f17fa9ace662b36b4051e1715421fc0643407fcb30552dedc8b52539dece3d6e4a1df209a97958e0f5d103ef0e21b728d413042ec1be4f437504624f2d08866df400fc2ce73bfd94f99c6b1d319a8cd2e95ec9d772103cbd4ceb98eb5352c1d96db762a51eaee5650e29d70bed5e68d63acd1337e24857afe98d5bd115ec46d0fcdf545cc317ea06c26602cc39d7c580c3a92bd18b5fcb82fa7b09136829ef5de36355896e43a62ca17ad678ddb0e630a8896ef0b53c7c7b7366aee73f2b1bbb7d4d58e0174d0d90dcea4606a80c1ab31f7e3fcce05eafbb3387ea656b1514e90b779e759a2994b24263b8fff813a5c33e44fef19b5ffac3a617d7686038f341aedf7deed878fd9d1b69d1a73c59ffb0f50b4106cb23a92f653262efcbd38a1f4543e9e85d5c51a8ef0f2a4aeb503255c64bc533c17c5b81adb8060d7c2ff17b092ab4fb90eaa4d8c3805c31daa53ec11e80b018b00af14a979ccd7214d9c51f447b736eef5287e386b32024ad1591149d211db204a6486ee03eb0b5f1a47b89ec143c1da7789253920fb07915c4c9d2d5eec25bbad2e17a7a5e6703f1ad718139983f601489cd4b73f801301cdfdaa04f03650424375144d7f2a86564e18fed8f639907e4ce1e04b4d320d71e99a0aecada0bb7bb56a707ec1ea99226730197dd2813f9ecc689edc3a81c89445f64f45fbe2792c74511eaf32ffc2c806f0ef67da3cfbb0d29226fe3b362ffac3aac4fe6c36faa0b4523ccca87664b7c3d7ec1d7458d5a280c3fd7f501a85eabad0a2a7c8836a46b56af6116f52057523efdf98dfea38d69aec7c6d881375d7a0697fc160216cd829d9f27109dad05b92a75568b502d463fd7126f24181bcaaffde65162440ea88cb254ae6b8d4c56e02cb0e799f55896c3aba7b6d07f4dabeb46608cd93dc3ec7f9eac702f3771c4c0858c21eadaca70f2d4ef7b7303ba91223745ec41b360bfb95544eba1305c6ca01cd311f608ef380b789e8b98c7ae7e376a46de1501f43906883676215163e70dce2a021eb7f434244b55547fc3a8d2395472090ba5cc8ced7d6311fd2530c1da230600b748dfc7600279f44f97b67adc79c3f1b646ae5956005384943faf7902846761e487f516ee90a0bcfec483eb67a323f0f59d48be2ebcdf76bd91d9ef977665831b9978d57aa31cd2cd0ee24cbf18ed3ea641ddd4bdcd37ea6ca70155af67f8788780fcf18998f03f51a334c29561536ca40ea0dba6220089d2c9092f79d6e30a89bd49e26c70c55064b4f3cf439ca368355d50badef00f8d146611bc758f33c31df45c6e18f19ec9ab27f578b435ba956564933accd9318cf89440dfd0337162f14abaa245f9f522b91cbe64642ce792b2279a264b7e5d78131ee9e90c38c5e494c6139caff7084b82177331e3847e5075580423fd03174e8c3702c8cbeff1b90d40ee5611843f97aadeda22feaddb62e0b123f73d56e20f0cd765029f6701fe3a50ee1d5359725d200b6c03d3015aa8f02c8086d2da32740d3b1e25a4c015394a5758b959860a2fbfb0416d9287719e4f52fa9f9c174d499b6411611aa0b36deda148a8788ddfba88a80d4a14322b0fd55765fd7b477ecabfce51b19e18fd277408ffbca55bee273eac9eaa2be5189bab38bdbfb1519b8cfa778bf425f22e6671e8cb7ae6f2644d8bc9a45b90ad1bbfd160dfbd1f1338d2ba48b946cc6c0d3901c49a5fd219f5ddabd3e2f23287bc3c55e3277c99a1beb08b9b45f3c13aacd111dfb47e0799ceb37414a42c69192c6a878017c10f1cc6de1cdbd89e382ae60c8939b9033069d263a7399887be43a2e6d52081c1871cc2d369ed5b153bf48288ce1a5c272096ec89d7f08898b3fddf70747bdfdb7b77c43b2a30ace5aca01b5dc195dffb7497624620774d643b42ce6865bc5c459f61df400cbdc66a7dbc407c77d4ceaea338f6ec8d6bd09d9599990cee8dfae3116ae814363b99c0904b0ac8437d32e84024a47cf3d573860ca023197d60aea0b2fc0b27aff6efe3a73962c13ef57dd4170cd047c6e60ec39129d5aceccc6025f056fe4d84c92bfdd0127f0158ca2c6dbaa4b88b58b8ecc3f8d0a2ce70fbc7d38a36e8e1aa03d36ff30380709d86a257e6a47b30314552bcacfc62b449ab36f448636658ff01df6dcc2732ca883cc10d8928322228631fb40bac1d610759aa3d05fe0e8e2041b1f6f7bb673e6f8cc47ecb3f0166bf6380e5477ee0f19de9e9f7530e8787299e9393bc0216cf242748ac4b4f2834b9b5e1248588ab35ccaaa76357547e9095530a234122218f5ec81aac22eb1b1feeeb1f3a7bc8c11e14e05b0f92e66ea9823558dda78fb7b241aa106471fb36db3618d628f37606e8edb558de614fcced623140c9e0dd34af42abb76eb0a69483b921404c3e6eaa3e2b431da89e536ebbbce9d83285d7f69cfb22bb8d81abc9a9d53fde40725a429595dd4f4eb9cf68041ba126343931620672d42147ed36ffb9e045fa2f33555b0319df50010146de8fa6e49f2bb79f4a544332d20ed5c1e1c7f5a16ca25e86405441d8b64759983f659b085289cab5e4fff9535bce68cac0487e826bb5926e1918bf155a8a6f96589300e464d054db8bdc9900c6e7cd14929cdee46d90e3a6d84b80b7946ac670b6d75ae539bd7fa49411b2b8da756a5c1656e55295d895a0a187d11eed180e2a80362de9f04c61399db7f0645fadbfabcd7952b994bd8421ca64ed8ea6f0bb2f946acb99e943db0ffad61d2d564d82e80dc875d4a2eef8cd1f6a3cfcfe11c5c6c12bd4bac2f0e3726061b00a233daca77ab73f0541f6913ee71d2d46b16ea80ec4b75e17869a03b2231f4774800b10353e08e680a83876224b57089f6ebf2390ff75d71c7b7975bd56ab7c1c990c9bcf1fba68d8560655cf19aeb95e9beb457f6cbd5510c262b10c492a83a7662f902e838d41815ad4261702e4ef9b9119e69767119743fd099ccf2860eba5e91f2d0d30c2478aaa06de3e705f00e3e6201f3b0292b740c0659b90d14cf6254ecb0096eb90a0089fdad7bd7725bbffabc551d5943fbd407467a4697eb086d83130d758dc2049e6a2e38a6160f1bd71ccb3d51d4c60d422bd4087c6007c2ead39c9e4de52c13c0bd899bfe9437a8df30fa8465520438ac4607086b1fc9f0bf139d67f7d553182584867c0dc6e45d673996b5fadd621b8825f9ec239ea3561df008bd50bf799b19b42fb054e1f4661654a065ec9109649b4bdc8c64c1e7937d3f2146c4f28e463f7ca2a9a62f172f2018227981d3f7a1a5d98926e7008fc289350ca95cd8ff05f3b891008ecb9fe592eb2d2058827a18137c0ef5caf6c9da7847b533749f5e4a8627a593a4cc8813719c02b2aeddd0346ea3b188a3ecaa9d17676cc23101ed30f47d8c45d6eaa389d3b9e41450f4a26b652954aaef97c95c6a11b00010247e23d0deb230b3e62a7e5a72bdf941e3d4d4375afa7cb616c86972b722f6c216f439ea57085c38c760d2b34b7a616e10e2568c6a77394bbfb870a6b8c24de6a8a70cfda9c75a8467da690e53ce419919f6cc425e06b38732c559ebc0a5ab1fd483b2357b11d94b8b48a24f998b35fd24312a914040c7d1c9a6ccd0ee1aed26dc87e2b0c886f43c5c621aed73fe9a72451ccc8584de174c922d095d9672653d033aa0bdb77bbae609b03dc16577eacd14a97a124f699955128aada8bceaebac4a3c5b2b1553305a24f15884b5ec617533b224cce78715c2fc423b7b5f416b1d0bb64e5c5df9a1ede0e32bada777589afc5b218d647204a958247a31efc322b586dd3b7df4800f01fac59394c5e6ea6bcb096c6a5afec7819d47507e507b9a2a36bc2599995a411a7c56bf35d890044e3a94e699ddfd8f4b0428b5da1b723b484351b44a36f0e226eb4e6cbadf553cbaf42a1461b0978215f97483c73fdb0d2a1113072bb14a13d69d24d72206fe62fa7bf7e85a8128256f63326abe3bbea8f47b4ab22dbd1dd7050c8360f641fe71cbed77844f3fb11c7d5d1a021982bd0172ce93d821105172c5236d31ede04d40458cd4ad0825be77b3a6aaf6ca9ae7baff27277f5b320a23cff4288337fa0eca29bc1858b22d59af836e0f4931d267f7d2da22d6619a0729e075d7dd92750a48cf265a021dfb40f8835537e14d81ed87e3727ecb191c343a8a402bb52804b58d03f7f54b6ee9f757c18b4c63ac0d99f4d7091429236f0460cc137f276ff44b0cef07894adc440172a32b216f497619042a9cc9a242ae36f9823f3731ac11a4e76890dbd2e1625125844109531fe63f5450b5fb7ff464313ae2a7a0cff9c0632105c0dcda3f176563209e1a8f2521022574a3c0ec5c6eca604e5b9e34217a7c9f345c7aace3ba0ed8ebedb5299db7b470bb72ea974acf9ef7dd1bf21f487031ca33f6492429f13bed7d76f866cf5722f143457b0f45ab7f240784be407a73122b24e7c9c672a6150364700478a19425ce9eb8af6dc488345ff8809d83151c5db446f802d00b8337fea279f841101d658d215b6483bca85bd53258562588a3f2940246c2310e9c9d91ea24586fc844244d1136ec682fe93669c52583a54f4a556bb407f599042ba94a47d3342f24b5a545c732a967ffd37e561ebf746a0eaf75cc76cedf62759ef6e9610b121539887cacfb6c3d22ef7141f8b46e18355889c05a8b084b3ce34c448c3c9e87073c24d21e826ce92ecd62252a08456ef495435f6b4374330748efe8f90b6391d382d9ba72ae9441b25fdd0930ea7aea78f6621c0d97c3be9dfca305a43456b6d04b1b14efeca130d2dffd47bed53518ac92bbe80c85a9bed907885cb6212d75c43337c16afe662cf32cca54fce4fd0962ed8c4a5e53a25f40adad60f6ae074c5786e2cbcfb68008e30d5856a2a23fef2e005e9392ef410c663213d0fb1e69e679adea009a6dbb6cb31bffa1a3b6f0aba9dca51ff71c33b828055d953f0edf1d8106f3ffa25fd894a75ef001d0f6bc6eb5569ab8ab6c2103656cfc4ec8d60e6773e7002c83ca7860ab0a2d1c011b5a1bce24b413e6180f849cc0aed40937e13deb515c8519b6c0e18b885efc308c621727192c9d2e09e14e5994c91249030fb40af5f13f3942d5cf2c2fcdd3c3a2f60505fb3b1caf388c5d57a870028aaef6c7899558782fba53dfb10332d61d96edd3da0cd431a9bdd746d44d3cc3374a12f5d408f20773b94054c06757ae0740e3e541b34dacaa8c5fab90f8eb0623885c605a0751cb5b390e14c0880c223e1f75f298c0f99aad711b21bd0ca2773668d56b9e31446c6343fff5e8c5e0d8c439e6579506af878f18eff16f891cb3e95951f6c1eb2c65792b968269cb257abf43bb1e0d84aac1dba526ffa86ec953b53bf645a93d8fbf411d7c624fda9b889e897d67a7fde2a145d2058b2c43fde1c53b18a415ed875f4cfefd7432d246219b75f87c2c50549ac3a3788ba46bb099ce1ca731445c6f1f396b67dd04a8c59a259b53d2b051ca167af0e65b66f7fde819c5c9a1ece306afa4719f1f3709d7b810261429187ebdd3a73eef3786db1b712a45921c89653c67e2b70f49c8630bd4d847b443bb2efbe53e096d1dc441ff1845b9b4b9cea9ece9ecbf25601b5f4f98a8ee032270b62d40fd881836a893f35c4240a626ce9c5726b924ff094a6b12e1e43764a4be89e9fd9cdb8c7ffa7ee67f853fcf550311b7f261da958b121a16204b1283961616577404d278e61a916d6ac0508e3fdf2e2d147a336903cdb274e6b0c57c6301b77a2d4ce43bdce61b76a37c8d45f5e0f29c960a4d941b5d098485a2fcb38921afeef6eda57144da46c175007efd1d0c12adfce8b3c355d7b71780ca23e8ea2dbf7f17dd7dccfdf1f081580d46d0787125e98268e92460a47b133137724d883a5254b1bc501740f55fccde40d5f45c38f83fdc0973bfcdf9d5643ee1dc354a3e40e522ded707e83c949f0be8093f1aa3d1a6babb64566cd2252274efff2f2a7e7af7f3282feafd1baa143a5e8ad917b4e4fa892b7f7c1bb720384482cf3299782add3d63df4995862796ad7c35ac08ec270e8d8e55a6401c279c1d233cdc81f38010b4b80e43c47e7ad112999a4caaeb80d3bfd084f483b006ce0f5306bd320c4cc2f8398a7bf85294f8d1cabcb26759f17fd1ea7a90d2826c32a506b62cfee3557384f92cc9f4cd5b664c4626420782660fa6f6e9ab5321d026ec82118de13e53386a0c18536edfb865a76e1791d7790333c1bdb7e7cfad2d978ac673492d0cf5d5ef1212a27cb3cfcff89ef25c4266ae2e3d0dc3ec2a566e5966427312c5bdcb94f44890cbb11c722dae83fe3126aea66303b9c2deafb95e328be09c6f86d6c57890b4494e3957b6a15c93ed7da48a644374a294b025284b2c0c688c7374d63a5f75907f66ec3b487a6a743ef42397e04febbb4a8c59472cb0576c4397a9923f8c0d3cbbb566f5c5dc70be96f3c049990a564485be3e8951827e251d4a945977bcd32f58aa7f424fb25a34fa30c76ac7fd2d3031d6ba967ff443cc80594a5aa5bf045ea5bd4363a8c7442e54bae77c8bd34f7ca8f1f03d01e771303bc1ea65010a34ca5a2ccabc3aa05031fbf48a01875213a6fb75902f837f7d5292f89a63d4c8207bc4c286768b3b95ea1f767cccb32ca6d607a8c8736bbcec147c69864325dbf7a2a922ebc1fefb11e6ba10572967ca968e737e6ff1b5025243de6055f088afbb838d08575d2e4a55bfed1240db99c5b57de7783d36c572f38c93405e5598499659c2914b171de3705351961e9b320cc8b09291f2ff7e51c9e38beebeef85f17bb1156aedcfacffbf7e0204198173a5e91828294bb90b68a86d3a44edae9d9c0e8a051444636bb45bc0dc11b80f80c58094c34a1f4655603665d78223a4947025ebdf96f347d01bed22a5e624a2e2d755b3244ec4d3109e42ae821a1cf51dcc90402dfc4cbe9d9f05726c7d377422614a64f0884220bb7f0cfbfe32907a17f1bbec37399bdf2c3b0070655c2600699c3e94ba03b5ccfe3bad7e1bb436ba3b01bc0a3af5862182d4a18cd69087628dae0233ca3a210ff0f56561e925d5109f14cc1e6f90759d8b8cc8a8cdb85d297120468ee86e4b4929ef718055e772795f61fde195b1e8e8190b523f7b0410e4e07590bce36327fa278a224ab8c3fc4bfeaf841ee57e5ebc4a6d320f1853ce0b20db0b22595c5b06d9caa21fa6dd537c3d3ab86c5e141731a029c75179d208342110f8347cd2fe995bbae47ac89183c97cd33ddb9f5803336d3bc97295d68c11f5d10b40fe19d7a6bcbd4380cafc8ca0061d6bffa93f0911bd329d20d8b4f5e4b0322d9db4a520d65253b9b5aa934f94dc330b407b96267d1788466ed8fe7c87fd60ccbe7578c96140b8d40d855310a68e5a0c5eb361b50094d4a6dfa958786e9c408b4c38285e92689f6d9585ccf1e3913c3edbdb2bcf24846ba546d0444afe00cf6d5e244a556e2ecb4db3b3c2f86ff3f36f0aeb79f7647548fb9b47651c051b3796f05db8ea21f7b0c5f4088509eec8edf400edec968d7493a3b1ca80b3c5478e86a05b716473046e37a758573fdcd6a654a3d42f0631f1e4a37c94f9138ffd6adced560402af4e0345fe97d47aedd37811a86d73787f57f38044effd9b58f89985f676af04dc8b36f6c9bfa78d76d4372898232d63a011bb9642733344bdf1a0094ce54aca0d1733bfbafb89155018b9a698dd1bd05d66d3b44fd8b5a7b40d67a0f42a62916582a590629d24b17ab6278bde2f36442c6895f12fd3cf2fe86fde7c59b884adcf01fac75503f0408fb0798ce2b36bfa128db02cc2577ca0c1026a901cd141310cbb51d154910761c4924769492b5e8fecde225ad15ba56d18229ac78b337919b218f824aad4b569a1a02c2c1e80656ce4484fa83091c6f82e65f14ddfdc7714b884bc20ca2f9779b3109a1fdab0d9854cc26c820d4361ed2007719d461373f4ceffce5b90bde010bae314e0796c6fe6ae70c10262f8d4b044170819b3ede61cf87850dbf75cd69fa9648b029c4fe21fb430e9fb41064fb9371a0434866534ae9a24f9729a9d5483229f639ecb25dd04662ffd1cd6f2de10468b1ac1ae9111913f1b33d6218dbd2d7aefa89561ab3c327459277972fa4b73e70f27b3e0a473eabf204537153da6608f0f5fa1edadcd71b7eb1038e4755ab5257ab9e0b39e1ba55112600cb4a23ef175a4f8c8257ad6d1d89a591cc69696f6f68bd7b9ff5345dc9ee034907994e866d2650cde9fd9b72b8dc786d4013fd740ab4c00734af0df13fddb0d45e2c95a76ef7c6984f458ba1107674c6b564fd337807040abb63e5fb7fde194513111b52c7335107b2ff60ab15dec7a3b7757d72c301ef5117227fb13a4498457db67a5edaa98607a50d5067e95d6262a2b906e7737e0f865865161c20f1ae92e5d0de17be45fd5f238b8c18fc09ae55f36d85d23c3018532db7ec9c2e67e336084c894008db00a94ce4e9b6fd57dd0ab92b5d37e1d8c955024b7b4e16ca0421237b89f2cc7841b6b2c164cc90fbd28da3983dc00da84ce05098fc7854718c519da34f86cbee7167c3f15b705f7805dd75c99e16e6768a1829b7dbb0c05e243d86e43313146674dbfe42857e234fea6ee19151b92b32b791dfa82f36141bc93779a407c84c378476e31e3a67340cd1b045be13ed34e941b946274d2eb55bbaa3e84aa37fdd992b59667d8baf4139a5e4524f38e3b618edbdc8d21183733b09fbba5a3d264b3390a6feeb0661370182d7c4804136afa18f0dfc6de510157e9a03991b4acb482493af641b2d4ce2e847a1599f52a3b7e9a639372ad0f49c8ef1357a1340ca1762b6111091ef63b49a1eee40cd84d32daa3c6d8afac0c947048c777b4a117ddd01f2fbbcb1f4bd01d483f141b7214e8205bd82b386053ca53703fd0f8b27c24997dfaac4fcece5baca8c9f46c84ab0b8c1a3070536843ecb65f4c66c16798db36376be22821c0d8501b4b2fc28337c317168df4f020e9abbabdad7248d20329e24e4cedf5e729133606298a760d01b91ceab6fcf1235bd3b31d68e2e703aaa1c802be4e3658879bfcc8da4e374ebc1ad7376ec8f031f9f9733fdf4c011a50b46aff1809c4c8d60a290233aaa7af1993e1445afba3bb25740511baca687ea8e3629d9b4b5169bd5f68108b4776f9abfb0e5accf0e94d34aed0dabf75043d1d802fa8069de09844b5163d3a5eb9d06c5747e95e758a6ca99e85edc97a84845e6e33a4d2bc343e4dc261263e7954c77d3687a5d3cc7912746097454ebbd31e37f8d14ccaefd4d177197bcc4b0ee9d1388399b56f89fb09d7fe5e94de9682a01e6d7bde64205506fdd4fa609fdffbe9606cedb2560ac4a91a6bc67e1a9c172c207520f444f59e0d37d9d982bf017c9f264005aa70aba6417dfc85f30253e7ad8d733a5a2e0e638689ba2cb908db318d62112d8d4c90738b78225c273a7f7853323a78403f7ea6c24420ad8a1b7e99b74cf3a848a8ae5bf79890e9b09468b1b073093dd62cf3e3d8bcd40aa2ad80f86c50045c2880b711a51b34e965710b8e1b2903678945052c22acafaf674ff4c57dd6899c0a3e0b056668fba9b8f5dd527d8dc2586266ff1d9a0a438384c88d7ffc2dfbb7a0b25a4253c7a9e5f7af4413f0595ac5c451a51df3dbe2864fe0f2f8de12eb7bb59d7a9ff97d82ece8aea009b80b29b71a9f1ea9e84e11a91d1ce0170f31b803a27fa9ee0f9d155299586e052b4a81413c960e870d142a337500ff4ec9bce4696de7e618143010693bcae64a58b0954c890032cd6b8ae1e8a1d94ad1051f5bf880a87ba4607d0ff44494184300204b27fd47a650a474e13aff9c5e2540127e334920477dc60d8f92db2da0ec7f965e7229189ceb2bb04781c16bbd425fa41a3fa4aadbac17519d530b0ffe6ce2660e0173f613f2336cceda304072120e9fa7f825313a72a9331cb219562783ca33d6c32bd5301d245f5900e44c46377f6d698a92ed4dd7316bdb7d463f07099596528935e0c2cfedaf05357de37283b31e73f4cba5d464053b224941e9b1ddca38993b80b3c5452a2565c897a9b966308791644b14d3f49277afa94cb434eaae5045d22a1e945678a4386237e51324149799fc40d3daa156c9e0350e3d9b5a369ea6c2f539f802dcac5232d971334d85599362161283faff9acf3a8920a02da37d06b0b014d04ea80ffca07f7fef355cfb21864627011214db3568b4cf7a321b90c21712465331a9ea15fd6e5182a13ac219e04040a1bedf704b91a1eb0b68da3b6e1b62cf01fe7f71172e48bd3434528091945e1422ebee7a482adf0eba2a6d7916825fc9df48166dd44422c28a8ab28fac78cb1ec0df8efbc7e6e477d57983de8e33f70d3a95a09b72547f3df6cf4851d377c4d1a35740807805c78b07efbef2e20d2300508b12ef8143efe12f8f3adbf0d6d686472a06aeb94a709a1e5f39177f26c8349a78da17e48e767ecc26bad636ba65bf70cbe5f118b2dc1d128860ddbe79ccc3ddacf89d57faf007c966260f1bfd22f2c952efd718fe95b8be7f5dd58b3fa319c17f59e563255f1fd2da36b13948f91b55603216b5c542b0141db7e7ad30734a9fbc99daa916acb327a651726730c86a9d8130cd83ef147a75ac312c44e4732828d02e5a5e7ebfee6b9d0bb95c50f64f87ae85684328b58eade74bf8eada56c9c08902e8ba71f90411565bdd0b4297ef0a471b754ad052f2f82b8317bcf56603fb8634f79d3e68a71a92feda9cba26caca445774ed98f5486d6a359d53b023573d6412f3fa7d9606ccd9caede71d156f9050e28fd3388c625e6bf837979bbb64f317f1ffcbdbe58fccce96436e7ca5b60ba007963edcc2c4c82a74a634e3b66159d9ea64c2d9d52a67a90ba0870898fcf28d31cd4db6e1e57ab859e5fcb1c6ec011d6360f5e3ac888f263e8b4c8c7c7104293c10b1fafb41937940335e96cdf92c50f2f0ea93424d04f5fd1758f3a74894f602fd64df013342b53347053188b93d6716ac991ee1dca321c2e93f8990b88411daa7e6dbbbfe4d1e7a8dbf9dffba71a2352cecae6b1db299a27c6df3f69de892783deb9dd1865fac6b25ea7aac1795c04ceaa12bccef59cb0662b171007d571bd087ed82e49c5710ef3cdc7c9aa59015d87a941c7d57cb4f6dcf765e46f03ce6232f9780d4e8325c4920939ac4cdc0d5dc71fc615abbfa520ae6d7c5d7b582921a9c8999b85103237bdc3176b73ac03cb834c3d32babef5e7139b2b64813f29df0bc26764a5398c9c5ee2219da7fc3c706b2b5bbc49d745af5b0d3d09cff4171f58a62ec2e184ffe434c49ac26cdc8e7cfc554ce6366c1ad3a261d5edb3145d5dd4b5ca87694b647b6770c3bce58b471e9d107f83d8747a839bec4a7523834c35c26fd65df1672e2cf7e15023f91848328afec649f78d7ce3239c91707c49dd324e4f26d796db81b99b7832fb0a52ef429ce69c44fb50c806704fa245909b2840755bef689f99b351872ab43d9d447fde98dfafae45911946683818bd385cde622395b262879645132c825cb68fdadd83462140170f76ed21e2c4788da1120ec0998e28663105e5bfb5ecfa22fb545313673f449e4dd27cd07314f3c6ce59f3bd498eabf9da069a8bda91bba3147a34d343bfef6fb37d4bed7d5e7251eaa08a3ee64615585ecd7c803e770c82d2d74f7fb417127b6ee190eb0a987685e5f3a9ca617454537e2a50d47ae878859aca77061e9c7bf54cfbdb6c859000bda80ba6c817b280f91879733188e1789febcbca5ca0ce76aa2ce19aa1658564adc25bf6f1af697314ea2f333ca41343ae109e61a751a3800e0b12786a80b8a53e5f20b5867cd8c42f04e08c755be52e93d6115d4210b8efc9224e43fee441703f5e0ba412e0878deb42c01f4b613861692031bbd2203f9206a7c33a681044e4752fc7416c70d33e45e89d79a0159435a925c45cfbf4b4b546d4bcd68784a41b276c74fa099abc9e67f4283a6f6d7c58297cfd07113d656c3f2b09653e833e3bf61ceda65407c0197373701603ed3b70883aee03240cac8ec465c5eb7787e058126f756404acdf3d8fa8761baad842582721ed65753a2c5daee18664c379bce26ec2315bfef2aac68738051ec4e15993f46d375fbfacb6952663b79833b5d3864febe0fa008b5f5b357d8b415b1789dabaa4ca2886a7a4ddd2a629e71a062e640960a9e07bffed094545e5f384843810a64dc4aa1511de1010e53b6fbfdd578c731e99478f44028cbf8df5956ce296302cd95ed4c648c9789f8fd538f388983702ab46dfc50f6e40d419ea9dac6fedc1392c066ba4e9ab8835721514938900d5d6f7545856726b46048a97c3400f90f4c134c6963ca26161d564d7827431f6b1e4d2b4ada4ddfd501e97366e1a0119d3056798d5e94fba12f7f612d064af2d6e1142fc7cbf877467bd6d0253cc44c7941716db72d628dcbe2d2e99ad8b862d94d16441a7c9c97c0877b048c57ff2a566e10185e1a4ae883a03ee4ce4e0bfb7343f6bc6b43cb03ced9aab879453d9a4f557ecd2a77c6ebfb96914e0f43d94b3159842fc23dc999b43c9b8465d32f21508aaaf520bae39a3720bfbd8e12b62831ab08005fc54cc06d3d6fbd0130ba7a9719b5cea8dc3c7397ff0ad90a827459b7823d935ec6d0d8fb225aacf166e85357d50ff21b9927aa26da94e0d78064fdee5efd90765d8b0ce91d14f81305b4e0446a0b87a7791d9a0a25908c7092cb9db7ca9ebe4b19dbfd7a6e9eb43b13b5c0f5e5959242f95ab63009020f6f0e1240f0597adf3445c39a5cdefaff66a011635951fe465cf13b9bcf1142b2cb05a4f8d5b7f10a1f3f3d53e876579f9fd60f60640602838ac0eb097b9fbef8dcbc8f4d5698cceeb52e019c617fdb1cbd2ae24a442acce38c9643117432a65250bbee6a8631980258e9e5a96e7efdd314b00a75ebfa7abb594c31464ecbf0e19a82821345e222748e404b9512a8cf6bd19ed465392524a8d6ba83690afef9bd9e646ab28209c1cd9ccc1d137cb853e842fc5fc70a650aebe2e94ed7c5d4d6c6f6363bf905ab3d689ff285bfc679bace43e5d8d46f604472f33bd34dfa39789b7fe347e9db69e92e08a6320112e882d62dca971acf417aaf651457960c13f9a3890c24470a0c642f416b068e5e5e58fb6562ce779e4fd3dc7f73560bf6bb2be5e033dc7bb862a4e416ba9213f8a51e5dac880ef0b03f0b420bdad32696c931b1073f818f26ac58ddfa6af9c0bc95a46daaba3e4d94ca22a38dc90f39084b0a7794442e9545228f3e4139e8e7d855d7007ffbe0cf0b8f761dc89d237d30397d090b55fd537c8303017c0833ddde0f2b0c99e7264baa071c042df24740eade8c09acef0aff3a57dd53e47d4391c745c9c692b9df4abfb207ae69058c0991c80174171fe3bade4428c7660a3b7cf07784ad8e50eddcae870c197f202bafc959d6e5b9e4aca72389357c61564258feab606d93ef0db6eee31ea03be7091fb78efb5009ef59ccd1b6a99ab77bdfb354f330eb45c9f861c751f88225bc1cb56dcdaedccc0046600742693fd2cd7b36ee5b703c6b251d8610d212d606ae39395236c8d6c943054a4277ba8e7f415ec99006a74d309b7678699be6d3b4d3f7654698f7fe91dcfa7b40fea444315f7785cdae6feb20a4ae95029b26ea0ac03309be0e5d42fed05a6d05e1492ff4671cfdcc903aa2de78505e6648ed998109cfbe4f68f216ebcabb759b5e46b3702a78375827ef3d2f7f41afaaba83972e1a177f8cc23bb9ebea87deab27467283288de7adb1a6b5d85f616dae0bb2960eaeab59f2830903ee3a7c4d857d3f8d5464bfae648d6a96bbe44c7fe0eadc28a252ad88ce0e505fa58c32574476e736ed25e66d862eae8ca1c04fcae7a45dcff216f2a476c2daa251643d8160eace85f97cee2c8fee9fb93a0dc2e4f2c4e70c32162ee55171116ff12c76d44418a6f3e3da8091ad885692c00ac40184d7921c4cf4e760484709caa4335cf20f3cc5d45c5790e63b900f1ae39eb09f7b95cc648aaea6c7fdbea5c0a0613f9066245f330edc53ed0436a3e3b1a9a683d984bed890f61cd4e02a4cf5a67f587a836d25374b886e9b1cbea849b006451e2bdf553eddee231ed4fc5cb8f2e8a5153fbfcb74f53e2019ee342219adbf12593518de0d1fa9b1515e1331c445e1a54e6dc85913d4ba2f600656bb7d4fea1b9c9bc3b65922e1bbb3104116cb720ca04c6e2d1aa76dfc52fd46e7cb5b27d50ee73a0bd8dcc41fd79ab14ba13091bd4e997a46aafd7ba2b5a45b33098ee00e2b296d2a1ed7809ecde72a92d75ab72e958cba94255e56e990506172e0ff327a3788188a43d89208c2140378e9640c297a64e1a59c0e34df45b197ef5e083acc9fc684df7ab1f90d59d1e4631c7b41835e1c4dd64d8285820400e70f0f06bf7ddbe630533d956174f83ceabf7e80763528833c3dfe78d5510fe3b50f85055db0b36470ce67f1dd7698970dbde241831dc6a89caafc89eaa10f949ec37f42e6302b87bc8cab515abbad6a32101c0d096104a55707e1f730ac3b4e7e4d2dec23a0f58f40927d2412bf93fcd26a25ab1c3c8966b5d27567d031227737c5a91010c8a309fc95a3873a58be65d3245b90ac9dee45288fbf14948a6627e222cb502889627b70118836be3500eddfe7ac613849b1af8b21ebb80e65e019e317a927e94073b10c52482d9154f688b835962718650724834d9f4fc4fb3fdb9dcaec72bce97c12c95c79a3f88b81d392f8bda893a61855e081eee5cace4c237ec442a26790192e3b0bf678b5f89a2c95a0947508d601e813a694005cdb97872b653045c58895fe100a8621adb820905ec7b126da47102fdd747e350a3a68587c719dbad9b93124ecab8deef308ad47fde6489e0d5e8edd5dba953982643bc06f1f24cbd9bfca51c2aecff0eaba6b9741f82e885612f7fca0b38eab6c952cc94ea04f6e9f2ca3d53ca586f02ec027632f7054ce9734df2457c010b28fbab026b2c4fea0bd1b9c7d3bc28b84066ed098192a85b5f1c91503356394b209fe5f2d2599d144d5be76901b56fb8e54997aa87b1fa2919fe6f74f3351546c9f1cc394a81f6fd3fdd591aa49be4b6304a2984b4075d207af53116f3aa5c065d0a44c959f47d76abb3e9d0f1fcf402b4d09698429bed5e8dbffdab163ebd32402b840b77c030cd84962982407fd9d7dbe2f353b444b058dcd6518e9b86e6e5fc9aaabf5c5fd85eeb1b937d00ab17a6f3ed04725ee667537aae28843b6647bb6a00bdb546a7007b67756089adfddf64b9ec15f822ce17a1cf943100c009097429989ebee196c69076ea693982222d2a554b46e27609df5374c0e8a04be0b44ee3210992156e73812f86e25e4e61ebad541955c9f6f10419ba05b8746598febdad159e14eb56f13bb9d7ad3f8bde5beb8e2b95e655c79031524510d8bb76e01ac3447abdb519751ac20c9cdc84a01f310178ab24a2eb9139363ad213fb2cd6492beef04fe957b4b1f3df190ad15231d715dc0652d1bfb87e367379987417b670c75d9c025596fc4f8449cf321db7e3861f2fa51d7fb6cad8211c81db2e51bbc2f71720356039bd3ee6aea5e09ab2f3c1a56d09db8ddd5346e92754f72170d443d72e5b0386e7811d7091528b8b1896cfbd36c2afd577ee394adcfe3e79df35ca76d542f1daa988eab52a8575722b1717b1a22f948c27d1d42dcd42607aaeac01b1c014f1f9ae3792d50fda8277cf88bbc5f82eba2cebad5c17439141e8c16c6f2de63ad16e76339c9758056140d0bc4ca76d8e62656bc05a6b5308f67937b4ce800e919466df921843695e612059daa12edf82e9992aafbc0dc9f73b81913b09ae05e96acf7ab8f8ae363103734967694ba67d065283dc96a33fd4d5449b496e857705d336fea117b5b632c0beeb0c7c695da81d8169b6d60f8b9f19ca3c54af6ffcb48a8feff4bd23d12d69a4d1109412d3ad398f150f06784048145203f3e5157ae3875ea9984254ffec8086c0df96d7bff4bf0574dfc2e41a898670663dadf62a6f13b5d4cffff6a1c1bdef753ea01f46bd4ff62143433cd942d3cdeb45193542022d439248a1ba673aa9a30e23882f8b0273f976ad26c9d21380febae099cf94b5c22d3b1fb0040e19c534bc5d91cd7317e9b3a73edc8271dc21d941aab969e1456bdac73cb58e330efc425160d04bd65109e83309c96bed9f75c32a28df5fedf8e1f618becb15f36ab0d6227a83e71cac096d475c85bf8a5dacb55903ee383feb5d1f75182b750e4804918cba34efd6ae6ed4a9c6cfbb5b829075a285452a06cd7ae2c7f2d1fd6ce81c9f5fb97d9c1871959cb5b19a374d25f5836508ca111dc25e41d05591c98c7641b5178ef1040a77f344f9045a8199d724dea4c065fafdc755e9e0a458f4eaf22aae82a58ea0f176dfd32ca93a7e1e2b06db516096808a90f4e988328f0b8c5169372f0c5eabed3fbe6b628a47a9a770b7363ca8ab3ce74bd348138beee99cd0542512c898e9d89ebfd0fd697fa63dcc686824eb5524f2f80d887fdb54b6e825648277153a78e718ce36d562882b13ed1ca0407c193689964f4f9705d65631b096140620f28a8f9bba1c2bbe052697e2df7ae994f7d54aafdf3b92b46731b142a692715d93c08c8e3d9c2d81cc0706e3b3358bf2cd56b0be69d75c0d0ad9558478b56de3582df202bc9f6700c26ea54039c9b4e1acf75b7154354a871ec00ffa7cea3c066cb1390f790ad3ad2962a9761458d3c522665f6075f95bd444311820685cfdf46e6c713404ac4ab8b5a31a301c10555027852a8e9ea2392dd01ec68cd5068d262e6f5e28c94b3eb64433507de810a5265adc89a9bbd3068f428a0b9baa2054c879daa8d7aa14862a0079ed5378626e3a6c2f0ba376cac045209370b35e058c06fc17023562fa97b429966f439e56e05af7a5a0cb6c3e16892f11eb9d42cfb705d334349118af3a88e41434d503d43f60c85e198bdcb5a8a4973785f3d94ff3bc52b2475716e4cdc89a2bbba75cffae8d8a3861fff42f3ea50c204d5fafc36200833f853cc117880e1833a2c8c951ad937658665bb4d306e83ce9d0bca9f48ec9355ce6a13833f39e926d7454da0885b4b5690976aa5c4d9ec508a7a3429b68512636f408bc3c31eebd172f100c12e44f2a368bd9c2b98cf9eaad52194cc601e568ca578502fc4658042cc97e647e1ea5e52e2d81c25f3a5d159034438e72f2287e65a0dddabef47e9acba3ecaee646988141c4204d7873bb41b0faed318c59f00bcb48839f808657be8c140a96b77fa9cc4e8777091c7e8ab9ce'
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const { spawn } = require('child_process');
|
|
38
|
-
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
// When called as: node -e "..." -- arg1 arg2
|
|
41
|
-
// process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
|
|
42
|
-
// So we need slice(1) not slice(2)
|
|
43
|
-
const args = process.argv.slice(1);
|
|
44
|
-
|
|
45
|
-
// Create a temporary file for the decrypted script
|
|
46
|
-
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
47
|
-
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
48
|
-
|
|
49
|
-
// Execute the decrypted script with arguments using spawn
|
|
50
|
-
const child = spawn(tmpScript, args, {
|
|
51
|
-
stdio: 'inherit',
|
|
52
|
-
env: process.env
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
child.on('exit', (code) => {
|
|
56
|
-
// Clean up temp file
|
|
57
|
-
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
-
process.exit(code || 0);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
child.on('error', (error) => {
|
|
62
|
-
// Clean up temp file on error
|
|
63
|
-
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
64
|
-
console.error('Error executing script:', error);
|
|
65
|
-
process.exit(1);
|
|
66
|
-
});
|
|
67
|
-
"
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Protected Shell Script - Devicely
|
|
3
|
-
# This script is encrypted for code protection
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
NODE_BIN="node"
|
|
7
|
-
|
|
8
|
-
# Check if node is available
|
|
9
|
-
if ! command -v node &> /dev/null; then
|
|
10
|
-
echo "Error: Node.js is required to run Devicely"
|
|
11
|
-
exit 1
|
|
12
|
-
fi
|
|
13
|
-
|
|
14
|
-
# Decrypt and execute
|
|
15
|
-
$NODE_BIN -e "
|
|
16
|
-
const crypto = require('crypto');
|
|
17
|
-
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
-
|
|
19
|
-
function generateKey() {
|
|
20
|
-
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function decrypt(iv, content) {
|
|
24
|
-
const key = generateKey();
|
|
25
|
-
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
-
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
-
decrypted += decipher.final('utf8');
|
|
28
|
-
return decrypted;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const encrypted = {
|
|
32
|
-
iv: '653f067b48d38a8e248c45d6c62debc3',
|
|
33
|
-
content: '9ae4f52a0ca7c4144700eccb448eceb1a7ef13779ca8f29e6913bcb52068b6252a0057075f326c841137396e4242033d2f87dbcc956c43d51a72c8b2e6d824ad4ddfe012b56e701e965294c595bdd1d18999d23dd2128643ce50e3bffe492dcc2c0e3cab5f1901ecb8fd375a4066c5f7ccf4d1816149f96094aac45c9163184c7288f3448764a2a0e49c43c8931c4f78998ea3028b37ae85f18a7fbd4ad4552fa36d8d05a64d7536881aa09a9380fc49664334ec6baa8c3acc52c555df05acc874e602e8c67cd2aca681dd3ccd2e6ee83657305728fbdd8ba0a70801c525807ec281b8556caf5eef0d25d0afb96d3cd746f3ade0f035483938d7bfbb403f7c47390b0209c8b44f7b53f8e457b5e6ca34f51c2a9f4da2bec9cabd757ae399418643f2c9f617425c2b43950b4dda5b34cbb3ca31860226f9312b4b20fb91660f3e07771cf50ed9d659404b288c78b0bf7920667775a825d101764c1ec8963261917b0bcd02c02a8a06d9c010d929da49cfb4f45b7018323d28d7de18125513618a95c62da03e6112bd1f0d1ab3067d7c207befcd71d6cbdc9486b0da2a292b2c2401a2b1721f3073b11c9b04ce1b24564a2ec3569d8050ecaba155c8d426c753816453a9567c53e4af9eb3389027dff0b6d36f3f763dd50384081318f1ed3405b1455628f84fa98500bb3cbd9a04f39dac7f03224e17c5275bff429c5556491c313a0583fd356f651e6eb3be4563f3ae8beccd7214d9db14525f3c7cb63ebaffa73a1c72140e29a63081a4e2794bd689d21c9c9573bf150d38b3891d356361a23fdd9af60dcd750252b09b551533d8b8e548ae561c24879acccfc1f307b3c1529199d5cec908d95039647132602ca64078ed61a638df96e354805bb5847ed3433c9d6d3f296455678d6d89749edec680b7d16a98cb29570dbb045f8b0b3bf9ea114f470e24a7f7b015fbbf2b3e1da491acc0a3ed588a2ac538cb9a800f3b9cc9827792312eb684fab04a0fde0c189942dfd332fc06116ff1890049fa7847d3d3d4bc2b4150dace289e1ae00e3ec6949907943ba1f83d4ccfb86c424cf254699f43a44d63bb942d414b18466b4dd07d5f6b1993acf8a9d9316a092918a9bb9caa7e2411417c9e03f832ac4f96420087451823fb9108a402d396e84086b2aeba21e8faed7d7e4ea0b33a7c8f59134ef5b418171b2e600d152bde7d86b989a6d047f94e712d6ed2c3e59e9da0c2226b57cb3a5b3f265a1e05580d0141e76b15eb245472c264d584e1af52cd12be47311f47c2a7ea0edf57abb68092eefc352f8e7ea4124364f12fab7ccabed9a877e5a429061c3d64dc73d63aae17132af0ab13a0cff22c8e5a35f04b7cf82fa1938e43ad327bc3a6e15e7802f1b0f13112aec6db4161760caa2b511c2341c10125442cfd9e1dd097a5a8d6a767c1d8e974e9b00440d957f885b5a2f1068f9611c2f464ecacb18b48978d8bb1ea49b0855c273b2e61cb396383a71848de562d30806c44e175ceb32cfd0e47e3fed9e7a7a35b03484388f79ebbd13e5187cff94e41b8d03e0db4f0e1f7b7d751691381653b774f4720fa52a78f22e343f751973086fcfb6b1036031d2c6f5536fb24132b6a7cb63b03bf6e3b1c7be443ae1d5dbf07a4b4ce915ebba4311e8783ac1a611ddbf2625d82f651490101594c90a2e8043599c52685c990eccc8a93cc3f965fad97c996c2673d977faac460057895849a0d1586de7934eaa17d1098ac87f15096c43aada022da78a42086196789052364fa516986c525ffa53414ca01a0455c3c22edf43a0ecfc27cd63a5c762867e71ec3ec9819f6dc272036c97d0f5d6caa2b8e0cff5195e34f7a96902209816a453fc742ab56bacaff0225bdf272f7257a5335169ae6f21c8e9f0703c00bada419ea495e79d76b487c1ece6f075ef6ed139d0a179b500ffe62dd7849a7b173cb11d2d60c757711af1d630b25cdad94979daf17d6eda17f5e09c2181576c745461d3801fe8b7bdb98f057d47050f1c1b7d2b275d2770468e60035741cca0c6858d58a086543535ac015ace5ad4d948e4ace3654da9665a7d59788925b50b099a006f5279113d1c9e2328984032008023a5d3d7d09bd5a557d047f23e1cd2317dabdbb40e2f0b13158ca71c2e8984081a6395b3438850cf497730562de7bcb9777cc4266736a9ebcfcb39215bf6315dcef3e6ee59fab970b34385f74f0060eeecea003de6a0bc0aa94801a540d6b1fe54564db8cb31bc960b10dc7c54e433adeffb88f181497f6ea927d4d6d760847b470b0dbece1bf710d11139718942e4de171c9b0dca9cfd33a29bdb1d28bc97804883773d9874bbfc2cc6c8ba3c07efe967156bb57acee1a2ca3564b98cb9f993f072046f738dfdf64ce14557667acfe392f3c2128c18ca3cf269029a749c15259c13491357d17e71b8dfa879ff7ff65c0b507c7581063a543ba5f75277a6173ebc079b17c31890c0a0804532a3c0637bf05710b5a7ab7a688e549210addc8a1355a75d2909ac86572e64795362dda7145696871d22515eb32676e278166a179fb03e974ecd1c3e172c62621161438c41e295973eb83b87b9623aca04f74a961153cbbcdcd7808ba28399a29e5571c09dfaed82728b0277e7487085dac1c1d6300fdb63d3af0dcac93cba6e77c38a7e7b2d75f0a24d86657bb24db54cd603f2b45076265bbcd00e76be1cb126061b7b746cf36dcdfb52dca376c3c58af514966606e1e3101d21a98648870e84c636f29e09627a2761561df93c81544934d0f890a0fc655d4e07aef95d07b6d774b1d855d45d1746caf1213382c2ae288a1faa423c80a343798484d2349cb610d33a691d4a3914c047d39f780ae3b130763746df2b5423b07764f8c4245d2e4fe22c210c17d59038c374cffbeabfc6ddc77b5cefa131d0cf361f5d4b396fcdc0b6a17ef69738ce65edc4ed3d38d993444dd825407bc341650a35349235102a1abaea1a483c83edbb1685dcb69e297d8e42581b1ef647c37b629563528bbda92f01b5f7f4a8ea3252ba2b8aaad2cbe4e8da2105fedc4a2c1fdc9ec9a5301f9464910737ab27daa223ee5545c62ec812be911f6868306a51db9e47cc2bdfb1c7c6d320cbc9d843006959f26466778bb4ff51fced33d8895707b8b27ed19d7b97e191b199851a0c42fa707cf804b832837528f0fb75fb4f73dfd37526dbd10c26a1aba2865c35878ed9dc48cdabe5e56c6c64008f3b9620fceb755c02f16c0dc3af66e8453bef84663aa1abbd8de24ebc3cb6634ac66a884201cdd62cd8c6aa3d7095e05e9ebdcac6f0da9dbebdcfe142af0d4bb2ada2c9bd2e364e6f557810ee9f8fd60b7b7c51ea96e5e7892f86d32e01834138e231c0aaceaca7dd0debd28448542f4048b1f060627432fb30872d4f3b6f9bb63394801dd088212376d602d3fd1c3574bc79565bb60b3580090790eeec15e48cb0157f6b21d8099874395b6b9b1f43127e5a14aa270abb952abe49aebd3f254e3ad6770826147b6be4f57dba4c9b87ed05adc1c5beabf532ab57c65ea90673bdbbdc6f422b0515693b71bce7615a6ab37cb22588cddad77fe47625ceb61be3a38cae5a82c71c7577020383e284e529f9af0f135a124f756dc102f31a9ec6852b2ce881b664d78c22d5bb40556561f6aa6c7b2e70bc92b23d0ac0d4f56368fc8297658ad7cc9c26b5f5794a0fdffdd5979d466dfa4b6a33ca5fa09de73a19907d983c394274b7d16b19e89f93f3f08eaa472b50c13ce794076567f49cb53ba1df3206e2f0911144e59f39f96c6a475b6ffb39db245d08127473fd61ef4b2f7762d005aa339e8c18797df0dad7fae2a2baf56d4f34b7271b45ea4f848b53da34fc17d61ad026d0d310aafdc124f08c511475e9a45c8515ec52c48aba1e1debe085608d7c81fa1b590280bd0cb0dad68af55566c3012cdecfa50b0100a97f6e5c76ed82bdf92b1f7d5c6285af1883ec68611f4e6fbd70628b5c3f6404857c67b99c569d8e81324452c7aebea6bfd8acc3960b488ea29b27e9a68571a612843dada95b6befd1f88def180fb3b307db1547c8ccf1b1398c78f6bada8db4a01b3abadfbac50024c84156a78a1af2a8ab2dc54b16a36c69ffd0268f5da0c59548227baaabc623524256fa5d69dd798822fb5c4d641a914bda594f17472a300f5eb0b04756e662b69c4b36e6b47ff795a1be4b2a7eae8ed1f5977d850f8541affbf9044d66330d5d06c294668e0e83608eddb8551807e10de4577bb7660d9dbdf5b0bf2a80521145842e7e5ec9a57823362a88001bcd1e5841a0b82aa175d57fc620bac52d8ae9bc492be52cfcf290232d3a1ae2176e73b80bbb7342fd80156ea4330c5af000ec2b0e10ea20557e3035d34d22336fc982f54266da7f2f59b8468fbec061cd21b1e551c1e3352259675e1e906803ea982bbaddfa34ffa430810d7030829bd3619dba275ba46491d861ca04f17d5cdef01a322237c5f518b692afe5279c155b983568bafa661e6a2b0311bd2e5a806d441cc822671a0557c5c94f352a09dd7ba5fb7000b169c3188c62268cb6aadb55d7353cf42b1177af5392907aefbe2801068c121b6f3cc34854b9f82d83d2289af5d11472f3f278b1933e763f2960fc99f84b91f2ccea8c8a390e9e9905967f9a61d83fa517579a38245cfead49df4c22b4b02cae6a35bc914345aff0416869795a3a1a8360e600029436eb231300b6d26259950be539be4c343b42e02e58e606a006e3129d68eb80729a5aac4ef2ebdb1cdafab84c48223092eaa1326ffdfcf2123e044de7f9dff9b8f762918f30edd3d875ac330dddb58ea5ed757bb2ffb5b98cb0e50a8bfddf67c116350c3fb9930692b721fb1860f1bf286d8b11cf3ba1d2865f7693abb4e8f1181b66cb25e33ebfa850606a87d101953a9f01b15f38f0bbd6d6fbeced08285d82ffed9976be7b4be61973859f37767965aeb05d7de76bbe90fe514128a8da28a5d0ecda1bcf6b8533e7a50571ec81ac54575cde9d5b234b3e3b4a77644114d99c7dd76e3bd678f69aa7e718d083669922b9c947c2ea82411ecbe8d1574b3a7aeebfd374235d8ce9d33404e147311f2b3eed9dab3bdee225df1647958425a4cbc14e622e2b572e5034bad918afa985c6bb561c4e47473df7157af35e07f39a83eaae8e9fbcc722755a59be6e1c297088d05844d7b3a78c61be8b22a45fe158d0e3b23c05841b69fe63c727a05b09ae0121eafc59c7d8ae489820a26f3a0ba64748330aa6cc02c44869f72ac6c3b60edd612b6c7680d58e657c018ed2bac47c36b5a79b60f4849b68d185d6f6b5d0bfde041f2324cf4eb01df0bea59d1e030501a5b060351495e65c58400df39b76a70dcdb737b0659bcc8ff789db4a48b119fef0a68d024feca9d4e8a504508f0530a18d41e59f907b1405feb9b3024926f903d6d09194b1b2e5789d7bdd5ac8faa5a58848c3dcc729a2c7874e2e9d046a0c600a084f9065b1ac5bfae3376088405335d9047f92e6b3d62637d974550e3c21980f8e06e432b0f966d6af91b64513e89dddd8d429b058b6d28bf063966fdd3406214ba82d8c41d4b1432a850f14af1cae81072979cc0579a94075ff717a275b80b762c5658d4faf5c882cd5b57573799bb98300a7745f48cf0dd4e191e985661e89f824d218c7754cccc964078133a4aeade355063ff6b59754189a149a1abfb625a99177b4aac0333a5983ab38b7ed11756e6c2c39f3f9b90ba2d86ffa41dc14cf6113174a5249742efa59472b9662ac6c24633ac8029b82c4176b7fe22a21eb2d018877db8b8d64897f49bedad3707708b37a2a809dce1a63a2a020bdc6b8085f2f5707006dc5602270dfcd519bbce4008be0c4adf1f216f2a748f247ff856fceff21713b5391a097279abb230d9e631562424109358dac7e371712efba0f8ca9e2e3e71cb344b3f43ecf51321108462373721469b23cbe5d783126c6781f7f664c34f2c88681d76d47e22766fe2aeb34300f2b03540be0aaf0adfaaf3e4d586bbcfc6abc56b79ea715e7507b7aeb8786c3810e2f31868d3efc9c146ea88d780a807f3794fd04a05b7f810fc96f4895514a4965004a474595dcf604bd561e17de7911f10835980e5fd53919af2ae6b0fdce640912257ada4c3cd1de90429782281f3883944aa50d1c687d05554ecff215a37f53fcc6bec10762432b2f6e19ea68308bd1e115e6afea997b4e3d196a60905affaf45013b448577df7a8efe95db6620a635d49597dcb7348a20dfc7d9389b20641bf22a6d61106e6064cb2a7486c81e204607ec146f1d7a36ba9194bdae01be6d4926f173ccff405a3d7caaa78585656571ef1926b5462c9e11cf6c349da43f0a552f47512bf02727fa750ded594da646270c0e18998c82490940ee0e75b4899df13459af7fafb824263938b506229691a4b0496f967489275f2be1d8513ac4df4ae0973a5282cd3a1c966b0673005b376e48c98a06ded2dbe1d844cbb128c84bc7e4e1fdb4775924d1d4d2e1280dfe1240ab852231bd030ee48affc75eaa984c53171784a2c47b714fab47614b3e121ba01cee12a08d76ed871478313d8ed2bf4041d4155e6e91931a294cc74f7084c463862ef08bd4b64db71a5d19b0b85e3963cb4196c9ae26ee5dc426613c75192f4ea2ad348681d400338c59e94e3b7fe876a11235c2ac1f1603c933e819a829194a577aca7a204e03b0f4853e86ee7b8a1178e58e4ad0fefa09cd3b5d060f7474722835f3e1e58cbe437970ab4ee33c747f48306d0e5d3557032bb28e5a26a3ebb17752bce8852523353bc1125cdde8547c0e3dd370e8a5c27f98030dbfb34b2483b040b82fc0fa76b6206459634e85c9808a7cdf940d3f590e05f06e8ba947f4ad9b4c20b72ffeab35c516946253848aa34a7e5e5def45a3687fb2ddfb4aa6aa28e2e4a99a9626afd5b6a78b58d4f36d7eac29c52121b32b13b3c197bce356deb362e4106067525c23461db8b7063f50e05b7d8b42ab8bc3ba2c66512ce4055f83c8c1536e6380b03ee1d55f9aa14ddea8a3331ffe3a9ece78c0190dad52994d8e06a28b9554628a113b1285a5abd56bff89c42fe2c4d452344e355b6c627f194c50dd7fa6a7c0464df0a5880b85f3d4cfa1f7452b68d337dc1d23e3cc9d8fa5899f1c1501a2ee9114f306feceaa9065396b53241dfe4028158b012a7fb0ac60fe5246531a43709faa598cbb4f225c789c47198b38771acc2835aeeb2d1a6667e74d6df355c4c6122cf2f28a935ce0af7a4bbd81d8c828eef5aad24710a82f9b309540e6c24b50d9cbf8cc7dd36222935a4493aea738e06e5c6c4a31b5300e759a6420f32b83dcbc0f79eeb139753bed0a2908a5b9614c23711df79a0a01ba48e3151cf08ce26fbb848b2563bd9cb8549f71844494ecf178b0311c5af90ac5f53bbd2b2c93618b100c60b051adf27f6e75c5c1fab358aaaf6339cb6dff6385f7dcd7ccdd6b6d1ffdcef43203142664e5eb5112c209d17e82b42c0ac05e0005f7b07fa585aa0bf1ca1c5273265c7a375fdb3f5cedfca9a3f3ba0efb502565d07c748496933fc23c5dcef3628bf596e431a3502ab13fe8c3c64e1ecb740a36b3670f00b67ee5ddabee0906a841527fadd6c5edf7774671843c6a630195d947f6c12e698a24c847c4c5ba948bc4ba2f3669aaf61524b9e5b0320b0c91155f5b4348bd5f22981d3e01e048f9ac51f62153586a627d48525a344ca73dea2bc7e66a5163d869bb0c3762585011a79feaa060031377b680548150ad1b8fcdbd277d6894b20ac092b31d64e8075f0f94a2ff86d2db64969c3451444b5c3afbffedf59a5497a36a3a82042bd01a0774d287b1c6f2a9642f11e45b6b1b771affc7c99eddb9a75cb33a60db60a56f87f858fb4605356ca29c9cf3239cbd42fe377398a7168c06a919963ebcdf6767d87cefea78346ec4321bdf5c5dde1b38b878ac0afd68297fc7093ec4babbb1628c0b082f140dbbe15ca8761adbe388a36b2bd303c207ad018b321a810fd8f85ac5bb70bc5a58c60f3d10acc675aab610bcc235ea9586a7661cfdc6f3026c66a98e9746721de6d2b8e0055c6990222e3606510811c35a547e27236effa0544f1a88c16cb6ed92f532593854f379d4e00e75f5f849836915affe73cddae87134ec07d96ddb6134d359463d7ecb22e13121f6e80c2b0a8133324188acc91ceba11f5646be19f43fb2bbc4b8b7e7a8a178018ed46f7a85423a4e543441c982549ab9487e83b92de6bde65d6761690fbc6e26c5693161e26997251bc5d26446a10506cce7f0e30428e947e11aa55ea1620c2a525c144922dea5476cfa1f427b78153d6d3d973acace580b62effa179dc23a5b2f089bb0ec350367dc52cdf2cb7db965cc0c8895395000a2efd0ebe555da5f5a5aa7204665ee8566a1aedbf14a387ae062ae67a1ee14b16a196c65e00e49172b529b7e2c920cde361d8aaaee3975bf59aa1fc3090f76bcc69d2eed866d96ba0205437f6024a8578d87057e029cf52b0ece06a9f8fbe69d6d3e5212fcdd848d17d1e3b13cc84fa35845ed60f0a3ac76f5918545a460ceddf3abec023cd491a6add2dfb9978f318cc0f4bc3db27f3e607e5fda6f163580cff747535ba56cdd6cc1cabc9611ad222e8f2d34e9d5978ddf178ec3e74af3aa11cf3e2742ad4df2f8d1da01babb536ef64bbbbb24bff3c2739caa8c4f3d0ad6fa163b04f041db9e1bb7590d044a487b5a3d7cc0af27ef14ce55cbd5aa489aed5a0f109cb34919f972c1fed7cb2655f71eb99c889da0458af2df721448683526fb721d01969764b046a6c2e2695ecef7a36540eafeb9ab6a5b38e8d003fd13586a8183297342802ec049338c702e905f14ca4b73716a285ccc39ef7b7ad9b0ec6cd180688383c3e5d7ec9303db3a973d97e0b7d4f5adcdb0e51eb18fa1146d479e097fc8af9731c36f476ffb3a131d21c96d62f9c5c6f6bdc4f2e8e2e01f16995cefa7ed3bdea5b081f66b5720f67fcee2e3635f7b1665c38fcffa2b5340d75fecfd50d3923db9d702c8190ad7ca6f8b3b5fbbdbffb99495b9821a342a354843ec11d6fef25ae805e262d7e5193c98619a81d2dc888b017dfa2cf098733bbbb87f3f3111a3adc4d02d2e3267fe83bb3e231a86bb31ec25ed8490cf25636c887722033576bb4eeed096cedd55bb389d63159721d776cb49e7517fbe703e413dccb888e3332c373b0addb1fd296ce3406e94aa3e5fccda4f43d8e6c4117c8108b9ddda1a29b41f6fe5212ba1bbaf4fff1b0e7b8a271948d7f6beeaae1d476db66f6cce8f3f360ba77a5c5cce65cf333a90f1866d3e6024902ae5dbc70dbfb6c5f547d4277efa7ba20c4cc5251735f3bed440f384dcd09311183d25c24e5a4f5f86b314e426e78699d662ee38384d3bb8c822727c22794afbe592ffa9c6f4775f878e29c8765e72320a444abe9eed99ab7a9cc77f56ee9b2d8ee28f25838b8c2df4720a367bd299433e0157ec924d00ba6e05e4fab8acb32d6ee88ca13188cee0ede8e506c747501ab035976d38787a07939bbbf287939bbedc61b37dd6a58eaca2d102eb2edcfca4ac13ad6baf97205e1d8ad5cc661560f8cfe1594032c879a6882355e7d452153b018becc14a3f8e4c9010e0eb196f42cbc75600aa7505e2513d2f3a5b2c6bb614adfb48782c44088f319ce37b6a9676aef7a34bc1b9bd285a2aae66f0644e76448b56816f67dd30c99a6bedb3155b3aec26e573b05ce98eb2f29283ead141a4b29565f9b5eb20a834fdb083e67789d84621a5890777c9f8bb3f5d9f60c032c9bf461ac5417368b1f0ef6503e903e735cb4e16b0d4997869ec1e6c4db20dc05921eeffa16ec8ac37a2db65340da34139794d5bbfa89650678019a81f74248d1cb9a5457fcbcb6465f0d726597c79aed02838ce0488eb21900ae8af72ae4856ffe12d840c0859ffb6a54ee24ca224488d67949c490f61c6d6be66c2d42428db5c26b0176de09c34dbd96df9310d08aa29b172f43323bfb44c45bd8ace245f23414ce9230f0940ebf37e30f9de0bab6e1c70391442b0aea4964872df3f0a2cab8c93b58fd789322ce5f466df00fc7a0c462196a64a260e4ca30b914edfedcbb3704134223b797b27db700eb86603e67ed2f9513ad0b71cf2f14b0b5e696b27694ae3be6a9a78471f21acdf5c08526bc79748f9e4727f130930f4639f1a0f1f2fc543532bb43940349c297ea13a6f28f22e6505450fffc3f83cb718d043f87815d6cfe3c53f268bb462d02a2a788e91cba412b0f11d78fcc02d73b6a96856257f55a8e914489390e52107ee23d2167a363e0491f72f409a3d831fd79ac422795d04c24466516a3bf00f5810c3f2873cf5281390532e49325134a2f905a2c4f37dcece92fd7ea34c0268464ecab38fa24ed5c1f3310066f1a166accb4e995c44b9457f01f6809b6b00c7df3550f3db742a01b56c2386154bf3879d31c88a77c871c4eb7a100cc81085ac57f01a9c67ccc5aa8293e456a2f67df49afabdacb2f4e2fc949b3f80557f786e5b745c297ced20c984da8d700b350d2950e56d56c328c5ffb7ffafb2742218fcd57543d3e91579ea24c59607ec67b37fea0b679e0930a7697d152e4c14d4c2f3ed40a33d4355c7840605e8350b7fb95114e1937a9a4e99eccdd20ea72afea2bf41a868c89ec8569868f9d615a631268e53d8649c44c7858f2e169ac4c4f450582fcad5d67b3b6b59ff5f8b1d1ae56d6dbe0f971ad86e269f368840ce5df4019e8291d383a1d5d49fa36ac5aae5c4b46c5be8f45e22cfa97d87ebc7e382fc320e65f2bab048c9ab79bc2547067a762f8f00e88ebc6db253e75264625eae199f5b12ad0f56881451077639b0c259bf9a1634135b9f974d5ba4e2f142e6e12d050c098604b6045e186c1def2c8d6cf81c400eb4f68526d5343db2e69b32a2e9b2f8f11392f8cbaf893826d65cfc909c478c3c4eb93fae5e3f2b65f6ca15647bdab6e325938061d62c1d0c5a9e3063f2f7dbc08c183110914551112c998fc4d0a0ad0f60065239dc59945893860550a5a7f26c7b752b545df97a2675450bb45ac9d215dd5b5c1c0fd8be4a15abc00caeed14fdb090f108b12258ebc92516c25ead8e6be7f344f4f9f3f6379da5bc6e3dfe3132c1a203431f5702fd94684014b8b88b51505d2365c330b364d5eb9de6dbb2af6d7009711e9d2ef3302b856fbc7d1a241f57ec80dc734b4d7160eac158b93e570dd5e2823186664fdcafe326fcbf62efce1c825b13e562701e6ca72ebc4173270e1ee55b6bec4bc8f9d5d2e412ea0d0b5b8c321b3ffda851ba35fe7eea67f10f8b824abe1ffa7ec1730e1b26a2e340c143c75d181a5cf2688780152c30cc47b0c26cb048eeb6a45ee475d8bbc84b642205f72773514a1beeefb614d04cb45c038a4aec243ee5880b0d36b0390f34454b4d4f86d13e48d2e3cd4afeb9d91dbcf49b666a51a24e4ddc41f151038b6b3489e10965f37ccda3512ded9f591273afc71dcfd12c225dd24c56daeb4b18eb44fc2ab180326c141dbd028478ea7188d7934daadeefd253cc064277f1ace2a8ad54763b4713a2ce4101bfd03701b5eb9c9e18126d4273da3fe386bce6cefbd132612045d61364313535ad52d0424643364434c5326204ae33155f039eb75a264547e8592187b90a41a6f0f7777857249d543086d7fa16b3a46f331a30f6abc527138a1c58a60ee444a3874bed51b7aff26090909083a23e8b028c074d6d95dd35593180717532a2a534a866ae8168575810b1f9cedb704027a0a61cb70b886e6527dba9c5b1eb77fc8d6cae357de19d99f7752432d63d7d8900533f3fbc44535832aaa70c4e643e168ab24a8d6a91a28f24bc8fedbc24c19c23dc37027878057aa9ab8583ef1d7e1fe6bda129e11704c286776a784d9f20eaafea3662d2077faf9a023259cb4c0416548031040460ffa40e0b9c1ea688bdd4bbf470fb34f66322a049b9b865b7dda025751e06cf29e8c7f4b78350f9e2cbe2905b0b4ce53372e5c9b'
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const { spawn } = require('child_process');
|
|
38
|
-
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
// When called as: node -e "..." -- arg1 arg2
|
|
41
|
-
// process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
|
|
42
|
-
// So we need slice(1) not slice(2)
|
|
43
|
-
const args = process.argv.slice(1);
|
|
44
|
-
|
|
45
|
-
// Create a temporary file for the decrypted script
|
|
46
|
-
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
47
|
-
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
48
|
-
|
|
49
|
-
// Execute the decrypted script with arguments using spawn
|
|
50
|
-
const child = spawn(tmpScript, args, {
|
|
51
|
-
stdio: 'inherit',
|
|
52
|
-
env: process.env
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
child.on('exit', (code) => {
|
|
56
|
-
// Clean up temp file
|
|
57
|
-
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
-
process.exit(code || 0);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
child.on('error', (error) => {
|
|
62
|
-
// Clean up temp file on error
|
|
63
|
-
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
64
|
-
console.error('Error executing script:', error);
|
|
65
|
-
process.exit(1);
|
|
66
|
-
});
|
|
67
|
-
"
|