Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [New Thread 0x7fffef7fe700 (LWP 28160)]
- INFO - Linking "/mnt/md0/bhlinks/Movies/11.11.11.2011.DVDRip.XviD-LYCAN/lycan-111111.avi"
- INFO - bhupload:1 new state SUCCESS
- Program received signal SIGSEGV, Segmentation fault.
- 0x00007ffff6d13b53 in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
- (gdb) thread apply all bt
- Thread 5 (Thread 0x7fffef7fe700 (LWP 28160)):
- #0 0x00007ffff64a2897 in munmap () from /lib/x86_64-linux-gnu/libc.so.6
- #1 0x00000000006a0ae6 in boost::iostreams::mapped_file_source::close() ()
- #2 0x0000000000695d7a in boost::iostreams::mapped_file::close() ()
- #3 0x0000000000695b44 in bithorded::AssetMeta::repage(unsigned long) ()
- #4 0x0000000000695a87 in bithorded::AssetMeta::operator[](unsigned long) ()
- #5 0x000000000068eeaf in TreeStore<HashNode<CryptoPP::Tiger>, bithorded::AssetMeta>::operator[](NodeIdx const&) ()
- #6 0x000000000068e9d0 in HashTree<HashNode<CryptoPP::Tiger>, bithorded::AssetMeta>::setData(unsigned int, unsigned char const*, unsigned long) ()
- #7 0x000000000068d6ed in bithorded::source::SourceAsset::updateHash(unsigned long, unsigned long) ()
- #8 0x000000000068d368 in bithorded::source::SourceAsset::notifyValidRange(unsigned long, unsigned long) ()
- #9 0x00000000006915d5 in HashTask::operator()() ()
- #10 0x000000000062005d in ThreadPool::thread_main() ()
- #11 0x0000000000629f84 in boost::_mfi::mf0<void, ThreadPool>::operator()(ThreadPool*) const ()
- #12 0x0000000000629ef4 in void boost::_bi::list1<boost::_bi::value<ThreadPool*> >::operator()<boost::_mfi::mf0<void, ThreadPool>, boost::_bi::list0>(boost::_bi::type<void>, boost::_mfi::mf0<void, ThreadPool>&, boost::_bi::list0&, int) ()
- #13 0x0000000000629ea3 in boost::_bi::bind_t<void, boost::_mfi::mf0<void, ThreadPool>, boost::_bi::list1<boost::_bi::value<ThreadPool*> > >::operator()() ()
- #14 0x0000000000629a76 in boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ThreadPool>, boost::_bi::list1<boost::_bi::value<ThreadPool*> > > >::run() ()
- #15 0x00000000006d2784 in thread_proxy ()
- #16 0x00007ffff6f88e9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
- #17 0x00007ffff64a64bd in clone () from /lib/x86_64-linux-gnu/libc.so.6
- #18 0x0000000000000000 in ?? ()
- Thread 4 (Thread 0x7fffeffff700 (LWP 28154)):
- #0 0x00007ffff6f90653 in pread64 () from /lib/x86_64-linux-gnu/libpthread.so.0
- #1 0x000000000062a5ee in RandomAccessFile::read(unsigned long, unsigned long&, unsigned char*) ()
- #2 0x000000000068d62c in bithorded::source::SourceAsset::updateHash(unsigned long, unsigned long) ()
- #3 0x000000000068d368 in bithorded::source::SourceAsset::notifyValidRange(unsigned long, unsigned long) ()
- #4 0x00000000006915d5 in HashTask::operator()() ()
- #5 0x000000000062005d in ThreadPool::thread_main() ()
- #6 0x0000000000629f84 in boost::_mfi::mf0<void, ThreadPool>::operator()(ThreadPool*) const ()
- #7 0x0000000000629ef4 in void boost::_bi::list1<boost::_bi::value<ThreadPool*> >::operator()<boost::_mfi::mf0<void, ThreadPool>, boost::_bi::list0>(boost::_bi::type<void>, boost::_mfi::mf0<void, ThreadPool>&, boost::_bi::list0&, int) ()
- #8 0x0000000000629ea3 in boost::_bi::bind_t<void, boost::_mfi::mf0<void, ThreadPool>, boost::_bi::list1<boost::_bi::value<ThreadPool*> > >::operator()() ()
- #9 0x0000000000629a76 in boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ThreadPool>, boost::_bi::list1<boost::_bi::value<ThreadPool*> > > >::run() ()
- #10 0x00000000006d2784 in thread_proxy ()
- #11 0x00007ffff6f88e9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
- #12 0x00007ffff64a64bd in clone () from /lib/x86_64-linux-gnu/libc.so.6
- #13 0x0000000000000000 in ?? ()
- Thread 2 (Thread 0x7ffff5c72700 (LWP 28036)):
- #0 0x00007ffff6f8cd84 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0
- #1 0x0000000000646d2d in void boost::asio::detail::posix_event::wait<boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex> >(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&) ()
- #2 0x000000000064371f in boost::asio::detail::task_io_service::do_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service::idle_thread_info*) ()
- #3 0x0000000000643294 in boost::asio::detail::task_io_service::run(boost::system::error_code&) ()
- #4 0x0000000000643aa7 in boost::asio::io_service::run() ()
- #5 0x0000000000645343 in boost::asio::detail::resolver_service_base::work_io_service_runner::operator()() ()
- #6 0x000000000065bbbc in boost::asio::detail::posix_thread::func<boost::asio::detail::resolver_service_base::work_io_service_runner>::run() ()
- #7 0x00000000006452d8 in boost_asio_detail_posix_thread_function ()
- #8 0x00007ffff6f88e9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
- #9 0x00007ffff64a64bd in clone () from /lib/x86_64-linux-gnu/libc.so.6
- #10 0x0000000000000000 in ?? ()
- Thread 1 (Thread 0x7ffff7fea740 (LWP 28033)):
- #0 0x00007ffff6d13b53 in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
- #1 0x00000000006627aa in bithorded::Client::informAssetStatusUpdate(int, boost::weak_ptr<bithorded::IAsset> const&) ()
- ---Type <return> to continue, or q <return> to quit---
- #2 0x0000000000669a5b in boost::_mfi::mf2<void, bithorded::Client, int, boost::weak_ptr<bithorded::IAsset> const&>::operator()(bithorded::Client*, int, boost::weak_ptr<bithorded::IAsset> const&) const
- ()
- #3 0x0000000000669766 in void boost::_bi::list3<boost::_bi::value<bithorded::Client*>, boost::_bi::value<int>, boost::_bi::value<boost::weak_ptr<bithorded::IAsset> > >::operator()<boost::_mfi::mf2<void, bithorded::Client, int, boost::weak_ptr<bithorded::IAsset> const&>, boost::_bi::list1<bithorde::Status const&> >(boost::_bi::type<void>, boost::_mfi::mf2<void, bithorded::Client, int, boost::weak_ptr<bithorded::IAsset> const&>&, boost::_bi::list1<bithorde::Status const&>&, int) ()
- #4 0x0000000000669150 in void boost::_bi::bind_t<void, boost::_mfi::mf2<void, bithorded::Client, int, boost::weak_ptr<bithorded::IAsset> const&>, boost::_bi::list3<boost::_bi::value<bithorded::Client*>, boost::_bi::value<int>, boost::_bi::value<boost::weak_ptr<bithorded::IAsset> > > >::operator()<bithorde::Status>(bithorde::Status const&) ()
- #5 0x0000000000668dd4 in boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<void, boost::_mfi::mf2<void, bithorded::Client, int, boost::weak_ptr<bithorded::IAsset> const&>, boost::_bi::list3<boost::_bi::value<bithorded::Client*>, boost::_bi::value<int>, boost::_bi::value<boost::weak_ptr<bithorded::IAsset> > > >, void, bithorde::Status const&>::invoke(boost::detail::function::function_buffer&, bithorde::Status const&) ()
- #6 0x0000000000660aeb in boost::function1<void, bithorde::Status const&>::operator()(bithorde::Status const&) const ()
- #7 0x00000000006608a5 in boost::signals2::detail::void_type boost::signals2::detail::call_with_tuple_args<boost::signals2::detail::void_type>::m_invoke<boost::function<void (bithorde::Status const&)>, 0u, bithorde::Status const&>(void*, boost::function<void (bithorde::Status const&)>&, boost::signals2::detail::unsigned_meta_array<0u>, std::tuple<bithorde::Status const&>) const ()
- #8 0x0000000000660576 in boost::signals2::detail::void_type boost::signals2::detail::call_with_tuple_args<boost::signals2::detail::void_type>::operator()<boost::function<void (bithorde::Status const&)>, bithorde::Status const&>(boost::function<void (bithorde::Status const&)>&, std::tuple<bithorde::Status const&>) const ()
- #9 0x00000000006601c8 in boost::signals2::detail::void_type boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>::m_invoke<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >(boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > const&, boost::signals2::detail::void_type const*) const ()
- #10 0x000000000065fa76 in boost::signals2::detail::void_type boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>::operator()<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >(boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > const&) const ()
- #11 0x000000000065efd1 in boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> >::dereference() const ()
- #12 0x000000000065eade in boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> >::reference boost::iterator_core_access::dereference<boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >(boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > const&) ()
- #13 0x000000000065e524 in boost::iterator_facade<boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> >, boost::signals2::detail::void_type, boost::single_pass_traversal_tag, boost::signals2::detail::void_type const&, long>::operator*() const ()
- #14 0x000000000065d947 in void boost::signals2::optional_last_value<void>::operator()<boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >(boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> >, boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> >) const ()
- #15 0x000000000065d0eb in void boost::signals2::detail::combiner_invoker<void>::operator()<boost::signals2::optional_last_value<void>, boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::sign---Type <return> to continue, or q <return> to quit---
- als2::mutex> > >(boost::signals2::optional_last_value<void>&, boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> >, boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type, bithorde::Status const&>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (bithorde::Status const&), boost::function<void (bithorde::Status const&)> >, boost::signals2::mutex> >) const ()
- #16 0x000000000065cad8 in boost::signals2::detail::signal_impl<void (bithorde::Status const&), boost::signals2::optional_last_value<void>, int, std::less<int>, boost::function<void (bithorde::Status const&)>, boost::function<void (boost::signals2::connection const&, bithorde::Status const&)>, boost::signals2::mutex>::operator()(bithorde::Status const&) ()
- #17 0x000000000065c76b in boost::signals2::signal<void (bithorde::Status const&), boost::signals2::optional_last_value<void>, int, std::less<int>, boost::function<void (bithorde::Status const&)>, boost::function<void (boost::signals2::connection const&, bithorde::Status const&)>, boost::signals2::mutex>::operator()(bithorde::Status const&) ()
- #18 0x000000000065c5d4 in bithorded::IAsset::setStatus(bithorde::Status) ()
- #19 0x000000000068d579 in bithorded::source::SourceAsset::updateStatus() ()
- #20 0x0000000000694f69 in void boost::_mfi::mf0<void, bithorded::source::SourceAsset>::call<boost::shared_ptr<bithorded::source::SourceAsset> >(boost::shared_ptr<bithorded::source::SourceAsset>&, void const*) const ()
- #21 0x0000000000694c23 in void boost::_mfi::mf0<void, bithorded::source::SourceAsset>::operator()<boost::shared_ptr<bithorded::source::SourceAsset> >(boost::shared_ptr<bithorded::source::SourceAsset>&) const ()
- #22 0x00000000006949ce in void boost::_bi::list1<boost::_bi::value<boost::shared_ptr<bithorded::source::SourceAsset> > >::operator()<boost::_mfi::mf0<void, bithorded::source::SourceAsset>, boost::_bi::list0>(boost::_bi::type<void>, boost::_mfi::mf0<void, bithorded::source::SourceAsset>&, boost::_bi::list0&, int) ()
- #23 0x000000000069478b in boost::_bi::bind_t<void, boost::_mfi::mf0<void, bithorded::source::SourceAsset>, boost::_bi::list1<boost::_bi::value<boost::shared_ptr<bithorded::source::SourceAsset> > > >::operator()() ()
- #24 0x00000000006945e4 in void boost::asio::asio_handler_invoke<boost::_bi::bind_t<void, boost::_mfi::mf0<void, bithorded::source::SourceAsset>, boost::_bi::list1<boost::_bi::value<boost::shared_ptr<bithorded::source::SourceAsset> > > > >(boost::_bi::bind_t<void, boost::_mfi::mf0<void, bithorded::source::SourceAsset>, boost::_bi::list1<boost::_bi::value<boost::shared_ptr<bithorded::source::SourceAsset> > > >, ...) ()
- #25 0x00000000006942fe in void boost_asio_handler_invoke_helpers::invoke<boost::_bi::bind_t<void, boost::_mfi::mf0<void, bithorded::source::SourceAsset>, boost::_bi::list1<boost::_bi::value<boost::shared_ptr<bithorded::source::SourceAsset> > > >, boost::_bi::bind_t<void, boost::_mfi::mf0<void, bithorded::source::SourceAsset>, boost::_bi::list1<boost::_bi::value<boost::shared_ptr<bithorded::source::SourceAsset> > > > >(boost::_bi::bind_t<void, boost::_mfi::mf0<void, bithorded::source::SourceAsset>, boost::_bi::list1<boost::_bi::value<boost::shared_ptr<bithorded::source::SourceAsset> > > > const&, boost::_bi::bind_t<void, boost::_mfi::mf0<void, bithorded::source::SourceAsset>, boost::_bi::list1<boost::_bi::value<boost::shared_ptr<bithorded::source::SourceAsset> > > >&) ()
- #26 0x0000000000693b82 in boost::asio::detail::completion_handler<boost::_bi::bind_t<void, boost::_mfi::mf0<void, bithorded::source::SourceAsset>, boost::_bi::list1<boost::_bi::value<boost::shared_ptr<bithorded::source::SourceAsset> > > > >::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code, unsigned long) ()
- #27 0x0000000000641745 in boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&) ()
- #28 0x00000000006436bd in boost::asio::detail::task_io_service::do_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service::idle_thread_info*) ()
- #29 0x0000000000643294 in boost::asio::detail::task_io_service::run(boost::system::error_code&) ()
- #30 0x0000000000643aa7 in boost::asio::io_service::run() ()
- #31 0x0000000000696218 in main ()
- (gdb)
Add Comment
Please, Sign In to add comment