mailpeek 0.0.2 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (535) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +15 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +36 -0
  5. data/Gemfile +16 -0
  6. data/LICENSE +21 -0
  7. data/README.md +25 -0
  8. data/Rakefile +3 -1
  9. data/lib/mailpeek.rb +61 -1
  10. data/lib/mailpeek/configuration.rb +15 -0
  11. data/lib/mailpeek/delivery.rb +55 -6
  12. data/lib/mailpeek/email.rb +85 -0
  13. data/lib/mailpeek/{engine.rb → railtie.rb} +6 -8
  14. data/lib/mailpeek/version.rb +3 -1
  15. data/lib/mailpeek/web.rb +136 -0
  16. data/lib/mailpeek/web/action.rb +111 -0
  17. data/lib/mailpeek/web/application.rb +154 -0
  18. data/lib/mailpeek/web/helpers.rb +62 -0
  19. data/lib/mailpeek/web/router.rb +107 -0
  20. data/mailpeek.gemspec +32 -0
  21. data/web/assets/javascripts/application.js +166 -0
  22. data/web/assets/javascripts/isEqual.js +1647 -0
  23. data/web/assets/javascripts/jquery.js +2 -0
  24. data/web/assets/javascripts/rails-ujs.js +7 -0
  25. data/web/assets/javascripts/stimulus.js +1960 -0
  26. data/web/assets/javascripts/turbolinks.js +6 -0
  27. data/web/assets/stylesheets/application.css +67 -0
  28. data/web/assets/stylesheets/tailwind.css +1 -0
  29. data/web/views/_footer.erb +3 -0
  30. data/web/views/_nav.erb +9 -0
  31. data/web/views/_sidebar.erb +78 -0
  32. data/web/views/index.erb +9 -0
  33. data/web/views/layout.erb +29 -0
  34. data/web/views/show.erb +102 -0
  35. metadata +63 -1008
  36. data/app/assets/javascripts/mailpeek/application.js +0 -48
  37. data/app/assets/javascripts/mailpeek/application.js.map +0 -1
  38. data/app/assets/javascripts/mailpeek/fontawesome-webfont.eot +0 -0
  39. data/app/assets/javascripts/mailpeek/fontawesome-webfont.svg +0 -655
  40. data/app/assets/javascripts/mailpeek/fontawesome-webfont.ttf +0 -0
  41. data/app/assets/javascripts/mailpeek/fontawesome-webfont.woff +0 -0
  42. data/app/assets/javascripts/mailpeek/fontawesome-webfont.woff2 +0 -0
  43. data/app/assets/stylesheets/mailpeek/application.scss +0 -0
  44. data/app/controllers/mailpeek/application_controller.rb +0 -4
  45. data/app/controllers/mailpeek/mail_controller.rb +0 -44
  46. data/app/helpers/mailpeek/application_helper.rb +0 -5
  47. data/app/views/layouts/mailpeek/application.html.erb +0 -17
  48. data/app/views/mailpeek/mail/index.html.erb +0 -3
  49. data/app/views/mailpeek/mail/index.json.jbuilder +0 -25
  50. data/app/webpack/javascripts/application.js +0 -22
  51. data/app/webpack/javascripts/components/App.js +0 -175
  52. data/app/webpack/javascripts/components/Body.js +0 -71
  53. data/app/webpack/javascripts/components/Email.js +0 -38
  54. data/app/webpack/javascripts/components/ListItem.js +0 -35
  55. data/app/webpack/javascripts/components/Sidebar.js +0 -43
  56. data/app/webpack/stylesheets/App.css +0 -92
  57. data/app/webpack/stylesheets/Body.css +0 -25
  58. data/app/webpack/stylesheets/Email.css +0 -46
  59. data/app/webpack/stylesheets/ListItem.css +0 -33
  60. data/app/webpack/stylesheets/Sidebar.css +0 -55
  61. data/app/webpack/stylesheets/_variables.css +0 -22
  62. data/config/routes.rb +0 -9
  63. data/lib/tasks/mailpeek_tasks.rake +0 -4
  64. data/spec/controllers/mailpeek/mail_controller_spec.rb +0 -79
  65. data/spec/dummy/README.rdoc +0 -28
  66. data/spec/dummy/Rakefile +0 -7
  67. data/spec/dummy/app/assets/javascripts/application.js +0 -13
  68. data/spec/dummy/app/assets/stylesheets/application.css +0 -15
  69. data/spec/dummy/app/controllers/application_controller.rb +0 -5
  70. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  71. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  72. data/spec/dummy/bin/bundle +0 -3
  73. data/spec/dummy/bin/rails +0 -4
  74. data/spec/dummy/bin/rake +0 -4
  75. data/spec/dummy/bin/setup +0 -29
  76. data/spec/dummy/config.ru +0 -4
  77. data/spec/dummy/config/application.rb +0 -31
  78. data/spec/dummy/config/boot.rb +0 -5
  79. data/spec/dummy/config/database.yml +0 -25
  80. data/spec/dummy/config/environment.rb +0 -5
  81. data/spec/dummy/config/environments/development.rb +0 -41
  82. data/spec/dummy/config/environments/production.rb +0 -79
  83. data/spec/dummy/config/environments/test.rb +0 -42
  84. data/spec/dummy/config/initializers/assets.rb +0 -11
  85. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  86. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -3
  87. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  88. data/spec/dummy/config/initializers/inflections.rb +0 -16
  89. data/spec/dummy/config/initializers/mime_types.rb +0 -4
  90. data/spec/dummy/config/initializers/session_store.rb +0 -3
  91. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  92. data/spec/dummy/config/locales/en.yml +0 -23
  93. data/spec/dummy/config/routes.rb +0 -3
  94. data/spec/dummy/config/secrets.yml +0 -22
  95. data/spec/dummy/log/test.log +0 -270
  96. data/spec/dummy/public/404.html +0 -67
  97. data/spec/dummy/public/422.html +0 -67
  98. data/spec/dummy/public/500.html +0 -66
  99. data/spec/dummy/public/favicon.ico +0 -0
  100. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-29L0ZB3fH_NZ66iNzqKdlAW8RruZymDXHSRjVRq0jo.cache +0 -3
  101. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-5gmkV_tHSlzugtdELAdIMC4_Ip1up0PUwztN3hW2JE.cache +0 -0
  102. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-7zlD6NZV2vP0l3uDXxTg4D2RHn6cqHpGFvVXQgtoM8.cache +0 -2
  103. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-b-vyK6dLFasz2fhzfMu2LtTCBDHGU4l_aSR3DJk0Zo.cache +0 -0
  104. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-naqX1L0BN_31ppPRreXK5sSMPTpxQ9CvcAhuVzCLhc.cache +0 -0
  105. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0B7r3GcOvQLNUXavCvZC4ZsP2HfotpL8uDTojcljTnY.cache +0 -0
  106. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0GmCp9qivKyoxpIYdWtWRuwmMiOz3OfPmFmzrmUoOaw.cache +0 -1
  107. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0KYuuGi7OVUIiTSiLbdPUxOLCq7iMQB8qOtBSLwTJsU.cache +0 -0
  108. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0TIf0dC5bzSQmZP3WUdLAJfrqGKU9HGtf-mFieBnpZU.cache +0 -0
  109. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0VBweRU50XvGdAaxe23E8ngzOSwvA1O0ymPYXwaTt7Q.cache +0 -1
  110. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0_BO3BancPOpoX6NFr1fT1NmZD7bVUK6ootcjyvTt3Q.cache +0 -1
  111. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/12-f_tGLl3zr6vD1r9WSYG_aZzfLEeL7R2P9JEOo4BM.cache +0 -0
  112. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/17PwKGcPuNA3Il_e1ZG2sTzF3Xh0alSHYsUj6x_3VHw.cache +0 -0
  113. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1Ef7Xpya1c2ZxZEhGzkKblj5QdYRglmvMg_lDmo7quo.cache +0 -0
  114. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1Qpf3HN9j0wIcnK9avkvlm3gRFkm0fGu5POcIEiX4C4.cache +0 -0
  115. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1Utzt_cNTi9e58sLI5EEjMnXl8X2WUBphfxR4CYdkBE.cache +0 -1
  116. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1XXxt2twXlboKw7sL_Svkm_dkRyYgk7EyGPbnZvwEmY.cache +0 -1
  117. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1iwgbcEP5cs0Uy9dFvIo3ujGlg5aV8C9DV1eRYw8EZE.cache +0 -0
  118. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1lolLD8lRZLAeq5DxyGQtHPdFzx_C1aHLQYy_8xyu1Y.cache +0 -1
  119. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1sY-bsEWQ7JIUddylxTBG_ZkC-4jaiWwjHQGi513hhs.cache +0 -1
  120. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/21kbsUnyK5jUTlmYh3p8fs2EmzKxqG-SY5vjMOLsKsA.cache +0 -1
  121. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/23KKtWOK4HV1qAW3BhL_bsFCwf2ZS53gJT90llQmlZs.cache +0 -0
  122. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2Q8enuoEuU-WAgxlYSnhr4hJ-PI0OALHojSasa9mFso.cache +0 -0
  123. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2VfSg341xSpViGchegufQ23cOkv44HWIxZNpt6tDGt0.cache +0 -1
  124. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2Zk824ShWyZQ1xoYdhhfLEeLnE82GLao5ivxuK2ysKk.cache +0 -1
  125. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2_yXtd27MBK-I-9aW8DL0Q4F6uLx92BZQOgRVdzazW4.cache +0 -0
  126. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2aqilq10SrPCnUe_hICDvz1b_-oJitjoOv8XUAPP04c.cache +0 -4
  127. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/33ew6m0aYA_O_F_Ousy7Dsizcip9VAVSQkUgNGxWF8Q.cache +0 -1
  128. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/36KU2aAsLvvlaxf-KvMylczC5UNmvlq8fGzr0ZSV4YY.cache +0 -0
  129. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3731udAni9M6zPjO0Vzg6PEbfP1jDVA_L0-Sj6clxxc.cache +0 -1
  130. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3M9bXFAZouqbljxs56eSmYBqcNQpafQaxSUltNMCnQw.cache +0 -0
  131. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3Qt7hVRahv2cA39bAGjHAQHzkz2pso8Ra-NDBX8tLBE.cache +0 -0
  132. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3_GbOIRG0JH2VhXnQA52j-InkzotBpkC6zXOq5Wh6TI.cache +0 -83
  133. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3fOVyAgEfs-apfNF40uci0nrV2Bn8M4lrJFD_v9kaMU.cache +0 -1
  134. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3grIfJNaWiWUixP_M2QQlauzV6rdBwX01BFlycfdomM.cache +0 -0
  135. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3mXA3k-ITJ9hvxhlzhhngp6uRPWcK1hCL98uJOTcH90.cache +0 -1
  136. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3tfqizqO9TVhgZwTVeQeAwDzT_-XAL3K-vfwfHJoa58.cache +0 -1
  137. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3udLbEieLN5siw8NbHrhVbgFRyPVvmOfW1CR4hnyMr4.cache +0 -0
  138. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3z2nUnYCbjokisbWBo_yj4RR8RvKYBZYzcvEcAyGx6Y.cache +0 -0
  139. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/487QTWwtTGFegsGB2g4ezEwNpc_Sh9IdmBhG7ZN51do.cache +0 -2
  140. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4OpynIM4Mvld2X3Bq-Eqhgq2xmVzOoMz-Lj5HS9KgKE.cache +0 -1
  141. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4rf-MF6loNk6S_W56RT-G45fctdfzsACTNpaW06gNmQ.cache +0 -1
  142. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4sa1RkjYQH7jZFFXsKonJUtL31tmSttIGU25AqNQKVA.cache +0 -1
  143. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5ABCW747gxZVglVlAXQ1zWoRVR_H1F0vVxy5cuNO_b8.cache +0 -1
  144. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5KPB5gylJIuT5zKNG5u9sj7k0sM4WpNHou1RwkL63sc.cache +0 -1
  145. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +0 -0
  146. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5nCQ2m7ZtYn34VyKt5q_wXFwtjOCyxbmin25HSgSAyw.cache +0 -1
  147. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5t-6mpVMCSM61ubUgzBstPjpLt0m6_uCw58r6ct0gd4.cache +0 -1
  148. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/62f-0xrB9GdfPTGZjL-uN29NfI4HD27Y8beKZCXb5Qs.cache +0 -0
  149. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/64aiEtcVd5v67gtSUAC-TR5k286YnfoVl_kg3XI72zU.cache +0 -1
  150. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/68bZl8X7PKRHTB8jWKvE58anNIf_xC7n_F7AtXuUNMo.cache +0 -1
  151. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6B4CPPnmEFzBqWq-3HXpLk5EEQv-qrzMWSB6Lqhe37U.cache +0 -1
  152. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6GbNsvw8Xcy9WnfpkfzDFZ7ia0xn0er5zmaOEbN1enQ.cache +0 -0
  153. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6l3rdcWc9Okr0VbL_mNap94a6pbq8yFNKHpq82PXWYk.cache +0 -0
  154. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6m-_GuSpquzlL4m0raKbtJapj-Fz_W0DkzKloLydVLg.cache +0 -1
  155. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/78DshazHcQI6wTPoS0ra7MO4vJJKZ2CDBoGY2cSP7gE.cache +0 -0
  156. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7BcmaICiCfDRbLU1mNUwctLEA2dcGniMsYd0-XAlauA.cache +0 -0
  157. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7Cw100J0tWsBdbC0inMOCWl4xJqb6NaPHFHq7vN6-wk.cache +0 -1
  158. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7jcin7uPCTL_P9kyk3Oe80TTBtgaTqic5U4MERzbHYI.cache +0 -0
  159. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7kyQc9cCS7yNrXP_npwL_6VzjHmxYIAh3SsyQ6d7TSc.cache +0 -1
  160. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7sg56m5Budvtk4KN1uif9DwMsl2nMCb48erkwjYn9nM.cache +0 -0
  161. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7tNyWew6t5RtBjtmupM7KOcVXqG9LCjplKwjEXnHIOk.cache +0 -0
  162. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8-5oNsNh24JRMuXEnvIYc9ywrkYEfTk2jXp6dNNtdgM.cache +0 -0
  163. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/89dg8O9O7KgzC8zAXoZz7p9gA_rRDzRcLjYkfGvv4sI.cache +0 -0
  164. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/89jubpBlV0MRmXA0lKJ0pK4U4mBjXmDPNSEYl5fqO8I.cache +0 -1
  165. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8SsYjfjdgkF9z_TrodVCpi3v1TSPhRyVyoAKlyEu4vI.cache +0 -2
  166. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/98_867JeXTUe5Nvu470vV_51zZipL5YNKCs39dlH7rk.cache +0 -1
  167. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9LxfbhGySEZIjXyweijscTLY7Ax-A0uR3-m_g0XTwfE.cache +0 -1
  168. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9SXYvh_gzNPBXYqrm4MrOGxO9zYFahYLNNIDtZU5uSA.cache +0 -1
  169. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9SfAkhbc6SY8j48BwGoCeAP6BT2t17cxlzwiSzFs5T0.cache +0 -0
  170. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9cY8jv3_byyiRz3KK2ZVVv4UmUO1AAQzj2t8GUrn9pE.cache +0 -1
  171. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9fym5khPMy5ZGQP6uzAuNf6N_qfFAgtoZOTprImXKpc.cache +0 -3
  172. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/A6iDppp3xOlSTCNU5SJkj6sGfBqwL0GZfFJLVQTEeek.cache +0 -0
  173. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AKGcoGXyyoiiBpQE20c71UBuwcHthOyy--IT0NA5AM0.cache +0 -0
  174. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AVjteRrhD9cK5TyTsCw9rf9NXfPjqHGr4hKsPzlljKY.cache +0 -1
  175. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/BKwoSEIJeNWEIF5dQs7Irhah0XQo8K5Vg8kKXJTQtcA.cache +0 -3
  176. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/BT8w4PGP3pGABzXFbpYOotHB-adFBK4MXbWdORizQgo.cache +0 -2
  177. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/BU4FTa8tPaIL_lp_J8SXl67zI8AiU1ga3qi0HP68kY4.cache +0 -1
  178. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/BY59UH01mUQwIk-IogLKj7I92ezxtRukaYXvkmWmQJI.cache +0 -3
  179. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/BfMRX3p6aaAfE7lgxtMXjR0REYBA2uX0ySb2w43GpJY.cache +0 -4
  180. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/C0Z-UkkCp-iZpe4cswNx29xNtBpsqpELYFB_s4zQiAE.cache +0 -0
  181. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Chs73VR3-B6l1hCscaCQZHDFk0mgmhs09MlD_Hah3mg.cache +0 -0
  182. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/CmMtEr3RXoxmHSsPIRWJKROf6byJgWC-Z-zG8A0whvk.cache +0 -0
  183. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/D2mKMl0qwbDFEiUG_vmtdGfb9Jm3SSPrBOyXCJ6V_ZM.cache +0 -0
  184. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DB4IInoWHqvYFrztChkKTWrZ9UUZ0nko7RnJUaP0aug.cache +0 -0
  185. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DVBB9eCA4kfgtQ_qlIX3jHQb-l42tDlG5UnXDdaAb6k.cache +0 -0
  186. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DnnCq1k8cVnCXNJpl0iqJBojIeJHtL3VZ1a6KsKzEYY.cache +0 -0
  187. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DxBgZ7ldjzNdk3GhvqL7G1IzPAvcTOkkZ4hOeUZvrU0.cache +0 -0
  188. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/E76_1C-YArkthgkmSAQDlLvF5tmd8MNMPvBEybbC434.cache +0 -2
  189. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/E8G3wM7uE5B_NW7eVutlnziUskLXGGM9-EQQcJnLBj8.cache +0 -0
  190. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ECXp9DXkFdbpFTQvMI0hvJWnPvhDdBIW9iOrZaYSakM.cache +0 -0
  191. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/EO2E5L_W87K6wcbe61pXfKXeMRFlmDDSNDFLpyjsjBo.cache +0 -0
  192. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ESNdUBOh1J-UPwfxtdeoP2I6iNyLsts6AuMLB7OI_K8.cache +0 -0
  193. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ESm3GUn4mCsdWcnXXypE8eXkV9E6oaT6so4-zuJSD2M.cache +0 -1
  194. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/EV6Ijt_GBpqGw8MFshXShTzuBSl595Ae3uVaEUSj01M.cache +0 -2
  195. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/EVgQu36xLQNH8DL-sMzQRffs5mXEF68nFtmTnCsLibw.cache +0 -1
  196. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ElLMP4Fa9zTqeQLnhIMPIr9OLsoXIRjVNxK17ppvcuc.cache +0 -5
  197. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/EtcSmJ1YayqZfgK6mIXBR0N1XwLZB3fDI1cABZQ-a5k.cache +0 -4
  198. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FA0R5KQTZVyGRUQA_vx8X1dMxE_sbXfD-99DVIdc0ws.cache +0 -0
  199. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FKUJ-QBfy4pR3PDtTj-AkPdA7Hm-2MVthgiW2xRR7yM.cache +0 -0
  200. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FR7liBkthO4eDUE2rZv8vtvNQQd5n7jwlLz8lVvRSsA.cache +0 -1
  201. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F_CH567Ba88YIhxpKuF6K28eRohwHCWkvYLC6yJtE04.cache +0 -0
  202. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FflsWDLmeWYXiV28DarwMUKqrivu0tlHq4AOsd_Gb9E.cache +0 -0
  203. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FjO48yYfSLPpekotRM6y3kyuK8UhOmSbpIM7bX5AJ08.cache +0 -0
  204. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FtuuDPiEi5yWz5hRbI9nLI9xJ3QlBOOTwsNggznrLY8.cache +0 -1
  205. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/GIcIsCCspnaC7KhxaDQMyZv-7byTPgceIHq_OVKk5ZA.cache +0 -1
  206. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/GNepZ6yH0k3cpKiaey2O3WFYRYtypMY_DzQxXJItOWg.cache +0 -0
  207. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gghug1Km0WvOO6hLW7tm0tgnCZWAYm0qq0m7gK2AmrE.cache +0 -0
  208. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gi1V2IYC1C8XDt74zLIjcKX5cpsf7KHDoP_FkREm6XY.cache +0 -0
  209. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/GkGtBIjwZkEJxIQITvzk-4TAZukpeE3Fv5H-15z60sw.cache +0 -1
  210. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/GmFCiCohJXCD8akW4ZaXZsCnaPqVPHTgvm3ONy7CaQY.cache +0 -1
  211. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/GoCp-NyWQF2GlNjAoOcL-9DtAt0F3h-fgbqq5vt_us4.cache +0 -1
  212. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/GtIbfUqDyL7L9bvFb1bPKbmD5nYBs5Zv8usRTrGnA3w.cache +0 -1
  213. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/H7F9uOJA0cUI1uhQUWIrl7sQEpJaOtbeMCQ3sYQS17w.cache +0 -1
  214. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HRkz5t-8S4vWnXbNDQNrp-trZuboNTXkBND_djPk98w.cache +0 -0
  215. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HSxd0OOm0DEYci5a9nudwUwJwjbmoQbyL25MjG-Hva4.cache +0 -0
  216. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HWp95Hb2WLIt4krYrc10XS3x1FfGgyXCb0sRlsCOxbI.cache +0 -0
  217. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hu74oFDZ3aXCHWb8BmBB6OdJwwzk-WajQp-FTt8_I_g.cache +0 -0
  218. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HyIwMDLgCwuf8HUtb4DpzYXaqaefhaDQhfahD2qduLw.cache +0 -0
  219. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HzJIiSpuKqayCiqYMujUaIZH-Obwt9e2y3zcteI3po8.cache +0 -0
  220. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/I3nfa7qdSr9j2hfqd6TuH58Q0QWGP1z1kZ8T8C0_0Sc.cache +0 -1
  221. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/I6w627J3PaebzQt7vM9H7M-jIB7qtwoLeFs36VTyR0I.cache +0 -41
  222. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IE60Ygyr598W2jBxJxt8Mz40_RyYkOAKbwor2zEmhLs.cache +0 -0
  223. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IEYivKZhliB1gvKtR2cBEFJLJJFEI9DXP9kwNDVrvFc.cache +0 -1
  224. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IjNlxbwSAQIqh3OIjNu35MdrKUX0HGgCs4rDu4iij8U.cache +0 -0
  225. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/It-IQZicYxnm4pp1Q_Az5p9NHmUzi66h7Kj7vabUSv4.cache +0 -0
  226. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JGZF7hDMeDhqvxICGWL04d8SAVCxNZwRzd9rXOaK54U.cache +0 -0
  227. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JJDZwgGr9MZR0ChcLHNNNWbWFBJ61MXfeogvnqo5x6o.cache +0 -0
  228. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JJS-fRVaX3owgAZICPAZJ1owPEGs8gbakNsr2VRS-FY.cache +0 -1
  229. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JNEInD14kHuDKNxcD9TdH4VQ1oU6WN_ydVjFcFFpB8M.cache +0 -0
  230. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JQP87DurTtgjTzx72LvuQSDNz5qyUSQ3O9r0oAtGlQE.cache +0 -1
  231. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JWXJJ-IkGfPo4abFcfMM-yYDdmWPzR8CKqvYgQgc1Mc.cache +0 -1
  232. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Jq-sCn0wL-Zyje2uONi9o0VaIUnBltuSJX3_TozGu08.cache +0 -1
  233. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/K7H0PRqVgVwEBc22vh4lzWIOuZv_V5jdvP0G8F6kQOI.cache +0 -0
  234. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/K9X4JFov-viWlEj662ZenhgX5ucEFgfx2HcVFXGr_y8.cache +0 -1
  235. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KFwOUyoM8rD9VB8nHQan2JIzuNtW2hT2NPrDrbfymzQ.cache +0 -1
  236. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KI-8_KAZJVu0ZfJw2s4uuiWXx4hVswPfETyCrPW1H5s.cache +0 -1
  237. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KLDOp-fLSpIobdGhUMZnyP46Iyr3WvKL9H-c97x7Lpo.cache +0 -0
  238. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Kt7zkayuNmoeP59iY70hPx_LHLddNDh2R55ZlTEB3Pc.cache +0 -1
  239. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ky7_4tkyBWk5xGrVU6XN0W8dlIxnaRq-h9tAA-ooANw.cache +0 -1
  240. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LIdxg33jna8OHvZ6rMOkmA_OGcqsBsmkFCqGSGJLIa0.cache +0 -1
  241. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LYWbwagPZDkhd8s3YIE2ddEKh9jIeadHB2ccF_hUVsQ.cache +0 -3
  242. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/La7MNz3f5IJqcvsm3OadJV02X4VDMwV_pYL2wWkN5Xg.cache +0 -0
  243. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Lbl6odWthMa7y9gN4bG490sb3l1UZfPp3HlaIEW-_CU.cache +0 -0
  244. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Lj3SXmwkZNbeI1X1uAuy_XtLHkqFfKo0ZVYPEtPOGmI.cache +0 -0
  245. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LoHluVN9zP_GgoSYOdnSmHin0ikLN3X0HNDq72NXuhg.cache +0 -44
  246. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LskhJHT26tIQL83j-vFuoa6TK85sLO19EEOR06ID9SU.cache +0 -1
  247. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LxP6YVGHZU8MoHFpWhbQMhC__wMWxe0W5e7Xt-xnQ1A.cache +0 -1
  248. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MD8uU7dHFc2Qnh9_sSTOExXFaqXV7QkavXeksxYAI7c.cache +0 -0
  249. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MpMfEz7D3TWr4ZTthOmuSVVgy7rNsqkFDZLiext5ayw.cache +0 -1
  250. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MrWa8TDHBm0-qfeAeWoM-daEgl4me1qSRKlJU_wui_o.cache +0 -1
  251. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MsasKRoPvEaGPpwVSbbsY1_ZfO8KtuWKzNCmKf5ZcLM.cache +0 -0
  252. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N2C_NzJdr-WUDgdrDW_0GDVZUjaHHA0J3HvXtj-Lxhw.cache +0 -2
  253. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N74cfZsevAtsNCYiiFkGZOASH51Hil2wTcH7VNcvCRI.cache +0 -0
  254. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NHrAVE3I0RcuNAff3KQ-ImlYFo0ePz8gSPzI8I1pyKY.cache +0 -0
  255. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NKMTZLOJGF8ED5Et97rN3WjGiqbSgQP1kQkUDt6qGzs.cache +0 -0
  256. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NKOqoG9aDHxVnujrWMTHp5nNx2ho-6AZozt3eDRT_dc.cache +0 -1
  257. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NNjh0izd--hNDYyPysHRFu6FV2dLWvd1BvLVHZzCMrc.cache +0 -1
  258. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NfVElDKZ8tFW15KcpQkTjhLWl88vG00FhkNqOQ3Fe1I.cache +0 -0
  259. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Nflf6KVoellwAhp2hWz7xuLQwRMAeEZqFSnediPWz2g.cache +0 -0
  260. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NgDkMXWaMMVhDSr2ole-Fuj7qH9DW9fq0DmPR6SzEXY.cache +0 -5
  261. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Nr7QZmcHd1jjCzGsftrV-NiSPhgffyfYnvfoUM6ZFHc.cache +0 -1
  262. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NrQMk8jKXcEysh06lKFLFtf47ZoCFnb9Asc5B7xFbj4.cache +0 -0
  263. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/O9snP-92eeWvMLXQsMBek7rxJPiC2RJWBafYq3IOfh0.cache +0 -1
  264. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/OAXQbgW5Zd4F1abWrL5Vorq5kA_IGqu-qP06I81IzjQ.cache +0 -1
  265. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +0 -0
  266. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/OPIQCDHXHE8bZhOVGaDvkm8GZccSJy-DF2MTI3cjoRQ.cache +0 -1
  267. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/OPOPfU2jXqFB0MEttlPmNaNp1VuOW8HezodkxKUKm2g.cache +0 -0
  268. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/OhHMsxjptAYCzLeoIjFlI6qq1pgSvbfX50O3PV4mnF8.cache +0 -1
  269. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/OjbDYmSIhkcnks510cMTOwIpkySuZEiofGCCZwC-vK0.cache +0 -1
  270. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PNDSAbTQdFP3WlZPVjsIlFr0ZRz0Tbmtz8STILwsBVo.cache +0 -1
  271. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PU9i82C060GmWWZYF1T3fCnT1MpwzcQxhP9HAiI0pxU.cache +0 -1
  272. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PfAx1_Razg9dAJ4s0mgU7-wgGdOBc2AmZHjq6nLsI5A.cache +0 -1
  273. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Png6ZJMK8ph1Wvc0rscqv34tQJCUuPfLycPzGhqmJRA.cache +0 -1
  274. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Q4NZ4KpKrfcuUfBpJ4I63fe-CQ8XdLszY056uxwKbto.cache +0 -0
  275. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Q8WYLFOiWjvZ5_MaBetAU3ztGlOHvIDgcstKLTh82ns.cache +0 -1
  276. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QJU5GLOAw7lxD6IZvkPekw7UUbiagB0E7GjeCy2EWjg.cache +0 -1
  277. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Q_lHEt6EmxeIdvBJMLdoFo19jgugTzurzA0kaKVhxN4.cache +0 -1
  278. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QlfWE4RF0K9P0bAJCUqZWgol6TH5voJ-8Hwd1zHN0GM.cache +0 -1
  279. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QquZpkEeEVAnz9yBgZ0IalnhRCp6PnkuoyOz5ozcQro.cache +0 -0
  280. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/R68qtRt5qniOiaK5qKxekudg02a5dPYCVvh8rauJYqg.cache +0 -0
  281. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RDZp3ULbnNe6ztXX5QrkorJCBKfoBfF9qczi8xxMUVw.cache +0 -0
  282. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RM0N9y8Hn_y8R9eCrNLVzFRexHVwKk73g11nHqjiwC4.cache +0 -1
  283. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RZUdjtaB4q1zpvouyAXU05y6gJ9i5QeYo4CNTw5cUFs.cache +0 -1
  284. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ReFMKo6juq3CzV3mZU3ELfhah4qKXCEsycqkgzPs6hA.cache +0 -0
  285. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Rf1kLWcDR75Pw5yMRlgM3oKejNN6iJ8F4FeV7AdkqHY.cache +0 -0
  286. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RgnRLqL4hsX1JPbWAbut_EkGWUdk2TZrGsuToU4l_k8.cache +0 -0
  287. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Rvl50vhOB-3m4wRlQGkP1ahLC-bJN4P152hIJJXdFeg.cache +0 -1
  288. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/S7nsp-5Xq2gBx5MpmYKO0SQr77nZHTl0sOQkL6j6yJ4.cache +0 -1
  289. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SA7kZ6qDJyp_cwyd2WEQxGFlv40k0uCIvhBr6iscW2I.cache +0 -1
  290. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SJwYgmzy0muTtB3o3SKYrEhy99FJN9ewiaBojrTx8pk.cache +0 -0
  291. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SRNKJthr9wwoEs1jOIC6_MCG6yZQ_wBsuiaxDVMX_LY.cache +0 -0
  292. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ST5xJhd8eg0MItmQ0QRH7apPL-Fyss7n4T91pMqWNa8.cache +0 -0
  293. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ScLYp7BRVcdIS_X5__EwJ0A4QE6hA0fjj7mn8bDFjSg.cache +0 -1
  294. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Se4wk1sUgIgtF8of1hP0oYqNxqp4KujFj711rRJaD4Q.cache +0 -2
  295. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TXBI8DAAn0vl6Nf3otqFayreEi8TJ_PGA-tUaUbwqCs.cache +0 -1
  296. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tc5qg9E7XKQRIbVf4gn3CfCTWhRMoECJJi9RR1_M830.cache +0 -1
  297. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TnoCnVBvWKNFhFewjHmm76HyZY1t-B0bLFbSLNd5Axo.cache +0 -0
  298. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TxFWZY0s5hpBhXdOMsRMlnaf-2vXOoBvz88EI6b5grM.cache +0 -0
  299. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ty7AtWqEvrEFdGMjZl2PmNtUUo2O4P1XbOGCqCz7mVg.cache +0 -1
  300. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TypTw9pUtVPfTajyGlMOBxVeDJy5rqpBAtUe6JNFo5s.cache +0 -3
  301. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UBKyu8S_ZT4jKmh4VzGfeZoZQMLFKjr9MA-tGbaJl_w.cache +0 -2
  302. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UCdFbKpYb7JNKyspS1xogw_RN7sWWK6fFkakCbdBDB8.cache +0 -1
  303. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UGZSSN2xA5L0of-0D72YvNYPLoNz3dSrlaSZ4ol26J0.cache +0 -1
  304. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UKfgmvJLK7pFsTTL-nq_rdqqBocxbbKExrLS3vjv7cI.cache +0 -0
  305. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UOut4SdfAJWslsMXp94up-DLYHMUpKqAJon0YkfOhcc.cache +0 -0
  306. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UXC785Hp24uN_yidL5djBjwh0alZpy7Q-7HOcWb6PIc.cache +0 -1
  307. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UheNY2_FcldHH3J9WYoJFMMQbHmhbrpna0qq-zVfT1E.cache +0 -1
  308. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/V1ecabRRVuc9uO9SkgqRvul-F0YP8UkbnsPfjRLH9Wk.cache +0 -0
  309. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/V59JHvAjxbPXL0E2xTXhCWkuvdFWmbRhL-Cnvx-p1n4.cache +0 -0
  310. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VLObNRqOdYwRTQtlPeGtORjp0rqgNAcsC--LNoXasCQ.cache +0 -1
  311. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VPxoqXJjvedOQk1EJ1HP0GddOkakCEqQ3Y-T2V_dwWc.cache +0 -0
  312. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VdDnNkp1AiED4FeWJ_Eu_0mD9EFu4IY4EsthHslTHzc.cache +0 -1
  313. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VuxXoOrLzOZa5tTTw8C-JRrJv8Pn0VEZjVulqAPSJgQ.cache +0 -1
  314. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Vv71-qjSSEQVLlNIyDv2Egeig4HBAWTYtoPbl3fuWu4.cache +0 -0
  315. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/W4JYgEbzRxoGdsE-KP7ZkdagoPmQoAhGSY2YvxiKjPE.cache +0 -0
  316. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/W4OUtdp_cXQImZDRgMJmzuZxVlGPVx4ExML25x5tJUA.cache +0 -2
  317. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WEndtAe7605X65J4uuGkDrb4iEFw4YtDXW70Llxe_JQ.cache +0 -1
  318. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WLPQMGSDdRLGLJuirTllvJECZCheTpFcYtik6VvJgfc.cache +0 -3
  319. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WNYW9tqm6g0gZW8Ff7ajM1bwcJZGe7BsvJEvNSaair4.cache +0 -1
  320. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WbUj5WWuH90jVbbUI4SbYzUMjZAfePU6U6xeBrFNKiM.cache +0 -1
  321. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WtbM-V-P42YuuAHhUNPuRMIrPnR1sIe8UOd2Z0GKYEI.cache +0 -1
  322. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WvwGxKAKlpBXEDW_WbWu9QSLSHuSqXr0Hj4ddhXH_Yo.cache +0 -1
  323. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/X4P_nzcHk8hjoLWZ7BJQtnoB5UUSZgVoztAnG6dCaXc.cache +0 -0
  324. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XGLj9rrDJksUh5VH1HEVWdA0nMaPEjSl6Jd1LsR3Ft4.cache +0 -0
  325. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XM9ZgT-6f9a78fRMfLoacysR-StqrMyErgzvuOMBQKI.cache +0 -0
  326. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XRvUs6eOIq8ZrrgnAE-UaJgyNacbPNlkmpMlGBGK96o.cache +0 -1
  327. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XTa1IHWPtE-53y63u619COT15TslWCwYQyVQEk0kTm4.cache +0 -1
  328. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XYDnFy7hX42f6sz6T_BmbSNAAI0fvIYm1YhKCD3mcoo.cache +0 -1
  329. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/YC1QXnRTsdgpngA1NwlddIzYWTwzuDsRujRmH8K_p-k.cache +0 -1
  330. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/YJlvIH_I_anhe8FxtGUM3wsw0E_mBrPHVr5IbPpAEH8.cache +0 -1
  331. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/YXmsNA44lv6C6PeoR3JQ2TPdIzq1MRfUWG4UpC727EE.cache +0 -0
  332. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/YrVKtmZn4f9sH57jJwebRajTszu0zWweQDUzNAXs-6A.cache +0 -1
  333. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/YtkfPewxwE5KEL50_dp2k7-6aMUGtRgh79t8vngOBeo.cache +0 -0
  334. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/YvPlaZKXXPAps98sfXhMagpxjzn_yt1bYzUtjffhxjE.cache +0 -0
  335. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/YwTMWVYcdIltz9bIQbjUNi4onDVGBAP389-ZgUGqGcs.cache +0 -0
  336. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Z8dpLzx3V1_676oafA6ujK6YOfTAvRXIKlOSbgk6-qA.cache +0 -0
  337. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZGCT9IWa3dg2YUmdplWbRmbbO0wHF47WMqa0_euNA04.cache +0 -0
  338. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZOK7o4owcyMDQReHgqK9MV3AJNFQOWUGZX2zOdn4V-k.cache +0 -3
  339. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZUaP6mjaMQi1rc2F5ajaC5Z7CzRogj888-IsWuBpEbs.cache +0 -1
  340. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZrJfW-_1q13eOCSR4xBmbL5L77WMLoWUeCSBqhitAVE.cache +0 -1
  341. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Zx5rSsVn3RiAJaegpp00stBXkQB2tFcUkvZ6FwuRL3g.cache +0 -0
  342. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Zy97_ddc1dN2bFx9kOxIn0do16UJW0flu7RzzMcZzAU.cache +0 -1
  343. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_KRkCuAtpIdkNsdN0BJyjuq27jUGMCA6YvyvLwD3ojI.cache +0 -4
  344. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_WBIBrnBYvnRTPLunGEq_OMkN1QKIAnKIsW8pY7mOyk.cache +0 -0
  345. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_ZkcYPE3L5SZqWZYtDIaomDk9YG1TVxJpopQ5Xh2mtk.cache +0 -0
  346. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_bBLn0qT9qgzLrIp0GygYNrplQA7_hck7NH0QMFmjdA.cache +0 -1
  347. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_rSk5dWCJfeTOVqpEbrVgLFtoM2qoghM2Zim7uHUOIU.cache +0 -0
  348. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_uPCZ2ulSfmCHJz6wb3TBk_qkb0GkqXz4rVfdKL4Xh8.cache +0 -1
  349. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/a9CpXiNjQi8BB8g1lHN24q8TJDikKlKxCviiX3icaLw.cache +0 -0
  350. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/aHDUp6wOMkhwr56OPNMb9vVW2WsNhZh7vgtP9EcnorU.cache +0 -2
  351. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/aVahQirGhw421RF_h8y0UfmkWaTRISbcXtSLoLKX12E.cache +0 -0
  352. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/asqLd25rlDi76KUC7lxmLKqLFHmB-JJrVSLAQXGEtAo.cache +0 -1
  353. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/b0epqbrJ_TLcfhZmRG5MB_tAUapqxUUWndLqHwOhBs4.cache +0 -0
  354. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/b8LMhvnEWXs0yJeeqlw9pM1DEDdZUfiL0sM0Jhxxh1s.cache +0 -1
  355. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bEFCqFZA5-EU76oWSPchyHdX4M4dSy596zKKzL9LZ44.cache +0 -1
  356. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bPon6WBDEuqBHlligtYSx1YJgCUsIXbyLp_K2WqlR1o.cache +0 -1
  357. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bgPvPfZj1PFeThwndRMyIWn3RhuKZIQXMMtQofxGjyQ.cache +0 -1
  358. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bkkt3JI4xIU7QkuW0umd0rTzNOe7aAM80qtUk8yCpUs.cache +0 -1
  359. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/blJezsUd9VpGxQ1ON3TlYFq-CdoYi1ITbePIlFvrQRw.cache +0 -0
  360. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/brwfYsMNhqwdq3nIjmlzTlPIVaVwcS4rksG40RFBezg.cache +0 -0
  361. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/c96pXbYtsFIXTvrs9i_tjxCsFM2WnlLTGdqX26qwlQI.cache +0 -1
  362. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cCdIyzzZjlJcYeO0dma6zAwweb6IZyBbJItTxnnz0ls.cache +0 -0
  363. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ca98LeJTZH_DJmrlfMZbQdZPzhVDkBO34CImiZSA3p4.cache +0 -1
  364. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cafZi1Bi3oN7zk96AIwaIxHsA4wl97S-Jl14CPGA0tU.cache +0 -1
  365. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ch2PouaFiqAat4r3U9Mo1j70TtLx_mNb0Eb-ODXDXsI.cache +0 -1
  366. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ch8ZjUjHarxzNI-ZTd6v4WYsr26Jp_WysFjpmKs69b0.cache +0 -0
  367. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ckiLRj1fNE6gA2drE28RBiw2vyHvL5jQ8JdbgeDqwWg.cache +0 -3
  368. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cp2DFZmFemQu2wu7K_g3yqS4nJ7Rd-E8Q20P0B9bwD4.cache +0 -1
  369. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/czZkfOKqlFVyTCPcPMpG8sei1n54HZQBiB3Ke13xpLE.cache +0 -1
  370. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/d6Itp2g06i_wuSXCyWaIvhzXvRYB8SuK0nS4QlkYDqI.cache +0 -3
  371. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/d87tTS0d8Az3v0PxC0wTTZaE8nZy9Jp1rJwH2krfCSE.cache +0 -1
  372. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/dCV5lZEbTii45TVa6mFZE2P8MEJDZGXS5kTPLgdybsE.cache +0 -1
  373. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/dIJq5WmaOmV7ChCm6uLpJqptg9Ez-6tEZ8JWdX47VAU.cache +0 -1
  374. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/dYbVRMJ9Kv2-CfZzuwHBDsI_f1HU_pnM49UpFt6oNzI.cache +0 -1
  375. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/diJ4wdfuoZ-Hr4H84RXK3y7dyYcui67SqFoi4XSunF0.cache +0 -0
  376. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/djsRnXWU-SiCs4h1kc15gyryQBFZa5tafs4lBX0Rm78.cache +0 -0
  377. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eKzrwiwBadm8qrg6J6zvEB38jZvgO_cXr_RR4IhYdZI.cache +0 -0
  378. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eNtRtTJg3JGVWqjbGXVbS8qXNO-HvOP_r1NqJzBU5Ng.cache +0 -0
  379. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eRvXR4MdA_aez1Xdp1mXTxtAP5nU1VydTM1Y8P-axp4.cache +0 -0
  380. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eWwddNfGNKzWgSRoDI5H7JlEdYhs_cCmEuP41T-1_Sg.cache +0 -3
  381. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eYqYhEeMYw2CVS_Pk-Jg01S0aKUbOAjWjLgHtqhiHPE.cache +0 -0
  382. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ebsM2MbmN-7Ku3lEpW-ButfS408tGCElv1UAONEIkGw.cache +0 -1
  383. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/emmITZUw9nTDwNPjo6qNW8Xs10yDH72J9smoGXdKdcY.cache +0 -0
  384. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ewiCBfP1UzsSEoAbty810q0UzibQ1S7VLFabtVtBYj0.cache +0 -1
  385. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fJI_kfr5uEok6ghLe-EENt2EOZ9Y_LmOS3RJQZmKg5g.cache +0 -1
  386. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fgEKT-P1g6eimbrKQKimXe_samAtgrDi-sjXbrSpP8Y.cache +0 -1
  387. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fhUsj3kuc_cU365XYesaGqA4aIVKhThg8wXlGwDyjVQ.cache +0 -1
  388. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fim7DJ4HVv563d4KzoH69tx2kP3vF8N-RrUGrWvUSvU.cache +0 -1
  389. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/foF7PZaKZbO84iKpyJj3tkpzDoQ29DZG4CYN8n6xpos.cache +0 -1
  390. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fq-0Ea6yUQUE0gf1aOnhHDnK7J9YdUyIhcY1RPcT9_A.cache +0 -1
  391. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fzN58APTwfe078Et9MN91WA88HnD85UcGy6uB_BLY04.cache +0 -1
  392. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/g0Yd_pIylGmiqKerXu6uWSGwp0CNhyvWQCg_3UU33S0.cache +0 -0
  393. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gAoKP2h-d8IVlRoEZK937LLgTd8Qn9Lj45L4Ui9Mh4Q.cache +0 -0
  394. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gBuYaS3qYvegy2-qAyT0mxrlleinwyIp0bzynKYBnLw.cache +0 -1
  395. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gKbhSg6pwnCoIZs8wj8Pot71vmACfyLwBkE8SmHMdn0.cache +0 -0
  396. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gN11U0A18b9wm60eOP470WTnVzJBZWUBOotF0450xEk.cache +0 -0
  397. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gVRJMb7EUwdEObzQFasXeBRuya6sXcjqEnNEBKsAByc.cache +0 -1
  398. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/g_QEdQAb6XOeJRA7CW8WWkp1DksxECZosK13vdCoFJk.cache +0 -1
  399. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gda4ka2Hx6Y-QqWEG4aU64kZCZc5j22kghxRU-Lsjsc.cache +0 -0
  400. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/glDP8UBUpmxcGCEzdVqfGs68VW_Kw-xalDSJA8sEBH0.cache +0 -1
  401. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gnc8r7RwSl1DDpnyjJfy8urMzzRggeKsgnQEecL_R-0.cache +0 -3
  402. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/grmZeGk-n_dpaC1-wzZNveU72MrLFaMjhvxS1qWISXU.cache +0 -0
  403. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gwBS9jV4bKHAjXKmcHy3zQ-8aWT6LW6kNTSLcoKwhmk.cache +0 -1
  404. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gwt9AH3onb9dg_kNadZf_diPamQ8mECNyAFC_CRysq4.cache +0 -0
  405. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/h6l1X5M-CRKbRn7z4KJCFWEyZPYAQx6EfQDrM3bdFxo.cache +0 -1
  406. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hKzVNiNnCNMxk_Ut_rgyiM_vwo5GJKfyrXaxLWCbAIk.cache +0 -1
  407. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hQlzn2UDUcNzuGWlFg0eDjEmdotu0kOhcB2Ie9iDR3Q.cache +0 -1
  408. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hYD7U9xj41rWcJAu5o_KElc2SQdJJS3ShRRVTUldJG0.cache +0 -1
  409. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +0 -0
  410. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/haT90mtiCH3Zf_swSAUEHAqM6rBW1RmCtn17tK01EUg.cache +0 -43
  411. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hbHxW8G4K9x2BqU8XQ6Q_LqTfsMrycN_eMTzRnjI2jo.cache +0 -0
  412. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hjllxInWI3XQF-YiYnkzRWbWU1SX91g9nN4phvBvk5g.cache +0 -2
  413. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hoSlpN4LU2quvhx1nOGuNrJHAy6d1-iL8mAE_InhvOk.cache +0 -0
  414. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hwNeZfbfTWi73hZ7tXpxRaVO8EABcaMI9RhrjXAaC6A.cache +0 -0
  415. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hzW2UwGpp5_gPuvGf6OcXquJhksqoifHhzGTjhY8ENg.cache +0 -2
  416. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/i8_QI00Ky0X1GH7YirGDFBrXYxKLwY603knMSn_FfDo.cache +0 -1
  417. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iAtyojOAl87LdE7Hx0Z3KMWQoTzTg0lYZ4fv3Fi8xRU.cache +0 -1
  418. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iM-i0Um1zxRKpbW7mKqgDHqnxEA0wM_ESRqMNvPEV7E.cache +0 -3
  419. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iZC898o-8rs5aClR3LSoYWzINWuG3ZAN1prl5w5Pf7c.cache +0 -0
  420. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iZXWfXfZzMKPgnoKxS_AfnY4hlMGD2MCMXJpKz7pVYU.cache +0 -0
  421. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/idZDFQqiPu3D86p1GWhPcfqSnVPkEiwuaL-Jeeje_WQ.cache +0 -1
  422. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ihvBauGjqenV4k4BEEI4cDnFKpSADsOQL4UpNumMNCg.cache +0 -1
  423. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ixUoYOOxT1VbBQyUbZuimSzOe9pRpVtxTGGQjqRQhkg.cache +0 -0
  424. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iy3r9gTAvaPbYAnTrX3B8_ZsF2OF5IMd3rOGni07OMY.cache +0 -0
  425. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jWRlzmhOchA4xZKR057t5YoLgC6wHgYmIGjKXWWI7CY.cache +0 -0
  426. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/j_RYGpNOhCx42MCovihHxl8-BU5wV9M84UDP4bsG8t4.cache +0 -0
  427. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/k3YV6A2FVgIVN2nQysB7ls2jfcdw-ltndcbuox8zY70.cache +0 -0
  428. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/k7RbgNHcZhY_G2LgMJY34ivdhi38sYVbX1UIWeJI86E.cache +0 -0
  429. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kZllhGwBaULLToW5NxYuPwmzMt7cxFJxR1Beht3lPF8.cache +0 -0
  430. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kbeYM7Hwmof05h22aPiUOyT-fGmndehPZyuEZJsrJO4.cache +0 -0
  431. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kdN71FQgYhgYb4yLMbxG31oo5hx6ONea-QfrGZ5DTH8.cache +0 -1
  432. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kstjDvcVMFzPCqDGd7Yq6zbMXO6bScx9Rzfp8rF5TTQ.cache +0 -0
  433. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ktqG68lHh1i_9q1cgFAEnFfjEjq4yimweC5WTIOKHs0.cache +0 -0
  434. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/l0jT6uvI-NTXDiF0oA7IcSsofzK77NynK0HAwlHSO2w.cache +0 -0
  435. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/l8MO-OMxEKUIw9HIZlKZHj7IwPx3MbJK3n022lR1w7w.cache +0 -1
  436. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lI9A7rLSad0E03TAOx6ZUYkgtlp3ZiDuVnmZxg5alTg.cache +0 -0
  437. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lN4fBnX-FKwsp_jNypr8y6hfMGoACEGNj1Gu65P7wrA.cache +0 -0
  438. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lWWeG3-7qbB2dLlCCoFYrVsqAcZi0zUJ37llI8HZ_Do.cache +0 -0
  439. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lYNa4ZMv5xLVp0YAgY-tR-vH_wDqTA6dBZfWfyA3OIk.cache +0 -1
  440. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lnx5XAScg7ZzTqdfn2Xlb72H_7vWiMAFvpGTnTIrkP0.cache +0 -1
  441. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ltGAepIIGOSO6B90seerUMdcysIaq1hXUIvoBkCPtNY.cache +0 -3
  442. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mD1ag8UuaTAtk8OMHC9JkJ8gCf5mPZXnbr4GrhNUCrI.cache +0 -1
  443. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mZ51wd51Ev3JbJZIXWJ_FUiVU-Zhv8w-1ULcWWDgPKE.cache +0 -1
  444. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/masqcJRGPIheBXHGZIWssTdbtGJwVvqbhvejc_yHE9I.cache +0 -1
  445. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mhRAfhbx2c6rGVekWI_wFCHg29tKVLO0W7mAB8vXMaM.cache +0 -0
  446. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mje3z4yMd0ORjgcly8VO7ep5O4pPIrtP3ktGNKlRUu4.cache +0 -1
  447. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mqzn8jaE0P5BMrLLeMw5zgP_rA6d6C905qgpV7OV5ME.cache +0 -1
  448. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nDg9fPUH2XP-69zRnE4b3tX897cceMUo9TfX9bhodL0.cache +0 -0
  449. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nOjjuF1eg7usNfjFAh-xH9o4kVfUwLT9WukjR3xb2KM.cache +0 -1
  450. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nPXuSm5yCE99vDg-9rJfcxvUMjUoYWM1N3UIRzRki2Y.cache +0 -1
  451. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nZDmQ21XRiZACpkC0zoINWy4o3zq7E41LXAZjztghVY.cache +0 -0
  452. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nZUTko69V5LKnLJ_-TXjvEOII5PnPq5Uhlz1DtyV09Q.cache +0 -0
  453. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/n_3ZEl5ZqWALzdfAjmDEr6ScXdxTSpLdcGkzcz4IIZA.cache +0 -3
  454. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/o4CGTw7fgqhLOidr0hH29eVtrx53Ff0iqdBN0wVxMO4.cache +0 -0
  455. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oTvYfQtYyh57vc--onuH87Bf3FFuI-ZVZgk0V3pI3xQ.cache +0 -0
  456. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oVm0K6ovRbXckxgLVfPs6DRVCC6ZONomynNJu_lx1ek.cache +0 -0
  457. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oX7D-pZKQZgckZx6_mI7cz7K-AS09luINMB67oa7EtE.cache +0 -1
  458. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oiBUcCiA7Ogt-nCpapgjJ_fzGGMsLNVDkWdlXwNBPQQ.cache +0 -1
  459. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/otrlGMRwnwwUpmG-Mcq9b20CvQxTDkvCPZzASH_OrFE.cache +0 -0
  460. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pA5ovGs3cbiyvqripsdazV4sydAisCjEzTKbEZwUnuU.cache +0 -1
  461. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pB3n7Ri2PTJjpnH3iAF3XMIaWrgPVraY7MjmME-Tsvk.cache +0 -0
  462. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pEDQdXIGmd2xKcAlvFPPfZUXuRwfZVIg5kIGymdhWMU.cache +0 -3
  463. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +0 -0
  464. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pGMMfhLqhHuJ83yp73op9Bl2Cq_rED0RURnaJA-upEc.cache +0 -0
  465. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pVGzUfPRJ8QYRtdaKhHx8raBD65LMQIs7Z5iP6H2mXY.cache +0 -1
  466. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pbDG9orR_OQ45Iijo2TQ_nE4sf9uyiHKw460eYHuVv0.cache +0 -0
  467. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pfByHatc5yJ6JP9nhO2WDSErm_JOz-WdsHXnJQw01YA.cache +0 -47
  468. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pgyTlJflt960qxLp0jk9ArMwOVaipCF9djlTexDxSsY.cache +0 -1
  469. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pkWFuXMXXNEbBMGgSdV3W1kk5cvUcn26KXRpMdIHGdE.cache +0 -3
  470. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pxLE8vL4Q5TC-Ay2gIkSD8ZoXxm5V9eRl-UaAwc-lcA.cache +0 -1
  471. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qLG5sYmEkPwzfBf3p8vpIB8nR7rmLSpinHGkAWtw6Hs.cache +0 -2
  472. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qU35EMLFhWzgIjJN0kiIJE9wecSkFpSX9ULRC0EZ8YI.cache +0 -0
  473. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qXvMV79eSflvUZlAkCRu_tk9ckmrqI-AQLKeDXKhkxA.cache +0 -0
  474. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qi7uaELxbH3V5KxkKEbqeQN6y5hwltgv4v65M3uJltk.cache +0 -1
  475. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/quI_btb14SaD77pioo-jaHK5joF-KY2yvdivLPKhpRg.cache +0 -1
  476. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rIhbZWTsSFbj1egeGu8anwfxVy-kPWbTgooyUa0cJuc.cache +0 -2
  477. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rLnNbn4MNigMOl6gFXrlnTLssgUoieyi1tGRrx1drus.cache +0 -1
  478. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rNX6mOCO7g3RHaABe_w1-hhtksb_1EmnAFVP8J5pMDA.cache +0 -0
  479. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rlcqcUEB9sgm7GBAXnBzI3hdDL9SO-4DFq-QEWqs1qM.cache +0 -1
  480. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rpjTKc8X8-2YQub0h5G8BbNPMahdH4p5GazCOgmEOxs.cache +0 -3
  481. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/s165S3eWrpwP8v2jOuQd4-I8Dtk8FwLnRJSyAMxn4-s.cache +0 -1
  482. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/s9Oe_4mjQl9rECuanJrnXUMvmmE53bkk8Y7M5Hg-AYQ.cache +0 -1
  483. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/sKkGj3rfMqCSaWzXlseGUxVEnnmHNOnlgBnmmeuple4.cache +0 -1
  484. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/scrrrkkut4uwHco9hl3MeifUZ_AYQlTB3FR23zQ3LFg.cache +0 -1
  485. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/sfm7Mp4sHM4UhLrYX3ovOZLwX06t0dstkdr2G8zlUu4.cache +0 -1
  486. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/slxQYKS2z36re3l0ROZct2ajj4rVsu0py4JiE1fT1TU.cache +0 -1
  487. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/t1rZ8hEPHuiy86XaSI3BXAjUN6X-PmKoTfQHSENdDpY.cache +0 -0
  488. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tZUMBY9EuubrvoCj0Bq_W0lb89Ah_pT9PnXJGlrHFqY.cache +0 -1
  489. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tk0wAbfZ8Ihu7Oeiun3Ew7cHnp7XaDj1Afk5J0e6Tbg.cache +0 -1
  490. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tmn0TvbA1XS5VQzzh3zjVols4fc6KuL3zFhjxTBCRBc.cache +0 -1
  491. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/u6skyHvz1v4QYOyi5a9E2Eue3bsVcd-h7HfvdsRHdSs.cache +0 -1
  492. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uBBIgv7feIXbO0f2i7Rf-gptpm08TvwEb79_q_GdE_U.cache +0 -1
  493. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uR240Op_Sz5ag68jGNLpSySqCxT-zP5Rn26QPqD9O0c.cache +0 -0
  494. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uXPRwPJvoEA4D-ESo9I6ZQ1osSXIExQNBt-LC1FksY8.cache +0 -0
  495. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ub2WwpIy1g1eyFl7drZBVKNlQ6erc3gLGnU_9r9XFws.cache +0 -1
  496. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ugLX5c4npN8Sav8L2nTHzaBidrCqLdAVLbl9g7SPhFU.cache +0 -1
  497. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uo47-U1ZjMUQKA-mY1mfClg1m4GO-QHl5T95_rwwoF0.cache +0 -0
  498. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/urovnq4K0jLRNVivgGMtVs6WCUWnL13uCVIB4edVLnU.cache +0 -0
  499. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v-WeT5Y37QFpfliz5tGJobwaXkxlGrhTjNfZktAzg30.cache +0 -1
  500. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v8LkBJ_BQz2QI5J0TCuqTyXx87g6T2KQ1IVyjnCGTPY.cache +0 -1
  501. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v8SnFPoi_IkzPE3qmOxSlwHlrYDgf1ijKB1-AYQioIE.cache +0 -1
  502. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v9t2wFdEMW2gdjLELPzfFE8OrV6fF3NcVR4mflKWX4A.cache +0 -0
  503. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vC7uYN3KAhK7ZAxeSK0yjhDD-IKxvtw35ZDkkJIilRI.cache +0 -0
  504. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vEpmArLngYDi7ISV37GPSk6ISl88hnKT6SF5O7ZiNuk.cache +0 -3
  505. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vNmiZprmu2FRwdizwotxKlfPbEMUnbSmjVak0JhnNIY.cache +0 -1
  506. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vdUAa89YJdcavkqsj-ceN8eWy9NeIqaKuagMgby0U2w.cache +0 -1
  507. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vieBl4gnaoCL6hMyA5t0zdkvzJBgbujhLfPiNjEsIeQ.cache +0 -1
  508. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vnprFn2MZgxN0Lq4Gb2SQqB5z2FvWTt_ss7Rbh2Kc1k.cache +0 -1
  509. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vpcl4ELj5TuwciGv4etatPs7umvIvW6NqrVbDUv4w_E.cache +0 -0
  510. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wBSc-PzpopMctsH5BUnKLWWhNPDshf9S_LnYg9eNTK8.cache +0 -0
  511. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wergLyCPMn7HP3V6XHfDU1RtC02vt0mK012FL6Xb6HA.cache +0 -0
  512. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wnG4tUkdFW9-uxCu3eRXNUucrzpaaDs1M9jCccP0YII.cache +0 -1
  513. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wvWBU7oqg6vieePxlytvvkO2APKlq9XZEAhJs-Yt0vU.cache +0 -0
  514. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/x-tlmeMWjIw_EY4eWA533CTnuRkfNufzdp_4ewk6LaA.cache +0 -0
  515. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xWnmnr7Yqs-HAfZ-4XwO6ac16Ffcvt9u_aifEUtvXbY.cache +0 -2
  516. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xlXymkntMt5-hib0TKZYQZs5jb-cq_dl1Jmrx2RgG0E.cache +0 -3
  517. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/y8Jz-cIE6NcScpKKk7zHWqXUqGwMvtjsAGOcDnSLznQ.cache +0 -1
  518. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yGm8TqLUED5x6seng780g8lpaAo8SwvTD2pHMY0PK2o.cache +0 -0
  519. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yIHTu6qEs9jb-nbDzFj58esKEiE9FD_qq5h54chyeZU.cache +0 -1
  520. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yJIQWfgoeVH3XVh9IzdtFPLl5Mhz9WHl6SN9wrWTf9Q.cache +0 -4
  521. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yPpSg9J5gYcbCIMiYld-pD8jpxexe6D6w1fYxV9jkWQ.cache +0 -0
  522. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yU-jstwkhFguf2Ry9ybt-HcoV2uxiFdZIcmvYTCYSY4.cache +0 -1
  523. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yalmSC_CrL1qbOBzwmmNv7CfYEzIcpDbo1vhxBuUDRw.cache +0 -1
  524. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ymWNNrWyBuBe1hzKOC23rbYUAgahi3wT7ulMWrFFsvE.cache +0 -1
  525. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zSwWwepVUsh3FcUiv7BznxhvpDlKbulxCON3YOWdI1g.cache +0 -0
  526. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zU_LoH1muqjImyVucYFq5n6InK1d-nIn8M8NmDK1sh0.cache +0 -0
  527. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zYxeWeS-Ga3s5651Dzzi3rbU3wMcAoV6XAJNwWJf_xY.cache +0 -0
  528. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zj8kbF1MlQudR9abEQ40eck6Oy258Dyhv1LAbLjJ40g.cache +0 -3
  529. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zqsvXnq3wviCFbplDD-kDK6nSAChUzlhf5mI23Jm5Xg.cache +0 -1
  530. data/spec/dummy/tmp/mailpeek/1455374900 +0 -45
  531. data/spec/dummy/tmp/mailpeek/1455382926 +0 -29
  532. data/spec/dummy/tmp/mailpeek/1455382929 +0 -21
  533. data/spec/dummy/tmp/mailpeek/1455382932 +0 -11
  534. data/spec/rails_helper.rb +0 -26
  535. data/spec/spec_helper.rb +0 -56
@@ -0,0 +1,166 @@
1
+ // Lock sidebar scroll position on page change
2
+ let scrollTop = null;
3
+
4
+ document.addEventListener("turbolinks:before-render", function() {
5
+ scrollTop = document.querySelector(".sidebar__top").scrollTop;
6
+ });
7
+
8
+ document.addEventListener("turbolinks:render", function() {
9
+ if (scrollTop) {
10
+ document.querySelector(".sidebar__top").scrollTop = scrollTop;
11
+ scrollTop = null;
12
+ }
13
+ });
14
+
15
+ const application = Stimulus.Application.start();
16
+
17
+ application.register(
18
+ "mailpeek",
19
+ class extends Stimulus.Controller {
20
+ static get targets() {
21
+ return ["sidebar", "overlay"];
22
+ }
23
+
24
+ connect() {
25
+ this._handleResize = this._handleResize.bind(this);
26
+ this._handleRefresh = this._handleRefresh.bind(this);
27
+
28
+ window.addEventListener("resize", this._handleResize);
29
+ window.addEventListener("focus", this._handleRefresh);
30
+ // window.onfocus = this._handleRefresh;
31
+
32
+ // this.interval = setInterval(this._handleRefresh, 2500);
33
+ }
34
+
35
+ disconnect() {
36
+ window.removeEventListener("resize", this._handleResize);
37
+ window.removeEventListener("focus", this._handleRefresh);
38
+
39
+ if (this.interval) {
40
+ clearInterval(this.interval);
41
+ this.interval = null;
42
+ }
43
+ }
44
+
45
+ _handleRefresh() {
46
+ $.get("/mailpeek/emails" + window.location.search, function(data) {
47
+ const dataIds = data.emails.map(function(email) {
48
+ return String(email.id);
49
+ });
50
+
51
+ const elementIds = $.map($(".sidebar__email"), function(element) {
52
+ return String($(element).data("id"));
53
+ });
54
+
55
+ let refresh = !isEqual(dataIds, elementIds);
56
+
57
+ if (!refresh) {
58
+ data.emails.forEach(function(email) {
59
+ const element = $('.sidebar__email[data-id="' + email.id + '"]');
60
+
61
+ if (
62
+ (email.read && element.hasClass("sidebar__unread")) ||
63
+ (!email.read && element.hasClass("sidebar__read"))
64
+ ) {
65
+ refresh = true;
66
+ }
67
+ });
68
+ }
69
+
70
+ if (refresh) {
71
+ Turbolinks.visit(window.location.toString(), { action: "replace" });
72
+ }
73
+ });
74
+ }
75
+
76
+ _handleResize() {
77
+ this.sidebarTarget.classList.remove("sidebar_open");
78
+ this.overlayTarget.classList.remove("overlay_open");
79
+ }
80
+
81
+ toggleSidebar() {
82
+ this.sidebarTarget.classList.toggle("sidebar_open");
83
+ this.overlayTarget.classList.toggle("overlay_open");
84
+ }
85
+ }
86
+ );
87
+
88
+ application.register(
89
+ "email",
90
+ class extends Stimulus.Controller {
91
+ static get targets() {
92
+ return [
93
+ "attachments",
94
+ "text",
95
+ "html",
96
+ "tabHtml",
97
+ "tabText",
98
+ "tabAttachments"
99
+ ];
100
+ }
101
+
102
+ connect() {
103
+ if (
104
+ this.tabHtmlTarget &&
105
+ !this.tabHtmlTarget.classList.contains("hidden")
106
+ ) {
107
+ this.showHtml();
108
+ } else if (
109
+ this.tabTextTarget &&
110
+ !this.tabTextTarget.classList.contains("hidden")
111
+ ) {
112
+ this.showText();
113
+ }
114
+ }
115
+
116
+ showAttachments() {
117
+ this.tabAttachmentsTarget.children[0].classList.add("bg-white");
118
+ this.tabAttachmentsTarget.children[0].classList.remove(
119
+ "border-transparent"
120
+ );
121
+ this.attachmentsTarget.classList.remove("hidden");
122
+
123
+ this.tabHtmlTarget.children[0].classList.remove("bg-white");
124
+ this.tabHtmlTarget.children[0].classList.add("border-transparent");
125
+ this.htmlTarget.classList.add("hidden");
126
+
127
+ this.tabTextTarget.children[0].classList.remove("bg-white");
128
+ this.tabTextTarget.children[0].classList.add("border-transparent");
129
+ this.textTarget.classList.add("hidden");
130
+
131
+ return false;
132
+ }
133
+
134
+ showHtml() {
135
+ this.tabAttachmentsTarget.children[0].classList.remove("bg-white");
136
+ this.tabAttachmentsTarget.children[0].classList.add("border-transparent");
137
+ this.attachmentsTarget.classList.add("hidden");
138
+
139
+ this.tabHtmlTarget.children[0].classList.add("bg-white");
140
+ this.tabHtmlTarget.children[0].classList.remove("border-transparent");
141
+ this.htmlTarget.classList.remove("hidden");
142
+
143
+ this.tabTextTarget.children[0].classList.remove("bg-white");
144
+ this.tabTextTarget.children[0].classList.add("border-transparent");
145
+ this.textTarget.classList.add("hidden");
146
+
147
+ return false;
148
+ }
149
+
150
+ showText() {
151
+ this.tabAttachmentsTarget.children[0].classList.remove("bg-white");
152
+ this.tabAttachmentsTarget.children[0].classList.add("border-transparent");
153
+ this.attachmentsTarget.classList.add("hidden");
154
+
155
+ this.tabHtmlTarget.children[0].classList.remove("bg-white");
156
+ this.tabHtmlTarget.children[0].classList.add("border-transparent");
157
+ this.htmlTarget.classList.add("hidden");
158
+
159
+ this.tabTextTarget.children[0].classList.add("bg-white");
160
+ this.tabTextTarget.children[0].classList.remove("border-transparent");
161
+ this.textTarget.classList.remove("hidden");
162
+
163
+ return false;
164
+ }
165
+ }
166
+ );
@@ -0,0 +1,1647 @@
1
+ /**
2
+ * lodash (Custom Build) <https://lodash.com/>
3
+ * Build: `lodash modularize exports="npm" -o ./`
4
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
5
+ * Released under MIT license <https://lodash.com/license>
6
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
7
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
8
+ */
9
+
10
+ /** Used as the size to enable large array optimizations. */
11
+ var LARGE_ARRAY_SIZE = 200;
12
+
13
+ /** Used to stand-in for `undefined` hash values. */
14
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
15
+
16
+ /** Used to compose bitmasks for comparison styles. */
17
+ var UNORDERED_COMPARE_FLAG = 1,
18
+ PARTIAL_COMPARE_FLAG = 2;
19
+
20
+ /** Used as references for various `Number` constants. */
21
+ var MAX_SAFE_INTEGER = 9007199254740991;
22
+
23
+ /** `Object#toString` result references. */
24
+ var argsTag = '[object Arguments]',
25
+ arrayTag = '[object Array]',
26
+ boolTag = '[object Boolean]',
27
+ dateTag = '[object Date]',
28
+ errorTag = '[object Error]',
29
+ funcTag = '[object Function]',
30
+ genTag = '[object GeneratorFunction]',
31
+ mapTag = '[object Map]',
32
+ numberTag = '[object Number]',
33
+ objectTag = '[object Object]',
34
+ promiseTag = '[object Promise]',
35
+ regexpTag = '[object RegExp]',
36
+ setTag = '[object Set]',
37
+ stringTag = '[object String]',
38
+ symbolTag = '[object Symbol]',
39
+ weakMapTag = '[object WeakMap]';
40
+
41
+ var arrayBufferTag = '[object ArrayBuffer]',
42
+ dataViewTag = '[object DataView]',
43
+ float32Tag = '[object Float32Array]',
44
+ float64Tag = '[object Float64Array]',
45
+ int8Tag = '[object Int8Array]',
46
+ int16Tag = '[object Int16Array]',
47
+ int32Tag = '[object Int32Array]',
48
+ uint8Tag = '[object Uint8Array]',
49
+ uint8ClampedTag = '[object Uint8ClampedArray]',
50
+ uint16Tag = '[object Uint16Array]',
51
+ uint32Tag = '[object Uint32Array]';
52
+
53
+ /**
54
+ * Used to match `RegExp`
55
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
56
+ */
57
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
58
+
59
+ /** Used to detect host constructors (Safari). */
60
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
61
+
62
+ /** Used to detect unsigned integer values. */
63
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
64
+
65
+ /** Used to identify `toStringTag` values of typed arrays. */
66
+ var typedArrayTags = {};
67
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
68
+ typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
69
+ typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
70
+ typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
71
+ typedArrayTags[uint32Tag] = true;
72
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
73
+ typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
74
+ typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
75
+ typedArrayTags[errorTag] = typedArrayTags[funcTag] =
76
+ typedArrayTags[mapTag] = typedArrayTags[numberTag] =
77
+ typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
78
+ typedArrayTags[setTag] = typedArrayTags[stringTag] =
79
+ typedArrayTags[weakMapTag] = false;
80
+
81
+ /** Detect free variable `global` from Node.js. */
82
+ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
83
+
84
+ /** Detect free variable `self`. */
85
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
86
+
87
+ /** Used as a reference to the global object. */
88
+ var root = freeGlobal || freeSelf || Function('return this')();
89
+
90
+ /** Detect free variable `exports`. */
91
+ var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
92
+
93
+ /** Detect free variable `module`. */
94
+ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
95
+
96
+ /** Detect the popular CommonJS extension `module.exports`. */
97
+ var moduleExports = freeModule && freeModule.exports === freeExports;
98
+
99
+ /** Detect free variable `process` from Node.js. */
100
+ var freeProcess = moduleExports && freeGlobal.process;
101
+
102
+ /** Used to access faster Node.js helpers. */
103
+ var nodeUtil = (function() {
104
+ try {
105
+ return freeProcess && freeProcess.binding('util');
106
+ } catch (e) {}
107
+ }());
108
+
109
+ /* Node.js helper references. */
110
+ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
111
+
112
+ /**
113
+ * A specialized version of `_.some` for arrays without support for iteratee
114
+ * shorthands.
115
+ *
116
+ * @private
117
+ * @param {Array} [array] The array to iterate over.
118
+ * @param {Function} predicate The function invoked per iteration.
119
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
120
+ * else `false`.
121
+ */
122
+ function arraySome(array, predicate) {
123
+ var index = -1,
124
+ length = array ? array.length : 0;
125
+
126
+ while (++index < length) {
127
+ if (predicate(array[index], index, array)) {
128
+ return true;
129
+ }
130
+ }
131
+ return false;
132
+ }
133
+
134
+ /**
135
+ * The base implementation of `_.times` without support for iteratee shorthands
136
+ * or max array length checks.
137
+ *
138
+ * @private
139
+ * @param {number} n The number of times to invoke `iteratee`.
140
+ * @param {Function} iteratee The function invoked per iteration.
141
+ * @returns {Array} Returns the array of results.
142
+ */
143
+ function baseTimes(n, iteratee) {
144
+ var index = -1,
145
+ result = Array(n);
146
+
147
+ while (++index < n) {
148
+ result[index] = iteratee(index);
149
+ }
150
+ return result;
151
+ }
152
+
153
+ /**
154
+ * The base implementation of `_.unary` without support for storing metadata.
155
+ *
156
+ * @private
157
+ * @param {Function} func The function to cap arguments for.
158
+ * @returns {Function} Returns the new capped function.
159
+ */
160
+ function baseUnary(func) {
161
+ return function(value) {
162
+ return func(value);
163
+ };
164
+ }
165
+
166
+ /**
167
+ * Gets the value at `key` of `object`.
168
+ *
169
+ * @private
170
+ * @param {Object} [object] The object to query.
171
+ * @param {string} key The key of the property to get.
172
+ * @returns {*} Returns the property value.
173
+ */
174
+ function getValue(object, key) {
175
+ return object == null ? undefined : object[key];
176
+ }
177
+
178
+ /**
179
+ * Checks if `value` is a host object in IE < 9.
180
+ *
181
+ * @private
182
+ * @param {*} value The value to check.
183
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
184
+ */
185
+ function isHostObject(value) {
186
+ // Many host objects are `Object` objects that can coerce to strings
187
+ // despite having improperly defined `toString` methods.
188
+ var result = false;
189
+ if (value != null && typeof value.toString != 'function') {
190
+ try {
191
+ result = !!(value + '');
192
+ } catch (e) {}
193
+ }
194
+ return result;
195
+ }
196
+
197
+ /**
198
+ * Converts `map` to its key-value pairs.
199
+ *
200
+ * @private
201
+ * @param {Object} map The map to convert.
202
+ * @returns {Array} Returns the key-value pairs.
203
+ */
204
+ function mapToArray(map) {
205
+ var index = -1,
206
+ result = Array(map.size);
207
+
208
+ map.forEach(function(value, key) {
209
+ result[++index] = [key, value];
210
+ });
211
+ return result;
212
+ }
213
+
214
+ /**
215
+ * Creates a unary function that invokes `func` with its argument transformed.
216
+ *
217
+ * @private
218
+ * @param {Function} func The function to wrap.
219
+ * @param {Function} transform The argument transform.
220
+ * @returns {Function} Returns the new function.
221
+ */
222
+ function overArg(func, transform) {
223
+ return function(arg) {
224
+ return func(transform(arg));
225
+ };
226
+ }
227
+
228
+ /**
229
+ * Converts `set` to an array of its values.
230
+ *
231
+ * @private
232
+ * @param {Object} set The set to convert.
233
+ * @returns {Array} Returns the values.
234
+ */
235
+ function setToArray(set) {
236
+ var index = -1,
237
+ result = Array(set.size);
238
+
239
+ set.forEach(function(value) {
240
+ result[++index] = value;
241
+ });
242
+ return result;
243
+ }
244
+
245
+ /** Used for built-in method references. */
246
+ var arrayProto = Array.prototype,
247
+ funcProto = Function.prototype,
248
+ objectProto = Object.prototype;
249
+
250
+ /** Used to detect overreaching core-js shims. */
251
+ var coreJsData = root['__core-js_shared__'];
252
+
253
+ /** Used to detect methods masquerading as native. */
254
+ var maskSrcKey = (function() {
255
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
256
+ return uid ? ('Symbol(src)_1.' + uid) : '';
257
+ }());
258
+
259
+ /** Used to resolve the decompiled source of functions. */
260
+ var funcToString = funcProto.toString;
261
+
262
+ /** Used to check objects for own properties. */
263
+ var hasOwnProperty = objectProto.hasOwnProperty;
264
+
265
+ /**
266
+ * Used to resolve the
267
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
268
+ * of values.
269
+ */
270
+ var objectToString = objectProto.toString;
271
+
272
+ /** Used to detect if a method is native. */
273
+ var reIsNative = RegExp('^' +
274
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
275
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
276
+ );
277
+
278
+ /** Built-in value references. */
279
+ var Symbol = root.Symbol,
280
+ Uint8Array = root.Uint8Array,
281
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
282
+ splice = arrayProto.splice;
283
+
284
+ /* Built-in method references for those with the same name as other `lodash` methods. */
285
+ var nativeKeys = overArg(Object.keys, Object);
286
+
287
+ /* Built-in method references that are verified to be native. */
288
+ var DataView = getNative(root, 'DataView'),
289
+ Map = getNative(root, 'Map'),
290
+ Promise = getNative(root, 'Promise'),
291
+ Set = getNative(root, 'Set'),
292
+ WeakMap = getNative(root, 'WeakMap'),
293
+ nativeCreate = getNative(Object, 'create');
294
+
295
+ /** Used to detect maps, sets, and weakmaps. */
296
+ var dataViewCtorString = toSource(DataView),
297
+ mapCtorString = toSource(Map),
298
+ promiseCtorString = toSource(Promise),
299
+ setCtorString = toSource(Set),
300
+ weakMapCtorString = toSource(WeakMap);
301
+
302
+ /** Used to convert symbols to primitives and strings. */
303
+ var symbolProto = Symbol ? Symbol.prototype : undefined,
304
+ symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
305
+
306
+ /**
307
+ * Creates a hash object.
308
+ *
309
+ * @private
310
+ * @constructor
311
+ * @param {Array} [entries] The key-value pairs to cache.
312
+ */
313
+ function Hash(entries) {
314
+ var index = -1,
315
+ length = entries ? entries.length : 0;
316
+
317
+ this.clear();
318
+ while (++index < length) {
319
+ var entry = entries[index];
320
+ this.set(entry[0], entry[1]);
321
+ }
322
+ }
323
+
324
+ /**
325
+ * Removes all key-value entries from the hash.
326
+ *
327
+ * @private
328
+ * @name clear
329
+ * @memberOf Hash
330
+ */
331
+ function hashClear() {
332
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
333
+ }
334
+
335
+ /**
336
+ * Removes `key` and its value from the hash.
337
+ *
338
+ * @private
339
+ * @name delete
340
+ * @memberOf Hash
341
+ * @param {Object} hash The hash to modify.
342
+ * @param {string} key The key of the value to remove.
343
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
344
+ */
345
+ function hashDelete(key) {
346
+ return this.has(key) && delete this.__data__[key];
347
+ }
348
+
349
+ /**
350
+ * Gets the hash value for `key`.
351
+ *
352
+ * @private
353
+ * @name get
354
+ * @memberOf Hash
355
+ * @param {string} key The key of the value to get.
356
+ * @returns {*} Returns the entry value.
357
+ */
358
+ function hashGet(key) {
359
+ var data = this.__data__;
360
+ if (nativeCreate) {
361
+ var result = data[key];
362
+ return result === HASH_UNDEFINED ? undefined : result;
363
+ }
364
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
365
+ }
366
+
367
+ /**
368
+ * Checks if a hash value for `key` exists.
369
+ *
370
+ * @private
371
+ * @name has
372
+ * @memberOf Hash
373
+ * @param {string} key The key of the entry to check.
374
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
375
+ */
376
+ function hashHas(key) {
377
+ var data = this.__data__;
378
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
379
+ }
380
+
381
+ /**
382
+ * Sets the hash `key` to `value`.
383
+ *
384
+ * @private
385
+ * @name set
386
+ * @memberOf Hash
387
+ * @param {string} key The key of the value to set.
388
+ * @param {*} value The value to set.
389
+ * @returns {Object} Returns the hash instance.
390
+ */
391
+ function hashSet(key, value) {
392
+ var data = this.__data__;
393
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
394
+ return this;
395
+ }
396
+
397
+ // Add methods to `Hash`.
398
+ Hash.prototype.clear = hashClear;
399
+ Hash.prototype['delete'] = hashDelete;
400
+ Hash.prototype.get = hashGet;
401
+ Hash.prototype.has = hashHas;
402
+ Hash.prototype.set = hashSet;
403
+
404
+ /**
405
+ * Creates an list cache object.
406
+ *
407
+ * @private
408
+ * @constructor
409
+ * @param {Array} [entries] The key-value pairs to cache.
410
+ */
411
+ function ListCache(entries) {
412
+ var index = -1,
413
+ length = entries ? entries.length : 0;
414
+
415
+ this.clear();
416
+ while (++index < length) {
417
+ var entry = entries[index];
418
+ this.set(entry[0], entry[1]);
419
+ }
420
+ }
421
+
422
+ /**
423
+ * Removes all key-value entries from the list cache.
424
+ *
425
+ * @private
426
+ * @name clear
427
+ * @memberOf ListCache
428
+ */
429
+ function listCacheClear() {
430
+ this.__data__ = [];
431
+ }
432
+
433
+ /**
434
+ * Removes `key` and its value from the list cache.
435
+ *
436
+ * @private
437
+ * @name delete
438
+ * @memberOf ListCache
439
+ * @param {string} key The key of the value to remove.
440
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
441
+ */
442
+ function listCacheDelete(key) {
443
+ var data = this.__data__,
444
+ index = assocIndexOf(data, key);
445
+
446
+ if (index < 0) {
447
+ return false;
448
+ }
449
+ var lastIndex = data.length - 1;
450
+ if (index == lastIndex) {
451
+ data.pop();
452
+ } else {
453
+ splice.call(data, index, 1);
454
+ }
455
+ return true;
456
+ }
457
+
458
+ /**
459
+ * Gets the list cache value for `key`.
460
+ *
461
+ * @private
462
+ * @name get
463
+ * @memberOf ListCache
464
+ * @param {string} key The key of the value to get.
465
+ * @returns {*} Returns the entry value.
466
+ */
467
+ function listCacheGet(key) {
468
+ var data = this.__data__,
469
+ index = assocIndexOf(data, key);
470
+
471
+ return index < 0 ? undefined : data[index][1];
472
+ }
473
+
474
+ /**
475
+ * Checks if a list cache value for `key` exists.
476
+ *
477
+ * @private
478
+ * @name has
479
+ * @memberOf ListCache
480
+ * @param {string} key The key of the entry to check.
481
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
482
+ */
483
+ function listCacheHas(key) {
484
+ return assocIndexOf(this.__data__, key) > -1;
485
+ }
486
+
487
+ /**
488
+ * Sets the list cache `key` to `value`.
489
+ *
490
+ * @private
491
+ * @name set
492
+ * @memberOf ListCache
493
+ * @param {string} key The key of the value to set.
494
+ * @param {*} value The value to set.
495
+ * @returns {Object} Returns the list cache instance.
496
+ */
497
+ function listCacheSet(key, value) {
498
+ var data = this.__data__,
499
+ index = assocIndexOf(data, key);
500
+
501
+ if (index < 0) {
502
+ data.push([key, value]);
503
+ } else {
504
+ data[index][1] = value;
505
+ }
506
+ return this;
507
+ }
508
+
509
+ // Add methods to `ListCache`.
510
+ ListCache.prototype.clear = listCacheClear;
511
+ ListCache.prototype['delete'] = listCacheDelete;
512
+ ListCache.prototype.get = listCacheGet;
513
+ ListCache.prototype.has = listCacheHas;
514
+ ListCache.prototype.set = listCacheSet;
515
+
516
+ /**
517
+ * Creates a map cache object to store key-value pairs.
518
+ *
519
+ * @private
520
+ * @constructor
521
+ * @param {Array} [entries] The key-value pairs to cache.
522
+ */
523
+ function MapCache(entries) {
524
+ var index = -1,
525
+ length = entries ? entries.length : 0;
526
+
527
+ this.clear();
528
+ while (++index < length) {
529
+ var entry = entries[index];
530
+ this.set(entry[0], entry[1]);
531
+ }
532
+ }
533
+
534
+ /**
535
+ * Removes all key-value entries from the map.
536
+ *
537
+ * @private
538
+ * @name clear
539
+ * @memberOf MapCache
540
+ */
541
+ function mapCacheClear() {
542
+ this.__data__ = {
543
+ 'hash': new Hash,
544
+ 'map': new (Map || ListCache),
545
+ 'string': new Hash
546
+ };
547
+ }
548
+
549
+ /**
550
+ * Removes `key` and its value from the map.
551
+ *
552
+ * @private
553
+ * @name delete
554
+ * @memberOf MapCache
555
+ * @param {string} key The key of the value to remove.
556
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
557
+ */
558
+ function mapCacheDelete(key) {
559
+ return getMapData(this, key)['delete'](key);
560
+ }
561
+
562
+ /**
563
+ * Gets the map value for `key`.
564
+ *
565
+ * @private
566
+ * @name get
567
+ * @memberOf MapCache
568
+ * @param {string} key The key of the value to get.
569
+ * @returns {*} Returns the entry value.
570
+ */
571
+ function mapCacheGet(key) {
572
+ return getMapData(this, key).get(key);
573
+ }
574
+
575
+ /**
576
+ * Checks if a map value for `key` exists.
577
+ *
578
+ * @private
579
+ * @name has
580
+ * @memberOf MapCache
581
+ * @param {string} key The key of the entry to check.
582
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
583
+ */
584
+ function mapCacheHas(key) {
585
+ return getMapData(this, key).has(key);
586
+ }
587
+
588
+ /**
589
+ * Sets the map `key` to `value`.
590
+ *
591
+ * @private
592
+ * @name set
593
+ * @memberOf MapCache
594
+ * @param {string} key The key of the value to set.
595
+ * @param {*} value The value to set.
596
+ * @returns {Object} Returns the map cache instance.
597
+ */
598
+ function mapCacheSet(key, value) {
599
+ getMapData(this, key).set(key, value);
600
+ return this;
601
+ }
602
+
603
+ // Add methods to `MapCache`.
604
+ MapCache.prototype.clear = mapCacheClear;
605
+ MapCache.prototype['delete'] = mapCacheDelete;
606
+ MapCache.prototype.get = mapCacheGet;
607
+ MapCache.prototype.has = mapCacheHas;
608
+ MapCache.prototype.set = mapCacheSet;
609
+
610
+ /**
611
+ *
612
+ * Creates an array cache object to store unique values.
613
+ *
614
+ * @private
615
+ * @constructor
616
+ * @param {Array} [values] The values to cache.
617
+ */
618
+ function SetCache(values) {
619
+ var index = -1,
620
+ length = values ? values.length : 0;
621
+
622
+ this.__data__ = new MapCache;
623
+ while (++index < length) {
624
+ this.add(values[index]);
625
+ }
626
+ }
627
+
628
+ /**
629
+ * Adds `value` to the array cache.
630
+ *
631
+ * @private
632
+ * @name add
633
+ * @memberOf SetCache
634
+ * @alias push
635
+ * @param {*} value The value to cache.
636
+ * @returns {Object} Returns the cache instance.
637
+ */
638
+ function setCacheAdd(value) {
639
+ this.__data__.set(value, HASH_UNDEFINED);
640
+ return this;
641
+ }
642
+
643
+ /**
644
+ * Checks if `value` is in the array cache.
645
+ *
646
+ * @private
647
+ * @name has
648
+ * @memberOf SetCache
649
+ * @param {*} value The value to search for.
650
+ * @returns {number} Returns `true` if `value` is found, else `false`.
651
+ */
652
+ function setCacheHas(value) {
653
+ return this.__data__.has(value);
654
+ }
655
+
656
+ // Add methods to `SetCache`.
657
+ SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
658
+ SetCache.prototype.has = setCacheHas;
659
+
660
+ /**
661
+ * Creates a stack cache object to store key-value pairs.
662
+ *
663
+ * @private
664
+ * @constructor
665
+ * @param {Array} [entries] The key-value pairs to cache.
666
+ */
667
+ function Stack(entries) {
668
+ this.__data__ = new ListCache(entries);
669
+ }
670
+
671
+ /**
672
+ * Removes all key-value entries from the stack.
673
+ *
674
+ * @private
675
+ * @name clear
676
+ * @memberOf Stack
677
+ */
678
+ function stackClear() {
679
+ this.__data__ = new ListCache;
680
+ }
681
+
682
+ /**
683
+ * Removes `key` and its value from the stack.
684
+ *
685
+ * @private
686
+ * @name delete
687
+ * @memberOf Stack
688
+ * @param {string} key The key of the value to remove.
689
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
690
+ */
691
+ function stackDelete(key) {
692
+ return this.__data__['delete'](key);
693
+ }
694
+
695
+ /**
696
+ * Gets the stack value for `key`.
697
+ *
698
+ * @private
699
+ * @name get
700
+ * @memberOf Stack
701
+ * @param {string} key The key of the value to get.
702
+ * @returns {*} Returns the entry value.
703
+ */
704
+ function stackGet(key) {
705
+ return this.__data__.get(key);
706
+ }
707
+
708
+ /**
709
+ * Checks if a stack value for `key` exists.
710
+ *
711
+ * @private
712
+ * @name has
713
+ * @memberOf Stack
714
+ * @param {string} key The key of the entry to check.
715
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
716
+ */
717
+ function stackHas(key) {
718
+ return this.__data__.has(key);
719
+ }
720
+
721
+ /**
722
+ * Sets the stack `key` to `value`.
723
+ *
724
+ * @private
725
+ * @name set
726
+ * @memberOf Stack
727
+ * @param {string} key The key of the value to set.
728
+ * @param {*} value The value to set.
729
+ * @returns {Object} Returns the stack cache instance.
730
+ */
731
+ function stackSet(key, value) {
732
+ var cache = this.__data__;
733
+ if (cache instanceof ListCache) {
734
+ var pairs = cache.__data__;
735
+ if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
736
+ pairs.push([key, value]);
737
+ return this;
738
+ }
739
+ cache = this.__data__ = new MapCache(pairs);
740
+ }
741
+ cache.set(key, value);
742
+ return this;
743
+ }
744
+
745
+ // Add methods to `Stack`.
746
+ Stack.prototype.clear = stackClear;
747
+ Stack.prototype['delete'] = stackDelete;
748
+ Stack.prototype.get = stackGet;
749
+ Stack.prototype.has = stackHas;
750
+ Stack.prototype.set = stackSet;
751
+
752
+ /**
753
+ * Creates an array of the enumerable property names of the array-like `value`.
754
+ *
755
+ * @private
756
+ * @param {*} value The value to query.
757
+ * @param {boolean} inherited Specify returning inherited property names.
758
+ * @returns {Array} Returns the array of property names.
759
+ */
760
+ function arrayLikeKeys(value, inherited) {
761
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
762
+ // Safari 9 makes `arguments.length` enumerable in strict mode.
763
+ var result = (isArray(value) || isArguments(value))
764
+ ? baseTimes(value.length, String)
765
+ : [];
766
+
767
+ var length = result.length,
768
+ skipIndexes = !!length;
769
+
770
+ for (var key in value) {
771
+ if ((inherited || hasOwnProperty.call(value, key)) &&
772
+ !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
773
+ result.push(key);
774
+ }
775
+ }
776
+ return result;
777
+ }
778
+
779
+ /**
780
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
781
+ *
782
+ * @private
783
+ * @param {Array} array The array to inspect.
784
+ * @param {*} key The key to search for.
785
+ * @returns {number} Returns the index of the matched value, else `-1`.
786
+ */
787
+ function assocIndexOf(array, key) {
788
+ var length = array.length;
789
+ while (length--) {
790
+ if (eq(array[length][0], key)) {
791
+ return length;
792
+ }
793
+ }
794
+ return -1;
795
+ }
796
+
797
+ /**
798
+ * The base implementation of `getTag`.
799
+ *
800
+ * @private
801
+ * @param {*} value The value to query.
802
+ * @returns {string} Returns the `toStringTag`.
803
+ */
804
+ function baseGetTag(value) {
805
+ return objectToString.call(value);
806
+ }
807
+
808
+ /**
809
+ * The base implementation of `_.isEqual` which supports partial comparisons
810
+ * and tracks traversed objects.
811
+ *
812
+ * @private
813
+ * @param {*} value The value to compare.
814
+ * @param {*} other The other value to compare.
815
+ * @param {Function} [customizer] The function to customize comparisons.
816
+ * @param {boolean} [bitmask] The bitmask of comparison flags.
817
+ * The bitmask may be composed of the following flags:
818
+ * 1 - Unordered comparison
819
+ * 2 - Partial comparison
820
+ * @param {Object} [stack] Tracks traversed `value` and `other` objects.
821
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
822
+ */
823
+ function baseIsEqual(value, other, customizer, bitmask, stack) {
824
+ if (value === other) {
825
+ return true;
826
+ }
827
+ if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
828
+ return value !== value && other !== other;
829
+ }
830
+ return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
831
+ }
832
+
833
+ /**
834
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
835
+ * deep comparisons and tracks traversed objects enabling objects with circular
836
+ * references to be compared.
837
+ *
838
+ * @private
839
+ * @param {Object} object The object to compare.
840
+ * @param {Object} other The other object to compare.
841
+ * @param {Function} equalFunc The function to determine equivalents of values.
842
+ * @param {Function} [customizer] The function to customize comparisons.
843
+ * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
844
+ * for more details.
845
+ * @param {Object} [stack] Tracks traversed `object` and `other` objects.
846
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
847
+ */
848
+ function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
849
+ var objIsArr = isArray(object),
850
+ othIsArr = isArray(other),
851
+ objTag = arrayTag,
852
+ othTag = arrayTag;
853
+
854
+ if (!objIsArr) {
855
+ objTag = getTag(object);
856
+ objTag = objTag == argsTag ? objectTag : objTag;
857
+ }
858
+ if (!othIsArr) {
859
+ othTag = getTag(other);
860
+ othTag = othTag == argsTag ? objectTag : othTag;
861
+ }
862
+ var objIsObj = objTag == objectTag && !isHostObject(object),
863
+ othIsObj = othTag == objectTag && !isHostObject(other),
864
+ isSameTag = objTag == othTag;
865
+
866
+ if (isSameTag && !objIsObj) {
867
+ stack || (stack = new Stack);
868
+ return (objIsArr || isTypedArray(object))
869
+ ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
870
+ : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
871
+ }
872
+ if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
873
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
874
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
875
+
876
+ if (objIsWrapped || othIsWrapped) {
877
+ var objUnwrapped = objIsWrapped ? object.value() : object,
878
+ othUnwrapped = othIsWrapped ? other.value() : other;
879
+
880
+ stack || (stack = new Stack);
881
+ return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
882
+ }
883
+ }
884
+ if (!isSameTag) {
885
+ return false;
886
+ }
887
+ stack || (stack = new Stack);
888
+ return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
889
+ }
890
+
891
+ /**
892
+ * The base implementation of `_.isNative` without bad shim checks.
893
+ *
894
+ * @private
895
+ * @param {*} value The value to check.
896
+ * @returns {boolean} Returns `true` if `value` is a native function,
897
+ * else `false`.
898
+ */
899
+ function baseIsNative(value) {
900
+ if (!isObject(value) || isMasked(value)) {
901
+ return false;
902
+ }
903
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
904
+ return pattern.test(toSource(value));
905
+ }
906
+
907
+ /**
908
+ * The base implementation of `_.isTypedArray` without Node.js optimizations.
909
+ *
910
+ * @private
911
+ * @param {*} value The value to check.
912
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
913
+ */
914
+ function baseIsTypedArray(value) {
915
+ return isObjectLike(value) &&
916
+ isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
917
+ }
918
+
919
+ /**
920
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
921
+ *
922
+ * @private
923
+ * @param {Object} object The object to query.
924
+ * @returns {Array} Returns the array of property names.
925
+ */
926
+ function baseKeys(object) {
927
+ if (!isPrototype(object)) {
928
+ return nativeKeys(object);
929
+ }
930
+ var result = [];
931
+ for (var key in Object(object)) {
932
+ if (hasOwnProperty.call(object, key) && key != 'constructor') {
933
+ result.push(key);
934
+ }
935
+ }
936
+ return result;
937
+ }
938
+
939
+ /**
940
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
941
+ * partial deep comparisons.
942
+ *
943
+ * @private
944
+ * @param {Array} array The array to compare.
945
+ * @param {Array} other The other array to compare.
946
+ * @param {Function} equalFunc The function to determine equivalents of values.
947
+ * @param {Function} customizer The function to customize comparisons.
948
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
949
+ * for more details.
950
+ * @param {Object} stack Tracks traversed `array` and `other` objects.
951
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
952
+ */
953
+ function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
954
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
955
+ arrLength = array.length,
956
+ othLength = other.length;
957
+
958
+ if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
959
+ return false;
960
+ }
961
+ // Assume cyclic values are equal.
962
+ var stacked = stack.get(array);
963
+ if (stacked && stack.get(other)) {
964
+ return stacked == other;
965
+ }
966
+ var index = -1,
967
+ result = true,
968
+ seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;
969
+
970
+ stack.set(array, other);
971
+ stack.set(other, array);
972
+
973
+ // Ignore non-index properties.
974
+ while (++index < arrLength) {
975
+ var arrValue = array[index],
976
+ othValue = other[index];
977
+
978
+ if (customizer) {
979
+ var compared = isPartial
980
+ ? customizer(othValue, arrValue, index, other, array, stack)
981
+ : customizer(arrValue, othValue, index, array, other, stack);
982
+ }
983
+ if (compared !== undefined) {
984
+ if (compared) {
985
+ continue;
986
+ }
987
+ result = false;
988
+ break;
989
+ }
990
+ // Recursively compare arrays (susceptible to call stack limits).
991
+ if (seen) {
992
+ if (!arraySome(other, function(othValue, othIndex) {
993
+ if (!seen.has(othIndex) &&
994
+ (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
995
+ return seen.add(othIndex);
996
+ }
997
+ })) {
998
+ result = false;
999
+ break;
1000
+ }
1001
+ } else if (!(
1002
+ arrValue === othValue ||
1003
+ equalFunc(arrValue, othValue, customizer, bitmask, stack)
1004
+ )) {
1005
+ result = false;
1006
+ break;
1007
+ }
1008
+ }
1009
+ stack['delete'](array);
1010
+ stack['delete'](other);
1011
+ return result;
1012
+ }
1013
+
1014
+ /**
1015
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
1016
+ * the same `toStringTag`.
1017
+ *
1018
+ * **Note:** This function only supports comparing values with tags of
1019
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
1020
+ *
1021
+ * @private
1022
+ * @param {Object} object The object to compare.
1023
+ * @param {Object} other The other object to compare.
1024
+ * @param {string} tag The `toStringTag` of the objects to compare.
1025
+ * @param {Function} equalFunc The function to determine equivalents of values.
1026
+ * @param {Function} customizer The function to customize comparisons.
1027
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
1028
+ * for more details.
1029
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
1030
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
1031
+ */
1032
+ function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
1033
+ switch (tag) {
1034
+ case dataViewTag:
1035
+ if ((object.byteLength != other.byteLength) ||
1036
+ (object.byteOffset != other.byteOffset)) {
1037
+ return false;
1038
+ }
1039
+ object = object.buffer;
1040
+ other = other.buffer;
1041
+
1042
+ case arrayBufferTag:
1043
+ if ((object.byteLength != other.byteLength) ||
1044
+ !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
1045
+ return false;
1046
+ }
1047
+ return true;
1048
+
1049
+ case boolTag:
1050
+ case dateTag:
1051
+ case numberTag:
1052
+ // Coerce booleans to `1` or `0` and dates to milliseconds.
1053
+ // Invalid dates are coerced to `NaN`.
1054
+ return eq(+object, +other);
1055
+
1056
+ case errorTag:
1057
+ return object.name == other.name && object.message == other.message;
1058
+
1059
+ case regexpTag:
1060
+ case stringTag:
1061
+ // Coerce regexes to strings and treat strings, primitives and objects,
1062
+ // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
1063
+ // for more details.
1064
+ return object == (other + '');
1065
+
1066
+ case mapTag:
1067
+ var convert = mapToArray;
1068
+
1069
+ case setTag:
1070
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
1071
+ convert || (convert = setToArray);
1072
+
1073
+ if (object.size != other.size && !isPartial) {
1074
+ return false;
1075
+ }
1076
+ // Assume cyclic values are equal.
1077
+ var stacked = stack.get(object);
1078
+ if (stacked) {
1079
+ return stacked == other;
1080
+ }
1081
+ bitmask |= UNORDERED_COMPARE_FLAG;
1082
+
1083
+ // Recursively compare objects (susceptible to call stack limits).
1084
+ stack.set(object, other);
1085
+ var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
1086
+ stack['delete'](object);
1087
+ return result;
1088
+
1089
+ case symbolTag:
1090
+ if (symbolValueOf) {
1091
+ return symbolValueOf.call(object) == symbolValueOf.call(other);
1092
+ }
1093
+ }
1094
+ return false;
1095
+ }
1096
+
1097
+ /**
1098
+ * A specialized version of `baseIsEqualDeep` for objects with support for
1099
+ * partial deep comparisons.
1100
+ *
1101
+ * @private
1102
+ * @param {Object} object The object to compare.
1103
+ * @param {Object} other The other object to compare.
1104
+ * @param {Function} equalFunc The function to determine equivalents of values.
1105
+ * @param {Function} customizer The function to customize comparisons.
1106
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
1107
+ * for more details.
1108
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
1109
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
1110
+ */
1111
+ function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
1112
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
1113
+ objProps = keys(object),
1114
+ objLength = objProps.length,
1115
+ othProps = keys(other),
1116
+ othLength = othProps.length;
1117
+
1118
+ if (objLength != othLength && !isPartial) {
1119
+ return false;
1120
+ }
1121
+ var index = objLength;
1122
+ while (index--) {
1123
+ var key = objProps[index];
1124
+ if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
1125
+ return false;
1126
+ }
1127
+ }
1128
+ // Assume cyclic values are equal.
1129
+ var stacked = stack.get(object);
1130
+ if (stacked && stack.get(other)) {
1131
+ return stacked == other;
1132
+ }
1133
+ var result = true;
1134
+ stack.set(object, other);
1135
+ stack.set(other, object);
1136
+
1137
+ var skipCtor = isPartial;
1138
+ while (++index < objLength) {
1139
+ key = objProps[index];
1140
+ var objValue = object[key],
1141
+ othValue = other[key];
1142
+
1143
+ if (customizer) {
1144
+ var compared = isPartial
1145
+ ? customizer(othValue, objValue, key, other, object, stack)
1146
+ : customizer(objValue, othValue, key, object, other, stack);
1147
+ }
1148
+ // Recursively compare objects (susceptible to call stack limits).
1149
+ if (!(compared === undefined
1150
+ ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
1151
+ : compared
1152
+ )) {
1153
+ result = false;
1154
+ break;
1155
+ }
1156
+ skipCtor || (skipCtor = key == 'constructor');
1157
+ }
1158
+ if (result && !skipCtor) {
1159
+ var objCtor = object.constructor,
1160
+ othCtor = other.constructor;
1161
+
1162
+ // Non `Object` object instances with different constructors are not equal.
1163
+ if (objCtor != othCtor &&
1164
+ ('constructor' in object && 'constructor' in other) &&
1165
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
1166
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
1167
+ result = false;
1168
+ }
1169
+ }
1170
+ stack['delete'](object);
1171
+ stack['delete'](other);
1172
+ return result;
1173
+ }
1174
+
1175
+ /**
1176
+ * Gets the data for `map`.
1177
+ *
1178
+ * @private
1179
+ * @param {Object} map The map to query.
1180
+ * @param {string} key The reference key.
1181
+ * @returns {*} Returns the map data.
1182
+ */
1183
+ function getMapData(map, key) {
1184
+ var data = map.__data__;
1185
+ return isKeyable(key)
1186
+ ? data[typeof key == 'string' ? 'string' : 'hash']
1187
+ : data.map;
1188
+ }
1189
+
1190
+ /**
1191
+ * Gets the native function at `key` of `object`.
1192
+ *
1193
+ * @private
1194
+ * @param {Object} object The object to query.
1195
+ * @param {string} key The key of the method to get.
1196
+ * @returns {*} Returns the function if it's native, else `undefined`.
1197
+ */
1198
+ function getNative(object, key) {
1199
+ var value = getValue(object, key);
1200
+ return baseIsNative(value) ? value : undefined;
1201
+ }
1202
+
1203
+ /**
1204
+ * Gets the `toStringTag` of `value`.
1205
+ *
1206
+ * @private
1207
+ * @param {*} value The value to query.
1208
+ * @returns {string} Returns the `toStringTag`.
1209
+ */
1210
+ var getTag = baseGetTag;
1211
+
1212
+ // Fallback for data views, maps, sets, and weak maps in IE 11,
1213
+ // for data views in Edge < 14, and promises in Node.js.
1214
+ if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
1215
+ (Map && getTag(new Map) != mapTag) ||
1216
+ (Promise && getTag(Promise.resolve()) != promiseTag) ||
1217
+ (Set && getTag(new Set) != setTag) ||
1218
+ (WeakMap && getTag(new WeakMap) != weakMapTag)) {
1219
+ getTag = function(value) {
1220
+ var result = objectToString.call(value),
1221
+ Ctor = result == objectTag ? value.constructor : undefined,
1222
+ ctorString = Ctor ? toSource(Ctor) : undefined;
1223
+
1224
+ if (ctorString) {
1225
+ switch (ctorString) {
1226
+ case dataViewCtorString: return dataViewTag;
1227
+ case mapCtorString: return mapTag;
1228
+ case promiseCtorString: return promiseTag;
1229
+ case setCtorString: return setTag;
1230
+ case weakMapCtorString: return weakMapTag;
1231
+ }
1232
+ }
1233
+ return result;
1234
+ };
1235
+ }
1236
+
1237
+ /**
1238
+ * Checks if `value` is a valid array-like index.
1239
+ *
1240
+ * @private
1241
+ * @param {*} value The value to check.
1242
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
1243
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
1244
+ */
1245
+ function isIndex(value, length) {
1246
+ length = length == null ? MAX_SAFE_INTEGER : length;
1247
+ return !!length &&
1248
+ (typeof value == 'number' || reIsUint.test(value)) &&
1249
+ (value > -1 && value % 1 == 0 && value < length);
1250
+ }
1251
+
1252
+ /**
1253
+ * Checks if `value` is suitable for use as unique object key.
1254
+ *
1255
+ * @private
1256
+ * @param {*} value The value to check.
1257
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
1258
+ */
1259
+ function isKeyable(value) {
1260
+ var type = typeof value;
1261
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
1262
+ ? (value !== '__proto__')
1263
+ : (value === null);
1264
+ }
1265
+
1266
+ /**
1267
+ * Checks if `func` has its source masked.
1268
+ *
1269
+ * @private
1270
+ * @param {Function} func The function to check.
1271
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
1272
+ */
1273
+ function isMasked(func) {
1274
+ return !!maskSrcKey && (maskSrcKey in func);
1275
+ }
1276
+
1277
+ /**
1278
+ * Checks if `value` is likely a prototype object.
1279
+ *
1280
+ * @private
1281
+ * @param {*} value The value to check.
1282
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
1283
+ */
1284
+ function isPrototype(value) {
1285
+ var Ctor = value && value.constructor,
1286
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
1287
+
1288
+ return value === proto;
1289
+ }
1290
+
1291
+ /**
1292
+ * Converts `func` to its source code.
1293
+ *
1294
+ * @private
1295
+ * @param {Function} func The function to process.
1296
+ * @returns {string} Returns the source code.
1297
+ */
1298
+ function toSource(func) {
1299
+ if (func != null) {
1300
+ try {
1301
+ return funcToString.call(func);
1302
+ } catch (e) {}
1303
+ try {
1304
+ return (func + '');
1305
+ } catch (e) {}
1306
+ }
1307
+ return '';
1308
+ }
1309
+
1310
+ /**
1311
+ * Performs a
1312
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
1313
+ * comparison between two values to determine if they are equivalent.
1314
+ *
1315
+ * @static
1316
+ * @memberOf _
1317
+ * @since 4.0.0
1318
+ * @category Lang
1319
+ * @param {*} value The value to compare.
1320
+ * @param {*} other The other value to compare.
1321
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
1322
+ * @example
1323
+ *
1324
+ * var object = { 'a': 1 };
1325
+ * var other = { 'a': 1 };
1326
+ *
1327
+ * _.eq(object, object);
1328
+ * // => true
1329
+ *
1330
+ * _.eq(object, other);
1331
+ * // => false
1332
+ *
1333
+ * _.eq('a', 'a');
1334
+ * // => true
1335
+ *
1336
+ * _.eq('a', Object('a'));
1337
+ * // => false
1338
+ *
1339
+ * _.eq(NaN, NaN);
1340
+ * // => true
1341
+ */
1342
+ function eq(value, other) {
1343
+ return value === other || (value !== value && other !== other);
1344
+ }
1345
+
1346
+ /**
1347
+ * Checks if `value` is likely an `arguments` object.
1348
+ *
1349
+ * @static
1350
+ * @memberOf _
1351
+ * @since 0.1.0
1352
+ * @category Lang
1353
+ * @param {*} value The value to check.
1354
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
1355
+ * else `false`.
1356
+ * @example
1357
+ *
1358
+ * _.isArguments(function() { return arguments; }());
1359
+ * // => true
1360
+ *
1361
+ * _.isArguments([1, 2, 3]);
1362
+ * // => false
1363
+ */
1364
+ function isArguments(value) {
1365
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
1366
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
1367
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
1368
+ }
1369
+
1370
+ /**
1371
+ * Checks if `value` is classified as an `Array` object.
1372
+ *
1373
+ * @static
1374
+ * @memberOf _
1375
+ * @since 0.1.0
1376
+ * @category Lang
1377
+ * @param {*} value The value to check.
1378
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
1379
+ * @example
1380
+ *
1381
+ * _.isArray([1, 2, 3]);
1382
+ * // => true
1383
+ *
1384
+ * _.isArray(document.body.children);
1385
+ * // => false
1386
+ *
1387
+ * _.isArray('abc');
1388
+ * // => false
1389
+ *
1390
+ * _.isArray(_.noop);
1391
+ * // => false
1392
+ */
1393
+ var isArray = Array.isArray;
1394
+
1395
+ /**
1396
+ * Checks if `value` is array-like. A value is considered array-like if it's
1397
+ * not a function and has a `value.length` that's an integer greater than or
1398
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
1399
+ *
1400
+ * @static
1401
+ * @memberOf _
1402
+ * @since 4.0.0
1403
+ * @category Lang
1404
+ * @param {*} value The value to check.
1405
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
1406
+ * @example
1407
+ *
1408
+ * _.isArrayLike([1, 2, 3]);
1409
+ * // => true
1410
+ *
1411
+ * _.isArrayLike(document.body.children);
1412
+ * // => true
1413
+ *
1414
+ * _.isArrayLike('abc');
1415
+ * // => true
1416
+ *
1417
+ * _.isArrayLike(_.noop);
1418
+ * // => false
1419
+ */
1420
+ function isArrayLike(value) {
1421
+ return value != null && isLength(value.length) && !isFunction(value);
1422
+ }
1423
+
1424
+ /**
1425
+ * This method is like `_.isArrayLike` except that it also checks if `value`
1426
+ * is an object.
1427
+ *
1428
+ * @static
1429
+ * @memberOf _
1430
+ * @since 4.0.0
1431
+ * @category Lang
1432
+ * @param {*} value The value to check.
1433
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
1434
+ * else `false`.
1435
+ * @example
1436
+ *
1437
+ * _.isArrayLikeObject([1, 2, 3]);
1438
+ * // => true
1439
+ *
1440
+ * _.isArrayLikeObject(document.body.children);
1441
+ * // => true
1442
+ *
1443
+ * _.isArrayLikeObject('abc');
1444
+ * // => false
1445
+ *
1446
+ * _.isArrayLikeObject(_.noop);
1447
+ * // => false
1448
+ */
1449
+ function isArrayLikeObject(value) {
1450
+ return isObjectLike(value) && isArrayLike(value);
1451
+ }
1452
+
1453
+ /**
1454
+ * Performs a deep comparison between two values to determine if they are
1455
+ * equivalent.
1456
+ *
1457
+ * **Note:** This method supports comparing arrays, array buffers, booleans,
1458
+ * date objects, error objects, maps, numbers, `Object` objects, regexes,
1459
+ * sets, strings, symbols, and typed arrays. `Object` objects are compared
1460
+ * by their own, not inherited, enumerable properties. Functions and DOM
1461
+ * nodes are **not** supported.
1462
+ *
1463
+ * @static
1464
+ * @memberOf _
1465
+ * @since 0.1.0
1466
+ * @category Lang
1467
+ * @param {*} value The value to compare.
1468
+ * @param {*} other The other value to compare.
1469
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
1470
+ * @example
1471
+ *
1472
+ * var object = { 'a': 1 };
1473
+ * var other = { 'a': 1 };
1474
+ *
1475
+ * _.isEqual(object, other);
1476
+ * // => true
1477
+ *
1478
+ * object === other;
1479
+ * // => false
1480
+ */
1481
+ function isEqual(value, other) {
1482
+ return baseIsEqual(value, other);
1483
+ }
1484
+
1485
+ /**
1486
+ * Checks if `value` is classified as a `Function` object.
1487
+ *
1488
+ * @static
1489
+ * @memberOf _
1490
+ * @since 0.1.0
1491
+ * @category Lang
1492
+ * @param {*} value The value to check.
1493
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
1494
+ * @example
1495
+ *
1496
+ * _.isFunction(_);
1497
+ * // => true
1498
+ *
1499
+ * _.isFunction(/abc/);
1500
+ * // => false
1501
+ */
1502
+ function isFunction(value) {
1503
+ // The use of `Object#toString` avoids issues with the `typeof` operator
1504
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
1505
+ var tag = isObject(value) ? objectToString.call(value) : '';
1506
+ return tag == funcTag || tag == genTag;
1507
+ }
1508
+
1509
+ /**
1510
+ * Checks if `value` is a valid array-like length.
1511
+ *
1512
+ * **Note:** This method is loosely based on
1513
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
1514
+ *
1515
+ * @static
1516
+ * @memberOf _
1517
+ * @since 4.0.0
1518
+ * @category Lang
1519
+ * @param {*} value The value to check.
1520
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
1521
+ * @example
1522
+ *
1523
+ * _.isLength(3);
1524
+ * // => true
1525
+ *
1526
+ * _.isLength(Number.MIN_VALUE);
1527
+ * // => false
1528
+ *
1529
+ * _.isLength(Infinity);
1530
+ * // => false
1531
+ *
1532
+ * _.isLength('3');
1533
+ * // => false
1534
+ */
1535
+ function isLength(value) {
1536
+ return typeof value == 'number' &&
1537
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
1538
+ }
1539
+
1540
+ /**
1541
+ * Checks if `value` is the
1542
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
1543
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
1544
+ *
1545
+ * @static
1546
+ * @memberOf _
1547
+ * @since 0.1.0
1548
+ * @category Lang
1549
+ * @param {*} value The value to check.
1550
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
1551
+ * @example
1552
+ *
1553
+ * _.isObject({});
1554
+ * // => true
1555
+ *
1556
+ * _.isObject([1, 2, 3]);
1557
+ * // => true
1558
+ *
1559
+ * _.isObject(_.noop);
1560
+ * // => true
1561
+ *
1562
+ * _.isObject(null);
1563
+ * // => false
1564
+ */
1565
+ function isObject(value) {
1566
+ var type = typeof value;
1567
+ return !!value && (type == 'object' || type == 'function');
1568
+ }
1569
+
1570
+ /**
1571
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
1572
+ * and has a `typeof` result of "object".
1573
+ *
1574
+ * @static
1575
+ * @memberOf _
1576
+ * @since 4.0.0
1577
+ * @category Lang
1578
+ * @param {*} value The value to check.
1579
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
1580
+ * @example
1581
+ *
1582
+ * _.isObjectLike({});
1583
+ * // => true
1584
+ *
1585
+ * _.isObjectLike([1, 2, 3]);
1586
+ * // => true
1587
+ *
1588
+ * _.isObjectLike(_.noop);
1589
+ * // => false
1590
+ *
1591
+ * _.isObjectLike(null);
1592
+ * // => false
1593
+ */
1594
+ function isObjectLike(value) {
1595
+ return !!value && typeof value == 'object';
1596
+ }
1597
+
1598
+ /**
1599
+ * Checks if `value` is classified as a typed array.
1600
+ *
1601
+ * @static
1602
+ * @memberOf _
1603
+ * @since 3.0.0
1604
+ * @category Lang
1605
+ * @param {*} value The value to check.
1606
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
1607
+ * @example
1608
+ *
1609
+ * _.isTypedArray(new Uint8Array);
1610
+ * // => true
1611
+ *
1612
+ * _.isTypedArray([]);
1613
+ * // => false
1614
+ */
1615
+ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
1616
+
1617
+ /**
1618
+ * Creates an array of the own enumerable property names of `object`.
1619
+ *
1620
+ * **Note:** Non-object values are coerced to objects. See the
1621
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
1622
+ * for more details.
1623
+ *
1624
+ * @static
1625
+ * @since 0.1.0
1626
+ * @memberOf _
1627
+ * @category Object
1628
+ * @param {Object} object The object to query.
1629
+ * @returns {Array} Returns the array of property names.
1630
+ * @example
1631
+ *
1632
+ * function Foo() {
1633
+ * this.a = 1;
1634
+ * this.b = 2;
1635
+ * }
1636
+ *
1637
+ * Foo.prototype.c = 3;
1638
+ *
1639
+ * _.keys(new Foo);
1640
+ * // => ['a', 'b'] (iteration order is not guaranteed)
1641
+ *
1642
+ * _.keys('hi');
1643
+ * // => ['0', '1']
1644
+ */
1645
+ function keys(object) {
1646
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
1647
+ }