Saving files before refreshing line endings
@ -1,27 +1,27 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef EASY_PROFILER__EVENT_TRACE_STATUS__H_
|
#ifndef EASY_PROFILER__EVENT_TRACE_STATUS__H_
|
||||||
#define EASY_PROFILER__EVENT_TRACE_STATUS__H_
|
#define EASY_PROFILER__EVENT_TRACE_STATUS__H_
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
namespace profiler {
|
namespace profiler {
|
||||||
|
|
||||||
enum EventTracingEnableStatus : unsigned char
|
enum EventTracingEnableStatus : unsigned char
|
||||||
{
|
{
|
||||||
EVENT_TRACING_LAUNCHED_SUCCESSFULLY = 0,
|
EVENT_TRACING_LAUNCHED_SUCCESSFULLY = 0,
|
||||||
EVENT_TRACING_NOT_ENOUGH_ACCESS_RIGHTS,
|
EVENT_TRACING_NOT_ENOUGH_ACCESS_RIGHTS,
|
||||||
EVENT_TRACING_WAS_LAUNCHED_BY_SOMEBODY_ELSE,
|
EVENT_TRACING_WAS_LAUNCHED_BY_SOMEBODY_ELSE,
|
||||||
EVENT_TRACING_BAD_PROPERTIES_SIZE,
|
EVENT_TRACING_BAD_PROPERTIES_SIZE,
|
||||||
EVENT_TRACING_OPEN_TRACE_ERROR,
|
EVENT_TRACING_OPEN_TRACE_ERROR,
|
||||||
EVENT_TRACING_MISTERIOUS_ERROR,
|
EVENT_TRACING_MISTERIOUS_ERROR,
|
||||||
};
|
};
|
||||||
|
|
||||||
} // END of namespace profiler.
|
} // END of namespace profiler.
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#endif // EASY_PROFILER__EVENT_TRACE_STATUS__H_
|
#endif // EASY_PROFILER__EVENT_TRACE_STATUS__H_
|
||||||
|
@ -1,483 +1,483 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
* file name : event_trace_win.cpp
|
* file name : event_trace_win.cpp
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* creation time : 2016/09/04
|
* creation time : 2016/09/04
|
||||||
* author : Victor Zarubkin
|
* author : Victor Zarubkin
|
||||||
* email : v.s.zarubkin@gmail.com
|
* email : v.s.zarubkin@gmail.com
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* description : The file contains implementation of EasyEventTracer class used for tracing
|
* description : The file contains implementation of EasyEventTracer class used for tracing
|
||||||
* : Windows system events to get context switches.
|
* : Windows system events to get context switches.
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* change log : * 2016/09/04 Victor Zarubkin: initial commit.
|
* change log : * 2016/09/04 Victor Zarubkin: initial commit.
|
||||||
* :
|
* :
|
||||||
* : * 2016/09/13 Victor Zarubkin: get process id and process name
|
* : * 2016/09/13 Victor Zarubkin: get process id and process name
|
||||||
* : of the owner of thread with id == CSwitch::NewThreadId.
|
* : of the owner of thread with id == CSwitch::NewThreadId.
|
||||||
* :
|
* :
|
||||||
* : * 2016/09/17 Victor Zarubkin: added log messages printing.
|
* : * 2016/09/17 Victor Zarubkin: added log messages printing.
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* license : Lightweight profiler library for c++
|
* license : Lightweight profiler library for c++
|
||||||
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
||||||
* :
|
* :
|
||||||
* :
|
* :
|
||||||
* : Licensed under the Apache License, Version 2.0 (the "License");
|
* : Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* : you may not use this file except in compliance with the License.
|
* : you may not use this file except in compliance with the License.
|
||||||
* : You may obtain a copy of the License at
|
* : You may obtain a copy of the License at
|
||||||
* :
|
* :
|
||||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* :
|
* :
|
||||||
* : Unless required by applicable law or agreed to in writing, software
|
* : Unless required by applicable law or agreed to in writing, software
|
||||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* : See the License for the specific language governing permissions and
|
* : See the License for the specific language governing permissions and
|
||||||
* : limitations under the License.
|
* : limitations under the License.
|
||||||
* :
|
* :
|
||||||
* :
|
* :
|
||||||
* : GNU General Public License Usage
|
* : GNU General Public License Usage
|
||||||
* : Alternatively, this file may be used under the terms of the GNU
|
* : Alternatively, this file may be used under the terms of the GNU
|
||||||
* : General Public License as published by the Free Software Foundation,
|
* : General Public License as published by the Free Software Foundation,
|
||||||
* : either version 3 of the License, or (at your option) any later version.
|
* : either version 3 of the License, or (at your option) any later version.
|
||||||
* :
|
* :
|
||||||
* : This program is distributed in the hope that it will be useful,
|
* : This program is distributed in the hope that it will be useful,
|
||||||
* : but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* : but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
* : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
||||||
* : GNU General Public License for more details.
|
* : GNU General Public License for more details.
|
||||||
* :
|
* :
|
||||||
* : You should have received a copy of the GNU General Public License
|
* : You should have received a copy of the GNU General Public License
|
||||||
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include "easy/profiler.h"
|
#include "easy/profiler.h"
|
||||||
#include "profile_manager.h"
|
#include "profile_manager.h"
|
||||||
#include "current_time.h"
|
#include "current_time.h"
|
||||||
|
|
||||||
#include "event_trace_win.h"
|
#include "event_trace_win.h"
|
||||||
#include <Psapi.h>
|
#include <Psapi.h>
|
||||||
|
|
||||||
#if EASY_OPTION_LOG_ENABLED != 0
|
#if EASY_OPTION_LOG_ENABLED != 0
|
||||||
# include <iostream>
|
# include <iostream>
|
||||||
# ifndef EASY_ETW_LOG
|
# ifndef EASY_ETW_LOG
|
||||||
# define EASY_ETW_LOG ::std::cerr
|
# define EASY_ETW_LOG ::std::cerr
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
//extern ProfileManager& MANAGER;
|
//extern ProfileManager& MANAGER;
|
||||||
#define MANAGER ProfileManager::instance()
|
#define MANAGER ProfileManager::instance()
|
||||||
|
|
||||||
::std::atomic_uint64_t TRACING_END_TIME = ATOMIC_VAR_INIT(~0ULL);
|
::std::atomic_uint64_t TRACING_END_TIME = ATOMIC_VAR_INIT(~0ULL);
|
||||||
|
|
||||||
namespace profiler {
|
namespace profiler {
|
||||||
|
|
||||||
const decltype(EVENT_DESCRIPTOR::Opcode) SWITCH_CONTEXT_OPCODE = 36;
|
const decltype(EVENT_DESCRIPTOR::Opcode) SWITCH_CONTEXT_OPCODE = 36;
|
||||||
const int RAW_TIMESTAMP_TIME_TYPE = 1;
|
const int RAW_TIMESTAMP_TIME_TYPE = 1;
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
struct ProcessInfo {
|
struct ProcessInfo {
|
||||||
std::string name;
|
std::string name;
|
||||||
processid_t id = 0;
|
processid_t id = 0;
|
||||||
int8_t valid = 0;
|
int8_t valid = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// CSwitch class
|
// CSwitch class
|
||||||
// See https://msdn.microsoft.com/en-us/library/windows/desktop/aa964744(v=vs.85).aspx
|
// See https://msdn.microsoft.com/en-us/library/windows/desktop/aa964744(v=vs.85).aspx
|
||||||
// EventType = 36
|
// EventType = 36
|
||||||
struct CSwitch
|
struct CSwitch
|
||||||
{
|
{
|
||||||
uint32_t NewThreadId;
|
uint32_t NewThreadId;
|
||||||
uint32_t OldThreadId;
|
uint32_t OldThreadId;
|
||||||
int8_t NewThreadPriority;
|
int8_t NewThreadPriority;
|
||||||
int8_t OldThreadPriority;
|
int8_t OldThreadPriority;
|
||||||
uint8_t PreviousCState;
|
uint8_t PreviousCState;
|
||||||
int8_t SpareByte;
|
int8_t SpareByte;
|
||||||
int8_t OldThreadWaitReason;
|
int8_t OldThreadWaitReason;
|
||||||
int8_t OldThreadWaitMode;
|
int8_t OldThreadWaitMode;
|
||||||
int8_t OldThreadState;
|
int8_t OldThreadState;
|
||||||
int8_t OldThreadWaitIdealProcessor;
|
int8_t OldThreadWaitIdealProcessor;
|
||||||
uint32_t NewThreadWaitTime;
|
uint32_t NewThreadWaitTime;
|
||||||
uint32_t Reserved;
|
uint32_t Reserved;
|
||||||
};
|
};
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
typedef ::std::unordered_map<decltype(CSwitch::NewThreadId), ProcessInfo*, ::profiler::do_not_calc_hash> thread_process_info_map;
|
typedef ::std::unordered_map<decltype(CSwitch::NewThreadId), ProcessInfo*, ::profiler::do_not_calc_hash> thread_process_info_map;
|
||||||
typedef ::std::unordered_map<processid_t, ProcessInfo, ::profiler::do_not_calc_hash> process_info_map;
|
typedef ::std::unordered_map<processid_t, ProcessInfo, ::profiler::do_not_calc_hash> process_info_map;
|
||||||
|
|
||||||
// Using static is safe because processTraceEvent() is called from one thread
|
// Using static is safe because processTraceEvent() is called from one thread
|
||||||
process_info_map PROCESS_INFO_TABLE;
|
process_info_map PROCESS_INFO_TABLE;
|
||||||
thread_process_info_map THREAD_PROCESS_INFO_TABLE = ([](){ thread_process_info_map initial; initial[0U] = nullptr; return ::std::move(initial); })();
|
thread_process_info_map THREAD_PROCESS_INFO_TABLE = ([](){ thread_process_info_map initial; initial[0U] = nullptr; return ::std::move(initial); })();
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void WINAPI processTraceEvent(PEVENT_RECORD _traceEvent)
|
void WINAPI processTraceEvent(PEVENT_RECORD _traceEvent)
|
||||||
{
|
{
|
||||||
if (_traceEvent->EventHeader.EventDescriptor.Opcode != SWITCH_CONTEXT_OPCODE)
|
if (_traceEvent->EventHeader.EventDescriptor.Opcode != SWITCH_CONTEXT_OPCODE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (sizeof(CSwitch) != _traceEvent->UserDataLength)
|
if (sizeof(CSwitch) != _traceEvent->UserDataLength)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
EASY_FUNCTION(::profiler::colors::White, ::profiler::OFF);
|
EASY_FUNCTION(::profiler::colors::White, ::profiler::OFF);
|
||||||
|
|
||||||
auto _contextSwitchEvent = reinterpret_cast<CSwitch*>(_traceEvent->UserData);
|
auto _contextSwitchEvent = reinterpret_cast<CSwitch*>(_traceEvent->UserData);
|
||||||
const auto time = static_cast<::profiler::timestamp_t>(_traceEvent->EventHeader.TimeStamp.QuadPart);
|
const auto time = static_cast<::profiler::timestamp_t>(_traceEvent->EventHeader.TimeStamp.QuadPart);
|
||||||
if (time > TRACING_END_TIME.load(::std::memory_order_acquire))
|
if (time > TRACING_END_TIME.load(::std::memory_order_acquire))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
processid_t pid = 0;
|
processid_t pid = 0;
|
||||||
const char* process_name = "";
|
const char* process_name = "";
|
||||||
|
|
||||||
// Trying to get target process name and id
|
// Trying to get target process name and id
|
||||||
auto it = THREAD_PROCESS_INFO_TABLE.find(_contextSwitchEvent->NewThreadId);
|
auto it = THREAD_PROCESS_INFO_TABLE.find(_contextSwitchEvent->NewThreadId);
|
||||||
if (it == THREAD_PROCESS_INFO_TABLE.end())
|
if (it == THREAD_PROCESS_INFO_TABLE.end())
|
||||||
{
|
{
|
||||||
auto hThread = OpenThread(THREAD_QUERY_LIMITED_INFORMATION, FALSE, _contextSwitchEvent->NewThreadId);
|
auto hThread = OpenThread(THREAD_QUERY_LIMITED_INFORMATION, FALSE, _contextSwitchEvent->NewThreadId);
|
||||||
if (hThread != nullptr)
|
if (hThread != nullptr)
|
||||||
{
|
{
|
||||||
pid = GetProcessIdOfThread(hThread);
|
pid = GetProcessIdOfThread(hThread);
|
||||||
auto pinfo = &PROCESS_INFO_TABLE[pid];
|
auto pinfo = &PROCESS_INFO_TABLE[pid];
|
||||||
|
|
||||||
if (pinfo->valid == 0)
|
if (pinfo->valid == 0)
|
||||||
{
|
{
|
||||||
if (pinfo->name.empty())
|
if (pinfo->name.empty())
|
||||||
{
|
{
|
||||||
static char numbuf[128] = {};
|
static char numbuf[128] = {};
|
||||||
sprintf(numbuf, "%u", pid);
|
sprintf(numbuf, "%u", pid);
|
||||||
pinfo->name = numbuf;
|
pinfo->name = numbuf;
|
||||||
pinfo->id = pid;
|
pinfo->id = pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
According to documentation, using GetModuleBaseName() requires
|
According to documentation, using GetModuleBaseName() requires
|
||||||
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ access rights.
|
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ access rights.
|
||||||
But it works fine with PROCESS_QUERY_LIMITED_INFORMATION instead of PROCESS_QUERY_INFORMATION.
|
But it works fine with PROCESS_QUERY_LIMITED_INFORMATION instead of PROCESS_QUERY_INFORMATION.
|
||||||
|
|
||||||
See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683196(v=vs.85).aspx
|
See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683196(v=vs.85).aspx
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//auto hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);
|
//auto hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);
|
||||||
//if (hProc == nullptr)
|
//if (hProc == nullptr)
|
||||||
auto hProc = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ, FALSE, pid);
|
auto hProc = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ, FALSE, pid);
|
||||||
if (hProc != nullptr)
|
if (hProc != nullptr)
|
||||||
{
|
{
|
||||||
static TCHAR buf[MAX_PATH] = {}; // Using static is safe because processTraceEvent() is called from one thread
|
static TCHAR buf[MAX_PATH] = {}; // Using static is safe because processTraceEvent() is called from one thread
|
||||||
auto len = GetModuleBaseName(hProc, 0, buf, MAX_PATH);
|
auto len = GetModuleBaseName(hProc, 0, buf, MAX_PATH);
|
||||||
|
|
||||||
if (len != 0)
|
if (len != 0)
|
||||||
{
|
{
|
||||||
pinfo->name.reserve(pinfo->name.size() + 2 + len);
|
pinfo->name.reserve(pinfo->name.size() + 2 + len);
|
||||||
pinfo->name.append(" ", 1);
|
pinfo->name.append(" ", 1);
|
||||||
pinfo->name.append(buf, len);
|
pinfo->name.append(buf, len);
|
||||||
pinfo->valid = 1;
|
pinfo->valid = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle(hProc);
|
CloseHandle(hProc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//auto err = GetLastError();
|
//auto err = GetLastError();
|
||||||
//printf("OpenProcess(%u) fail: GetLastError() == %u\n", pid, err);
|
//printf("OpenProcess(%u) fail: GetLastError() == %u\n", pid, err);
|
||||||
pinfo->valid = -1;
|
pinfo->valid = -1;
|
||||||
|
|
||||||
if (pid == 4) {
|
if (pid == 4) {
|
||||||
pinfo->name.reserve(pinfo->name.size() + 8);
|
pinfo->name.reserve(pinfo->name.size() + 8);
|
||||||
pinfo->name.append(" System", 7);
|
pinfo->name.append(" System", 7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
process_name = pinfo->name.c_str();
|
process_name = pinfo->name.c_str();
|
||||||
THREAD_PROCESS_INFO_TABLE[_contextSwitchEvent->NewThreadId] = pinfo;
|
THREAD_PROCESS_INFO_TABLE[_contextSwitchEvent->NewThreadId] = pinfo;
|
||||||
|
|
||||||
CloseHandle(hThread);
|
CloseHandle(hThread);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//printf("Can not OpenThread(%u);\n", _contextSwitchEvent->NewThreadId);
|
//printf("Can not OpenThread(%u);\n", _contextSwitchEvent->NewThreadId);
|
||||||
THREAD_PROCESS_INFO_TABLE[_contextSwitchEvent->NewThreadId] = nullptr;
|
THREAD_PROCESS_INFO_TABLE[_contextSwitchEvent->NewThreadId] = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto pinfo = it->second;
|
auto pinfo = it->second;
|
||||||
if (pinfo != nullptr)
|
if (pinfo != nullptr)
|
||||||
process_name = pinfo->name.c_str();
|
process_name = pinfo->name.c_str();
|
||||||
else if (it->first == 0)
|
else if (it->first == 0)
|
||||||
process_name = "System Idle";
|
process_name = "System Idle";
|
||||||
else if (it->first == 4)
|
else if (it->first == 4)
|
||||||
process_name = "System";
|
process_name = "System";
|
||||||
}
|
}
|
||||||
|
|
||||||
MANAGER.beginContextSwitch(_contextSwitchEvent->OldThreadId, time, _contextSwitchEvent->NewThreadId, process_name);
|
MANAGER.beginContextSwitch(_contextSwitchEvent->OldThreadId, time, _contextSwitchEvent->NewThreadId, process_name);
|
||||||
MANAGER.endContextSwitch(_contextSwitchEvent->NewThreadId, pid, time);
|
MANAGER.endContextSwitch(_contextSwitchEvent->NewThreadId, pid, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef EASY_MAGIC_STATIC_CPP11
|
#ifndef EASY_MAGIC_STATIC_CPP11
|
||||||
class EasyEventTracerInstance {
|
class EasyEventTracerInstance {
|
||||||
friend EasyEventTracer;
|
friend EasyEventTracer;
|
||||||
EasyEventTracer instance;
|
EasyEventTracer instance;
|
||||||
} EASY_EVENT_TRACER;
|
} EASY_EVENT_TRACER;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EasyEventTracer& EasyEventTracer::instance()
|
EasyEventTracer& EasyEventTracer::instance()
|
||||||
{
|
{
|
||||||
#ifndef EASY_MAGIC_STATIC_CPP11
|
#ifndef EASY_MAGIC_STATIC_CPP11
|
||||||
return EASY_EVENT_TRACER.instance;
|
return EASY_EVENT_TRACER.instance;
|
||||||
#else
|
#else
|
||||||
static EasyEventTracer tracer;
|
static EasyEventTracer tracer;
|
||||||
return tracer;
|
return tracer;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
EasyEventTracer::EasyEventTracer()
|
EasyEventTracer::EasyEventTracer()
|
||||||
{
|
{
|
||||||
m_lowPriority = ATOMIC_VAR_INIT(EASY_OPTION_LOW_PRIORITY_EVENT_TRACING);
|
m_lowPriority = ATOMIC_VAR_INIT(EASY_OPTION_LOW_PRIORITY_EVENT_TRACING);
|
||||||
}
|
}
|
||||||
|
|
||||||
EasyEventTracer::~EasyEventTracer()
|
EasyEventTracer::~EasyEventTracer()
|
||||||
{
|
{
|
||||||
disable();
|
disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EasyEventTracer::isLowPriority() const
|
bool EasyEventTracer::isLowPriority() const
|
||||||
{
|
{
|
||||||
return m_lowPriority.load(::std::memory_order_acquire);
|
return m_lowPriority.load(::std::memory_order_acquire);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EasyEventTracer::setLowPriority(bool _value)
|
void EasyEventTracer::setLowPriority(bool _value)
|
||||||
{
|
{
|
||||||
m_lowPriority.store(_value, ::std::memory_order_release);
|
m_lowPriority.store(_value, ::std::memory_order_release);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool setPrivilege(HANDLE hToken, LPCSTR _privelegeName)
|
bool setPrivilege(HANDLE hToken, LPCSTR _privelegeName)
|
||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
if (hToken)
|
if (hToken)
|
||||||
{
|
{
|
||||||
LUID privilegyId;
|
LUID privilegyId;
|
||||||
if (LookupPrivilegeValue(NULL, _privelegeName, &privilegyId))
|
if (LookupPrivilegeValue(NULL, _privelegeName, &privilegyId))
|
||||||
{
|
{
|
||||||
TOKEN_PRIVILEGES tokenPrivilege;
|
TOKEN_PRIVILEGES tokenPrivilege;
|
||||||
tokenPrivilege.PrivilegeCount = 1;
|
tokenPrivilege.PrivilegeCount = 1;
|
||||||
tokenPrivilege.Privileges[0].Luid = privilegyId;
|
tokenPrivilege.Privileges[0].Luid = privilegyId;
|
||||||
tokenPrivilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
tokenPrivilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||||
success = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivilege, sizeof(TOKEN_PRIVILEGES), NULL, NULL) != FALSE;
|
success = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivilege, sizeof(TOKEN_PRIVILEGES), NULL, NULL) != FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if EASY_OPTION_LOG_ENABLED != 0
|
#if EASY_OPTION_LOG_ENABLED != 0
|
||||||
if (!success)
|
if (!success)
|
||||||
EASY_ETW_LOG << "Warning: EasyProfiler failed to set " << _privelegeName << " privelege for the application.\n";
|
EASY_ETW_LOG << "Warning: EasyProfiler failed to set " << _privelegeName << " privelege for the application.\n";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EasyEventTracer::setProcessPrivileges()
|
void EasyEventTracer::setProcessPrivileges()
|
||||||
{
|
{
|
||||||
static bool alreadySet = false;
|
static bool alreadySet = false;
|
||||||
if (alreadySet)
|
if (alreadySet)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
alreadySet = true;
|
alreadySet = true;
|
||||||
|
|
||||||
HANDLE hToken = nullptr;
|
HANDLE hToken = nullptr;
|
||||||
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
|
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
|
||||||
{
|
{
|
||||||
#if EASY_OPTION_LOG_ENABLED != 0
|
#if EASY_OPTION_LOG_ENABLED != 0
|
||||||
const bool success = setPrivilege(hToken, SE_DEBUG_NAME);
|
const bool success = setPrivilege(hToken, SE_DEBUG_NAME);
|
||||||
if (!success)
|
if (!success)
|
||||||
EASY_ETW_LOG << "Warning: Some context switch events could not get process name.\n";
|
EASY_ETW_LOG << "Warning: Some context switch events could not get process name.\n";
|
||||||
#else
|
#else
|
||||||
setPrivilege(hToken, SE_DEBUG_NAME);
|
setPrivilege(hToken, SE_DEBUG_NAME);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CloseHandle(hToken);
|
CloseHandle(hToken);
|
||||||
}
|
}
|
||||||
#if EASY_OPTION_LOG_ENABLED != 0
|
#if EASY_OPTION_LOG_ENABLED != 0
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
EASY_ETW_LOG << "Warning: EasyProfiler failed to open process to adjust priveleges.\n";
|
EASY_ETW_LOG << "Warning: EasyProfiler failed to open process to adjust priveleges.\n";
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
::profiler::EventTracingEnableStatus EasyEventTracer::startTrace(bool _force, int _step)
|
::profiler::EventTracingEnableStatus EasyEventTracer::startTrace(bool _force, int _step)
|
||||||
{
|
{
|
||||||
auto startTraceResult = StartTrace(&m_sessionHandle, KERNEL_LOGGER_NAME, props());
|
auto startTraceResult = StartTrace(&m_sessionHandle, KERNEL_LOGGER_NAME, props());
|
||||||
switch (startTraceResult)
|
switch (startTraceResult)
|
||||||
{
|
{
|
||||||
case ERROR_SUCCESS:
|
case ERROR_SUCCESS:
|
||||||
return EVENT_TRACING_LAUNCHED_SUCCESSFULLY;
|
return EVENT_TRACING_LAUNCHED_SUCCESSFULLY;
|
||||||
|
|
||||||
case ERROR_ALREADY_EXISTS:
|
case ERROR_ALREADY_EXISTS:
|
||||||
{
|
{
|
||||||
if (_force)
|
if (_force)
|
||||||
{
|
{
|
||||||
// Try to stop another event tracing session to force launch self session.
|
// Try to stop another event tracing session to force launch self session.
|
||||||
|
|
||||||
if (_step == 0)
|
if (_step == 0)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
According to https://msdn.microsoft.com/en-us/library/windows/desktop/aa363696(v=vs.85).aspx
|
According to https://msdn.microsoft.com/en-us/library/windows/desktop/aa363696(v=vs.85).aspx
|
||||||
SessionHandle is ignored (and could be NULL) if SessionName is not NULL,
|
SessionHandle is ignored (and could be NULL) if SessionName is not NULL,
|
||||||
and you only need to set the Wnode.BufferSize, Wnode.Guid, LoggerNameOffset, and LogFileNameOffset
|
and you only need to set the Wnode.BufferSize, Wnode.Guid, LoggerNameOffset, and LogFileNameOffset
|
||||||
in EVENT_TRACE_PROPERTIES structure if ControlCode is EVENT_TRACE_CONTROL_STOP.
|
in EVENT_TRACE_PROPERTIES structure if ControlCode is EVENT_TRACE_CONTROL_STOP.
|
||||||
All data is already set for m_properties to the moment. Simply copy m_properties and use the copy.
|
All data is already set for m_properties to the moment. Simply copy m_properties and use the copy.
|
||||||
|
|
||||||
This method supposed to be faster than launching console window and executing shell command,
|
This method supposed to be faster than launching console window and executing shell command,
|
||||||
but if that would not work, return to using shell command "logman stop".
|
but if that would not work, return to using shell command "logman stop".
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// static is safe because we are guarded by spin-lock m_spin
|
// static is safe because we are guarded by spin-lock m_spin
|
||||||
static Properties p = ([]{ Properties prp; strncpy(prp.sessionName, KERNEL_LOGGER_NAME, sizeof(prp.sessionName)); return prp; })();
|
static Properties p = ([]{ Properties prp; strncpy(prp.sessionName, KERNEL_LOGGER_NAME, sizeof(prp.sessionName)); return prp; })();
|
||||||
p.base = m_properties.base; // Use copy of m_properties to make sure m_properties will not be changed
|
p.base = m_properties.base; // Use copy of m_properties to make sure m_properties will not be changed
|
||||||
|
|
||||||
// Stop another session
|
// Stop another session
|
||||||
ControlTrace(NULL, KERNEL_LOGGER_NAME, reinterpret_cast<EVENT_TRACE_PROPERTIES*>(&p), EVENT_TRACE_CONTROL_STOP);
|
ControlTrace(NULL, KERNEL_LOGGER_NAME, reinterpret_cast<EVENT_TRACE_PROPERTIES*>(&p), EVENT_TRACE_CONTROL_STOP);
|
||||||
|
|
||||||
// Console window variant:
|
// Console window variant:
|
||||||
//if (32 >= (int)ShellExecute(NULL, NULL, "logman", "stop \"" KERNEL_LOGGER_NAME "\" -ets", NULL, SW_HIDE))
|
//if (32 >= (int)ShellExecute(NULL, NULL, "logman", "stop \"" KERNEL_LOGGER_NAME "\" -ets", NULL, SW_HIDE))
|
||||||
// return EVENT_TRACING_WAS_LAUNCHED_BY_SOMEBODY_ELSE;
|
// return EVENT_TRACING_WAS_LAUNCHED_BY_SOMEBODY_ELSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_step < 4)
|
if (_step < 4)
|
||||||
{
|
{
|
||||||
// Command executed successfully. Wait for a few time until tracing session finish.
|
// Command executed successfully. Wait for a few time until tracing session finish.
|
||||||
::std::this_thread::sleep_for(::std::chrono::milliseconds(500));
|
::std::this_thread::sleep_for(::std::chrono::milliseconds(500));
|
||||||
return startTrace(true, ++_step);
|
return startTrace(true, ++_step);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if EASY_OPTION_LOG_ENABLED != 0
|
#if EASY_OPTION_LOG_ENABLED != 0
|
||||||
EASY_ETW_LOG << "Error: EasyProfiler.ETW not launched: ERROR_ALREADY_EXISTS. To stop another session execute cmd: logman stop \"" << KERNEL_LOGGER_NAME << "\" -ets\n";
|
EASY_ETW_LOG << "Error: EasyProfiler.ETW not launched: ERROR_ALREADY_EXISTS. To stop another session execute cmd: logman stop \"" << KERNEL_LOGGER_NAME << "\" -ets\n";
|
||||||
#endif
|
#endif
|
||||||
return EVENT_TRACING_WAS_LAUNCHED_BY_SOMEBODY_ELSE;
|
return EVENT_TRACING_WAS_LAUNCHED_BY_SOMEBODY_ELSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ERROR_ACCESS_DENIED:
|
case ERROR_ACCESS_DENIED:
|
||||||
#if EASY_OPTION_LOG_ENABLED != 0
|
#if EASY_OPTION_LOG_ENABLED != 0
|
||||||
EASY_ETW_LOG << "Error: EasyProfiler.ETW not launched: ERROR_ACCESS_DENIED. Try to launch your application as Administrator.\n";
|
EASY_ETW_LOG << "Error: EasyProfiler.ETW not launched: ERROR_ACCESS_DENIED. Try to launch your application as Administrator.\n";
|
||||||
#endif
|
#endif
|
||||||
return EVENT_TRACING_NOT_ENOUGH_ACCESS_RIGHTS;
|
return EVENT_TRACING_NOT_ENOUGH_ACCESS_RIGHTS;
|
||||||
|
|
||||||
case ERROR_BAD_LENGTH:
|
case ERROR_BAD_LENGTH:
|
||||||
#if EASY_OPTION_LOG_ENABLED != 0
|
#if EASY_OPTION_LOG_ENABLED != 0
|
||||||
EASY_ETW_LOG << "Error: EasyProfiler.ETW not launched: ERROR_BAD_LENGTH. It seems that your KERNEL_LOGGER_NAME differs from \"" << m_properties.sessionName << "\". Try to re-compile easy_profiler or contact EasyProfiler developers.\n";
|
EASY_ETW_LOG << "Error: EasyProfiler.ETW not launched: ERROR_BAD_LENGTH. It seems that your KERNEL_LOGGER_NAME differs from \"" << m_properties.sessionName << "\". Try to re-compile easy_profiler or contact EasyProfiler developers.\n";
|
||||||
#endif
|
#endif
|
||||||
return EVENT_TRACING_BAD_PROPERTIES_SIZE;
|
return EVENT_TRACING_BAD_PROPERTIES_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if EASY_OPTION_LOG_ENABLED != 0
|
#if EASY_OPTION_LOG_ENABLED != 0
|
||||||
EASY_ETW_LOG << "Error: EasyProfiler.ETW not launched: StartTrace() returned " << startTraceResult << ::std::endl;
|
EASY_ETW_LOG << "Error: EasyProfiler.ETW not launched: StartTrace() returned " << startTraceResult << ::std::endl;
|
||||||
#endif
|
#endif
|
||||||
return EVENT_TRACING_MISTERIOUS_ERROR;
|
return EVENT_TRACING_MISTERIOUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
::profiler::EventTracingEnableStatus EasyEventTracer::enable(bool _force)
|
::profiler::EventTracingEnableStatus EasyEventTracer::enable(bool _force)
|
||||||
{
|
{
|
||||||
::profiler::guard_lock<::profiler::spin_lock> lock(m_spin);
|
::profiler::guard_lock<::profiler::spin_lock> lock(m_spin);
|
||||||
if (m_bEnabled)
|
if (m_bEnabled)
|
||||||
return EVENT_TRACING_LAUNCHED_SUCCESSFULLY;
|
return EVENT_TRACING_LAUNCHED_SUCCESSFULLY;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Trying to set debug privilege for current process
|
Trying to set debug privilege for current process
|
||||||
to be able to get other process information (process name).
|
to be able to get other process information (process name).
|
||||||
*/
|
*/
|
||||||
EasyEventTracer::setProcessPrivileges();
|
EasyEventTracer::setProcessPrivileges();
|
||||||
|
|
||||||
// Clear properties
|
// Clear properties
|
||||||
memset(&m_properties, 0, sizeof(m_properties));
|
memset(&m_properties, 0, sizeof(m_properties));
|
||||||
m_properties.base.Wnode.BufferSize = sizeof(m_properties);
|
m_properties.base.Wnode.BufferSize = sizeof(m_properties);
|
||||||
m_properties.base.Wnode.Flags = WNODE_FLAG_TRACED_GUID;
|
m_properties.base.Wnode.Flags = WNODE_FLAG_TRACED_GUID;
|
||||||
m_properties.base.Wnode.ClientContext = RAW_TIMESTAMP_TIME_TYPE;
|
m_properties.base.Wnode.ClientContext = RAW_TIMESTAMP_TIME_TYPE;
|
||||||
m_properties.base.Wnode.Guid = SystemTraceControlGuid;
|
m_properties.base.Wnode.Guid = SystemTraceControlGuid;
|
||||||
m_properties.base.LoggerNameOffset = sizeof(m_properties.base);
|
m_properties.base.LoggerNameOffset = sizeof(m_properties.base);
|
||||||
m_properties.base.EnableFlags = EVENT_TRACE_FLAG_CSWITCH;
|
m_properties.base.EnableFlags = EVENT_TRACE_FLAG_CSWITCH;
|
||||||
m_properties.base.LogFileMode = EVENT_TRACE_REAL_TIME_MODE;
|
m_properties.base.LogFileMode = EVENT_TRACE_REAL_TIME_MODE;
|
||||||
|
|
||||||
// Start event tracing
|
// Start event tracing
|
||||||
auto res = startTrace(_force);
|
auto res = startTrace(_force);
|
||||||
if (res != EVENT_TRACING_LAUNCHED_SUCCESSFULLY)
|
if (res != EVENT_TRACING_LAUNCHED_SUCCESSFULLY)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
memset(&m_trace, 0, sizeof(m_trace));
|
memset(&m_trace, 0, sizeof(m_trace));
|
||||||
m_trace.LoggerName = KERNEL_LOGGER_NAME;
|
m_trace.LoggerName = KERNEL_LOGGER_NAME;
|
||||||
m_trace.ProcessTraceMode = PROCESS_TRACE_MODE_REAL_TIME | PROCESS_TRACE_MODE_EVENT_RECORD | PROCESS_TRACE_MODE_RAW_TIMESTAMP;
|
m_trace.ProcessTraceMode = PROCESS_TRACE_MODE_REAL_TIME | PROCESS_TRACE_MODE_EVENT_RECORD | PROCESS_TRACE_MODE_RAW_TIMESTAMP;
|
||||||
m_trace.EventRecordCallback = ::profiler::processTraceEvent;
|
m_trace.EventRecordCallback = ::profiler::processTraceEvent;
|
||||||
|
|
||||||
m_openedHandle = OpenTrace(&m_trace);
|
m_openedHandle = OpenTrace(&m_trace);
|
||||||
if (m_openedHandle == INVALID_PROCESSTRACE_HANDLE)
|
if (m_openedHandle == INVALID_PROCESSTRACE_HANDLE)
|
||||||
{
|
{
|
||||||
#if EASY_OPTION_LOG_ENABLED != 0
|
#if EASY_OPTION_LOG_ENABLED != 0
|
||||||
EASY_ETW_LOG << "Error: EasyProfiler.ETW not launched: OpenTrace() returned invalid handle.\n";
|
EASY_ETW_LOG << "Error: EasyProfiler.ETW not launched: OpenTrace() returned invalid handle.\n";
|
||||||
#endif
|
#endif
|
||||||
return EVENT_TRACING_OPEN_TRACE_ERROR;
|
return EVENT_TRACING_OPEN_TRACE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Have to launch a thread to process events because according to MSDN documentation:
|
Have to launch a thread to process events because according to MSDN documentation:
|
||||||
|
|
||||||
The ProcessTrace function blocks the thread until it delivers all events, the BufferCallback function returns FALSE,
|
The ProcessTrace function blocks the thread until it delivers all events, the BufferCallback function returns FALSE,
|
||||||
or you call CloseTrace. If the consumer is consuming events in real time, the ProcessTrace function returns after
|
or you call CloseTrace. If the consumer is consuming events in real time, the ProcessTrace function returns after
|
||||||
the controller stops the trace session. (Note that there may be a several-second delay before the function returns.)
|
the controller stops the trace session. (Note that there may be a several-second delay before the function returns.)
|
||||||
|
|
||||||
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364093(v=vs.85).aspx
|
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364093(v=vs.85).aspx
|
||||||
*/
|
*/
|
||||||
m_processThread = ::std::move(::std::thread([this]()
|
m_processThread = ::std::move(::std::thread([this]()
|
||||||
{
|
{
|
||||||
EASY_THREAD_SCOPE("EasyProfiler.ETW");
|
EASY_THREAD_SCOPE("EasyProfiler.ETW");
|
||||||
ProcessTrace(&m_openedHandle, 1, 0, 0);
|
ProcessTrace(&m_openedHandle, 1, 0, 0);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Set low priority for event tracing thread
|
// Set low priority for event tracing thread
|
||||||
if (m_lowPriority.load(::std::memory_order_acquire))
|
if (m_lowPriority.load(::std::memory_order_acquire))
|
||||||
SetThreadPriority(m_processThread.native_handle(), THREAD_PRIORITY_LOWEST);
|
SetThreadPriority(m_processThread.native_handle(), THREAD_PRIORITY_LOWEST);
|
||||||
|
|
||||||
m_bEnabled = true;
|
m_bEnabled = true;
|
||||||
|
|
||||||
return EVENT_TRACING_LAUNCHED_SUCCESSFULLY;
|
return EVENT_TRACING_LAUNCHED_SUCCESSFULLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EasyEventTracer::disable()
|
void EasyEventTracer::disable()
|
||||||
{
|
{
|
||||||
::profiler::guard_lock<::profiler::spin_lock> lock(m_spin);
|
::profiler::guard_lock<::profiler::spin_lock> lock(m_spin);
|
||||||
if (!m_bEnabled)
|
if (!m_bEnabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TRACING_END_TIME.store(getCurrentTime(), ::std::memory_order_release);
|
TRACING_END_TIME.store(getCurrentTime(), ::std::memory_order_release);
|
||||||
|
|
||||||
ControlTrace(m_openedHandle, KERNEL_LOGGER_NAME, props(), EVENT_TRACE_CONTROL_STOP);
|
ControlTrace(m_openedHandle, KERNEL_LOGGER_NAME, props(), EVENT_TRACE_CONTROL_STOP);
|
||||||
CloseTrace(m_openedHandle);
|
CloseTrace(m_openedHandle);
|
||||||
|
|
||||||
// Wait for ProcessTrace to finish to make sure no processTraceEvent() will be called later.
|
// Wait for ProcessTrace to finish to make sure no processTraceEvent() will be called later.
|
||||||
if (m_processThread.joinable())
|
if (m_processThread.joinable())
|
||||||
m_processThread.join();
|
m_processThread.join();
|
||||||
|
|
||||||
m_bEnabled = false;
|
m_bEnabled = false;
|
||||||
|
|
||||||
// processTraceEvent() is not called anymore. Clean static maps is safe.
|
// processTraceEvent() is not called anymore. Clean static maps is safe.
|
||||||
PROCESS_INFO_TABLE.clear();
|
PROCESS_INFO_TABLE.clear();
|
||||||
THREAD_PROCESS_INFO_TABLE.clear();
|
THREAD_PROCESS_INFO_TABLE.clear();
|
||||||
THREAD_PROCESS_INFO_TABLE[0U] = nullptr;
|
THREAD_PROCESS_INFO_TABLE[0U] = nullptr;
|
||||||
|
|
||||||
TRACING_END_TIME.store(~0ULL, ::std::memory_order_release);
|
TRACING_END_TIME.store(~0ULL, ::std::memory_order_release);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // END of namespace profiler.
|
} // END of namespace profiler.
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
@ -1,120 +1,120 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
* file name : event_trace_win.h
|
* file name : event_trace_win.h
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* creation time : 2016/09/04
|
* creation time : 2016/09/04
|
||||||
* author : Victor Zarubkin
|
* author : Victor Zarubkin
|
||||||
* email : v.s.zarubkin@gmail.com
|
* email : v.s.zarubkin@gmail.com
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* description : The file contains declaration of EasyEventTracer class used for tracing
|
* description : The file contains declaration of EasyEventTracer class used for tracing
|
||||||
* : Windows system events to get context switches.
|
* : Windows system events to get context switches.
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* change log : * 2016/09/04 Victor Zarubkin: initial commit.
|
* change log : * 2016/09/04 Victor Zarubkin: initial commit.
|
||||||
* :
|
* :
|
||||||
* : *
|
* : *
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* license : Lightweight profiler library for c++
|
* license : Lightweight profiler library for c++
|
||||||
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
||||||
* :
|
* :
|
||||||
* :
|
* :
|
||||||
* : Licensed under the Apache License, Version 2.0 (the "License");
|
* : Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* : you may not use this file except in compliance with the License.
|
* : you may not use this file except in compliance with the License.
|
||||||
* : You may obtain a copy of the License at
|
* : You may obtain a copy of the License at
|
||||||
* :
|
* :
|
||||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* :
|
* :
|
||||||
* : Unless required by applicable law or agreed to in writing, software
|
* : Unless required by applicable law or agreed to in writing, software
|
||||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* : See the License for the specific language governing permissions and
|
* : See the License for the specific language governing permissions and
|
||||||
* : limitations under the License.
|
* : limitations under the License.
|
||||||
* :
|
* :
|
||||||
* :
|
* :
|
||||||
* : GNU General Public License Usage
|
* : GNU General Public License Usage
|
||||||
* : Alternatively, this file may be used under the terms of the GNU
|
* : Alternatively, this file may be used under the terms of the GNU
|
||||||
* : General Public License as published by the Free Software Foundation,
|
* : General Public License as published by the Free Software Foundation,
|
||||||
* : either version 3 of the License, or (at your option) any later version.
|
* : either version 3 of the License, or (at your option) any later version.
|
||||||
* :
|
* :
|
||||||
* : This program is distributed in the hope that it will be useful,
|
* : This program is distributed in the hope that it will be useful,
|
||||||
* : but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* : but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
* : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
||||||
* : GNU General Public License for more details.
|
* : GNU General Public License for more details.
|
||||||
* :
|
* :
|
||||||
* : You should have received a copy of the GNU General Public License
|
* : You should have received a copy of the GNU General Public License
|
||||||
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
#ifndef EASY_PROFILER__EVENT_TRACE_WINDOWS__H_
|
#ifndef EASY_PROFILER__EVENT_TRACE_WINDOWS__H_
|
||||||
#define EASY_PROFILER__EVENT_TRACE_WINDOWS__H_
|
#define EASY_PROFILER__EVENT_TRACE_WINDOWS__H_
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
#define INITGUID // This is to enable using SystemTraceControlGuid in evntrace.h.
|
#define INITGUID // This is to enable using SystemTraceControlGuid in evntrace.h.
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include <Strsafe.h>
|
#include <Strsafe.h>
|
||||||
#include <Shellapi.h>
|
#include <Shellapi.h>
|
||||||
#include <wmistr.h>
|
#include <wmistr.h>
|
||||||
#include <evntrace.h>
|
#include <evntrace.h>
|
||||||
#include <evntcons.h>
|
#include <evntcons.h>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include "event_trace_status.h"
|
#include "event_trace_status.h"
|
||||||
#include "spin_lock.h"
|
#include "spin_lock.h"
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
namespace profiler {
|
namespace profiler {
|
||||||
|
|
||||||
class EasyEventTracer EASY_FINAL
|
class EasyEventTracer EASY_FINAL
|
||||||
{
|
{
|
||||||
#ifndef EASY_MAGIC_STATIC_CPP11
|
#ifndef EASY_MAGIC_STATIC_CPP11
|
||||||
friend class EasyEventTracerInstance;
|
friend class EasyEventTracerInstance;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
struct Properties {
|
struct Properties {
|
||||||
EVENT_TRACE_PROPERTIES base;
|
EVENT_TRACE_PROPERTIES base;
|
||||||
char sessionName[sizeof(KERNEL_LOGGER_NAME)];
|
char sessionName[sizeof(KERNEL_LOGGER_NAME)];
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
::std::thread m_processThread;
|
::std::thread m_processThread;
|
||||||
Properties m_properties;
|
Properties m_properties;
|
||||||
EVENT_TRACE_LOGFILE m_trace;
|
EVENT_TRACE_LOGFILE m_trace;
|
||||||
::profiler::spin_lock m_spin;
|
::profiler::spin_lock m_spin;
|
||||||
::std::atomic_bool m_lowPriority;
|
::std::atomic_bool m_lowPriority;
|
||||||
TRACEHANDLE m_sessionHandle = INVALID_PROCESSTRACE_HANDLE;
|
TRACEHANDLE m_sessionHandle = INVALID_PROCESSTRACE_HANDLE;
|
||||||
TRACEHANDLE m_openedHandle = INVALID_PROCESSTRACE_HANDLE;
|
TRACEHANDLE m_openedHandle = INVALID_PROCESSTRACE_HANDLE;
|
||||||
bool m_bEnabled = false;
|
bool m_bEnabled = false;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static EasyEventTracer& instance();
|
static EasyEventTracer& instance();
|
||||||
~EasyEventTracer();
|
~EasyEventTracer();
|
||||||
|
|
||||||
bool isLowPriority() const;
|
bool isLowPriority() const;
|
||||||
|
|
||||||
::profiler::EventTracingEnableStatus enable(bool _force = false);
|
::profiler::EventTracingEnableStatus enable(bool _force = false);
|
||||||
void disable();
|
void disable();
|
||||||
void setLowPriority(bool _value);
|
void setLowPriority(bool _value);
|
||||||
static void setProcessPrivileges();
|
static void setProcessPrivileges();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
EasyEventTracer();
|
EasyEventTracer();
|
||||||
|
|
||||||
inline EVENT_TRACE_PROPERTIES* props()
|
inline EVENT_TRACE_PROPERTIES* props()
|
||||||
{
|
{
|
||||||
return reinterpret_cast<EVENT_TRACE_PROPERTIES*>(&m_properties);
|
return reinterpret_cast<EVENT_TRACE_PROPERTIES*>(&m_properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
::profiler::EventTracingEnableStatus startTrace(bool _force, int _step = 0);
|
::profiler::EventTracingEnableStatus startTrace(bool _force, int _step = 0);
|
||||||
|
|
||||||
}; // END of class EasyEventTracer.
|
}; // END of class EasyEventTracer.
|
||||||
|
|
||||||
} // END of namespace profiler.
|
} // END of namespace profiler.
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
#endif // EASY_PROFILER__EVENT_TRACE_WINDOWS__H_
|
#endif // EASY_PROFILER__EVENT_TRACE_WINDOWS__H_
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
* file name : hashed_str.h
|
* file name : hashed_str.h
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* creation time : 2016/09/11
|
* creation time : 2016/09/11
|
||||||
* author : Victor Zarubkin
|
* author : Victor Zarubkin
|
||||||
* email : v.s.zarubkin@gmail.com
|
* email : v.s.zarubkin@gmail.com
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* description : The file contains definition of C-strings with calculated hash-code.
|
* description : The file contains definition of C-strings with calculated hash-code.
|
||||||
* : These strings may be used as optimized keys for std::unordered_map.
|
* : These strings may be used as optimized keys for std::unordered_map.
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* change log : * 2016/09/11 Victor Zarubkin: Initial commit. Moved sources from reader.cpp
|
* change log : * 2016/09/11 Victor Zarubkin: Initial commit. Moved sources from reader.cpp
|
||||||
* :
|
* :
|
||||||
* : *
|
* : *
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* license : Lightweight profiler library for c++
|
* license : Lightweight profiler library for c++
|
||||||
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
||||||
* :
|
* :
|
||||||
@ -26,248 +26,248 @@
|
|||||||
* : GNU General Public License for more details.
|
* : GNU General Public License for more details.
|
||||||
* :
|
* :
|
||||||
* : You should have received a copy of the GNU General Public License
|
* : You should have received a copy of the GNU General Public License
|
||||||
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
#ifndef EASY_PROFILER__HASHED_CSTR__H_
|
#ifndef EASY_PROFILER__HASHED_CSTR__H_
|
||||||
#define EASY_PROFILER__HASHED_CSTR__H_
|
#define EASY_PROFILER__HASHED_CSTR__H_
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
namespace profiler {
|
namespace profiler {
|
||||||
|
|
||||||
/** \brief Simple C-string pointer with length.
|
/** \brief Simple C-string pointer with length.
|
||||||
|
|
||||||
It is used as base class for a key in std::unordered_map.
|
It is used as base class for a key in std::unordered_map.
|
||||||
It is used to get better performance than std::string.
|
It is used to get better performance than std::string.
|
||||||
It simply stores a pointer and a length, there is no
|
It simply stores a pointer and a length, there is no
|
||||||
any memory allocation and copy.
|
any memory allocation and copy.
|
||||||
|
|
||||||
\warning Make sure you know what you are doing. You have to be sure that
|
\warning Make sure you know what you are doing. You have to be sure that
|
||||||
pointed C-string will exist until you finish using this cstring.
|
pointed C-string will exist until you finish using this cstring.
|
||||||
|
|
||||||
\ingroup profiler
|
\ingroup profiler
|
||||||
*/
|
*/
|
||||||
class cstring
|
class cstring
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
const char* m_str;
|
const char* m_str;
|
||||||
size_t m_len;
|
size_t m_len;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
cstring(const char* _str) : m_str(_str), m_len(strlen(_str))
|
cstring(const char* _str) : m_str(_str), m_len(strlen(_str))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
cstring(const char* _str, size_t _len) : m_str(_str), m_len(_len)
|
cstring(const char* _str, size_t _len) : m_str(_str), m_len(_len)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
cstring(const cstring&) = default;
|
cstring(const cstring&) = default;
|
||||||
cstring& operator = (const cstring&) = default;
|
cstring& operator = (const cstring&) = default;
|
||||||
|
|
||||||
inline bool operator == (const cstring& _other) const
|
inline bool operator == (const cstring& _other) const
|
||||||
{
|
{
|
||||||
return m_len == _other.m_len && !strncmp(m_str, _other.m_str, m_len);
|
return m_len == _other.m_len && !strncmp(m_str, _other.m_str, m_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator != (const cstring& _other) const
|
inline bool operator != (const cstring& _other) const
|
||||||
{
|
{
|
||||||
return !operator == (_other);
|
return !operator == (_other);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator < (const cstring& _other) const
|
inline bool operator < (const cstring& _other) const
|
||||||
{
|
{
|
||||||
if (m_len == _other.m_len)
|
if (m_len == _other.m_len)
|
||||||
{
|
{
|
||||||
return strncmp(m_str, _other.m_str, m_len) < 0;
|
return strncmp(m_str, _other.m_str, m_len) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_len < _other.m_len;
|
return m_len < _other.m_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const char* c_str() const
|
inline const char* c_str() const
|
||||||
{
|
{
|
||||||
return m_str;
|
return m_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline size_t size() const
|
inline size_t size() const
|
||||||
{
|
{
|
||||||
return m_len;
|
return m_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
}; // END of class cstring.
|
}; // END of class cstring.
|
||||||
|
|
||||||
/** \brief cstring with precalculated hash.
|
/** \brief cstring with precalculated hash.
|
||||||
|
|
||||||
This is used to calculate hash for C-string and to cache it
|
This is used to calculate hash for C-string and to cache it
|
||||||
to be used in the future without recurring hash calculatoin.
|
to be used in the future without recurring hash calculatoin.
|
||||||
|
|
||||||
\note This class is used as a key in std::unordered_map.
|
\note This class is used as a key in std::unordered_map.
|
||||||
|
|
||||||
\ingroup profiler
|
\ingroup profiler
|
||||||
*/
|
*/
|
||||||
class hashed_cstr : public cstring
|
class hashed_cstr : public cstring
|
||||||
{
|
{
|
||||||
typedef cstring Parent;
|
typedef cstring Parent;
|
||||||
|
|
||||||
size_t m_hash;
|
size_t m_hash;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
hashed_cstr(const char* _str) : Parent(_str), m_hash(0)
|
hashed_cstr(const char* _str) : Parent(_str), m_hash(0)
|
||||||
{
|
{
|
||||||
m_hash = ::std::_Hash_seq((const unsigned char *)m_str, m_len);
|
m_hash = ::std::_Hash_seq((const unsigned char *)m_str, m_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
hashed_cstr(const char* _str, size_t _hash_code) : Parent(_str), m_hash(_hash_code)
|
hashed_cstr(const char* _str, size_t _hash_code) : Parent(_str), m_hash(_hash_code)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
hashed_cstr(const char* _str, size_t _len, size_t _hash_code) : Parent(_str, _len), m_hash(_hash_code)
|
hashed_cstr(const char* _str, size_t _len, size_t _hash_code) : Parent(_str, _len), m_hash(_hash_code)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
hashed_cstr(const hashed_cstr&) = default;
|
hashed_cstr(const hashed_cstr&) = default;
|
||||||
hashed_cstr& operator = (const hashed_cstr&) = default;
|
hashed_cstr& operator = (const hashed_cstr&) = default;
|
||||||
|
|
||||||
inline bool operator == (const hashed_cstr& _other) const
|
inline bool operator == (const hashed_cstr& _other) const
|
||||||
{
|
{
|
||||||
return m_hash == _other.m_hash && Parent::operator == (_other);
|
return m_hash == _other.m_hash && Parent::operator == (_other);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator != (const hashed_cstr& _other) const
|
inline bool operator != (const hashed_cstr& _other) const
|
||||||
{
|
{
|
||||||
return !operator == (_other);
|
return !operator == (_other);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline size_t hcode() const
|
inline size_t hcode() const
|
||||||
{
|
{
|
||||||
return m_hash;
|
return m_hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
}; // END of class hashed_cstr.
|
}; // END of class hashed_cstr.
|
||||||
|
|
||||||
} // END of namespace profiler.
|
} // END of namespace profiler.
|
||||||
|
|
||||||
namespace std {
|
namespace std {
|
||||||
|
|
||||||
/** \brief Simply returns precalculated hash of a C-string. */
|
/** \brief Simply returns precalculated hash of a C-string. */
|
||||||
template <> struct hash<::profiler::hashed_cstr> {
|
template <> struct hash<::profiler::hashed_cstr> {
|
||||||
typedef ::profiler::hashed_cstr argument_type;
|
typedef ::profiler::hashed_cstr argument_type;
|
||||||
typedef size_t result_type;
|
typedef size_t result_type;
|
||||||
inline size_t operator () (const ::profiler::hashed_cstr& _str) const {
|
inline size_t operator () (const ::profiler::hashed_cstr& _str) const {
|
||||||
return _str.hcode();
|
return _str.hcode();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // END of namespace std.
|
} // END of namespace std.
|
||||||
|
|
||||||
#else ////////////////////////////////////////////////////////////////////
|
#else ////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// TODO: Create hashed_cstr for Linux (need to use Linux version of std::_Hash_seq)
|
// TODO: Create hashed_cstr for Linux (need to use Linux version of std::_Hash_seq)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace profiler {
|
namespace profiler {
|
||||||
|
|
||||||
class hashed_stdstring
|
class hashed_stdstring
|
||||||
{
|
{
|
||||||
::std::string m_str;
|
::std::string m_str;
|
||||||
size_t m_hash;
|
size_t m_hash;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
hashed_stdstring(const char* _str) : m_str(_str), m_hash(::std::hash<::std::string>()(m_str))
|
hashed_stdstring(const char* _str) : m_str(_str), m_hash(::std::hash<::std::string>()(m_str))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
hashed_stdstring(const ::std::string& _str) : m_str(_str), m_hash(::std::hash<::std::string>()(m_str))
|
hashed_stdstring(const ::std::string& _str) : m_str(_str), m_hash(::std::hash<::std::string>()(m_str))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
hashed_stdstring(::std::string&& _str) : m_str(::std::forward<::std::string&&>(_str)), m_hash(::std::hash<::std::string>()(m_str))
|
hashed_stdstring(::std::string&& _str) : m_str(::std::forward<::std::string&&>(_str)), m_hash(::std::hash<::std::string>()(m_str))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
hashed_stdstring(hashed_stdstring&& _other) : m_str(::std::move(_other.m_str)), m_hash(_other.m_hash)
|
hashed_stdstring(hashed_stdstring&& _other) : m_str(::std::move(_other.m_str)), m_hash(_other.m_hash)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
hashed_stdstring(const char* _str, size_t _hash_code) : m_str(_str), m_hash(_hash_code)
|
hashed_stdstring(const char* _str, size_t _hash_code) : m_str(_str), m_hash(_hash_code)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
hashed_stdstring(const ::std::string& _str, size_t _hash_code) : m_str(_str), m_hash(_hash_code)
|
hashed_stdstring(const ::std::string& _str, size_t _hash_code) : m_str(_str), m_hash(_hash_code)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
hashed_stdstring(::std::string&& _str, size_t _hash_code) : m_str(::std::forward<::std::string&&>(_str)), m_hash(_hash_code)
|
hashed_stdstring(::std::string&& _str, size_t _hash_code) : m_str(::std::forward<::std::string&&>(_str)), m_hash(_hash_code)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
hashed_stdstring(const hashed_stdstring&) = default;
|
hashed_stdstring(const hashed_stdstring&) = default;
|
||||||
hashed_stdstring& operator = (const hashed_stdstring&) = default;
|
hashed_stdstring& operator = (const hashed_stdstring&) = default;
|
||||||
|
|
||||||
hashed_stdstring& operator = (hashed_stdstring&& _other)
|
hashed_stdstring& operator = (hashed_stdstring&& _other)
|
||||||
{
|
{
|
||||||
m_str = ::std::move(_other.m_str);
|
m_str = ::std::move(_other.m_str);
|
||||||
m_hash = _other.m_hash;
|
m_hash = _other.m_hash;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator == (const hashed_stdstring& _other) const
|
inline bool operator == (const hashed_stdstring& _other) const
|
||||||
{
|
{
|
||||||
return m_hash == _other.m_hash && m_str == _other.m_str;
|
return m_hash == _other.m_hash && m_str == _other.m_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator != (const hashed_stdstring& _other) const
|
inline bool operator != (const hashed_stdstring& _other) const
|
||||||
{
|
{
|
||||||
return !operator == (_other);
|
return !operator == (_other);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline size_t hcode() const
|
inline size_t hcode() const
|
||||||
{
|
{
|
||||||
return m_hash;
|
return m_hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const char* c_str() const
|
inline const char* c_str() const
|
||||||
{
|
{
|
||||||
return m_str.c_str();
|
return m_str.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline size_t size() const
|
inline size_t size() const
|
||||||
{
|
{
|
||||||
return m_str.size();
|
return m_str.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
}; // END of class hashed_stdstring.
|
}; // END of class hashed_stdstring.
|
||||||
|
|
||||||
} // END of namespace profiler.
|
} // END of namespace profiler.
|
||||||
|
|
||||||
namespace std {
|
namespace std {
|
||||||
|
|
||||||
/** \brief Simply returns precalculated hash of a std::string. */
|
/** \brief Simply returns precalculated hash of a std::string. */
|
||||||
template <> struct hash<::profiler::hashed_stdstring> {
|
template <> struct hash<::profiler::hashed_stdstring> {
|
||||||
typedef ::profiler::hashed_stdstring argument_type;
|
typedef ::profiler::hashed_stdstring argument_type;
|
||||||
typedef size_t result_type;
|
typedef size_t result_type;
|
||||||
inline size_t operator () (const ::profiler::hashed_stdstring& _str) const {
|
inline size_t operator () (const ::profiler::hashed_stdstring& _str) const {
|
||||||
return _str.hcode();
|
return _str.hcode();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // END of namespace std.
|
} // END of namespace std.
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#endif // EASY_PROFILER__HASHED_CSTR__H_
|
#endif // EASY_PROFILER__HASHED_CSTR__H_
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
* file name : outstream.h
|
* file name : outstream.h
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* creation time : 2016/09/11
|
* creation time : 2016/09/11
|
||||||
* authors : Sergey Yagovtsev, Victor Zarubkin
|
* authors : Sergey Yagovtsev, Victor Zarubkin
|
||||||
* emails : yse.sey@gmail.com, v.s.zarubkin@gmail.com
|
* emails : yse.sey@gmail.com, v.s.zarubkin@gmail.com
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* description : The file contains definition of output stream helpers.
|
* description : The file contains definition of output stream helpers.
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* change log : * 2016/09/11 Victor Zarubkin: Initial commit. Moved sources from profiler_manager.h/.cpp
|
* change log : * 2016/09/11 Victor Zarubkin: Initial commit. Moved sources from profiler_manager.h/.cpp
|
||||||
* :
|
* :
|
||||||
* : *
|
* : *
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* license : Lightweight profiler library for c++
|
* license : Lightweight profiler library for c++
|
||||||
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
||||||
* :
|
* :
|
||||||
@ -25,51 +25,51 @@
|
|||||||
* : GNU General Public License for more details.
|
* : GNU General Public License for more details.
|
||||||
* :
|
* :
|
||||||
* : You should have received a copy of the GNU General Public License
|
* : You should have received a copy of the GNU General Public License
|
||||||
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
#ifndef EASY_PROFILER__OUTPUT_STREAM__H_
|
#ifndef EASY_PROFILER__OUTPUT_STREAM__H_
|
||||||
#define EASY_PROFILER__OUTPUT_STREAM__H_
|
#define EASY_PROFILER__OUTPUT_STREAM__H_
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
namespace profiler {
|
namespace profiler {
|
||||||
|
|
||||||
class OStream
|
class OStream
|
||||||
{
|
{
|
||||||
::std::stringstream m_stream;
|
::std::stringstream m_stream;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
explicit OStream() : m_stream(std::ios_base::out | std::ios_base::binary)
|
explicit OStream() : m_stream(std::ios_base::out | std::ios_base::binary)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T> void write(const char* _data, T _size)
|
template <typename T> void write(const char* _data, T _size)
|
||||||
{
|
{
|
||||||
m_stream.write(_data, _size);
|
m_stream.write(_data, _size);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T> void write(const T& _data)
|
template <class T> void write(const T& _data)
|
||||||
{
|
{
|
||||||
m_stream.write((const char*)&_data, sizeof(T));
|
m_stream.write((const char*)&_data, sizeof(T));
|
||||||
}
|
}
|
||||||
|
|
||||||
const ::std::stringstream& stream() const
|
const ::std::stringstream& stream() const
|
||||||
{
|
{
|
||||||
return m_stream;
|
return m_stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
}; // END of class OStream.
|
}; // END of class OStream.
|
||||||
|
|
||||||
} // END of namespace profiler.
|
} // END of namespace profiler.
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#endif // EASY_PROFILER__OUTPUT_STREAM__H_
|
#endif // EASY_PROFILER__OUTPUT_STREAM__H_
|
||||||
|
@ -1469,12 +1469,12 @@ void EasyGraphicsView::onIdleTimeout()
|
|||||||
{
|
{
|
||||||
auto threadRoot = item->root();
|
auto threadRoot = item->root();
|
||||||
|
|
||||||
::profiler::block_index_t ind = 0;
|
::profiler::block_index_t ind = 0;
|
||||||
auto it = ::std::lower_bound(threadRoot->sync.begin(), threadRoot->sync.end(), itemBlock.node->begin(), [](::profiler::block_index_t _cs_index, ::profiler::timestamp_t _val)
|
auto it = ::std::lower_bound(threadRoot->sync.begin(), threadRoot->sync.end(), itemBlock.node->begin(), [](::profiler::block_index_t _cs_index, ::profiler::timestamp_t _val)
|
||||||
{
|
{
|
||||||
return EASY_GLOBALS.gui_blocks[_cs_index].tree.node->begin() < _val;
|
return EASY_GLOBALS.gui_blocks[_cs_index].tree.node->begin() < _val;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (it != threadRoot->sync.end())
|
if (it != threadRoot->sync.end())
|
||||||
{
|
{
|
||||||
ind = it - threadRoot->sync.begin();
|
ind = it - threadRoot->sync.begin();
|
||||||
@ -1486,20 +1486,20 @@ void EasyGraphicsView::onIdleTimeout()
|
|||||||
ind = static_cast<::profiler::block_index_t>(threadRoot->sync.size());
|
ind = static_cast<::profiler::block_index_t>(threadRoot->sync.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
::profiler::timestamp_t idleTime = 0;
|
::profiler::timestamp_t idleTime = 0;
|
||||||
for (::profiler::block_index_t ncs = static_cast<::profiler::block_index_t>(threadRoot->sync.size()); ind < ncs; ++ind)
|
for (::profiler::block_index_t ncs = static_cast<::profiler::block_index_t>(threadRoot->sync.size()); ind < ncs; ++ind)
|
||||||
{
|
{
|
||||||
auto cs_index = threadRoot->sync[ind];
|
auto cs_index = threadRoot->sync[ind];
|
||||||
const auto cs = EASY_GLOBALS.gui_blocks[cs_index].tree.node;
|
const auto cs = EASY_GLOBALS.gui_blocks[cs_index].tree.node;
|
||||||
|
|
||||||
if (cs->begin() > itemBlock.node->end())
|
if (cs->begin() > itemBlock.node->end())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (itemBlock.node->begin() <= cs->begin() && cs->end() <= itemBlock.node->end())
|
if (itemBlock.node->begin() <= cs->begin() && cs->end() <= itemBlock.node->end())
|
||||||
idleTime += cs->duration();
|
idleTime += cs->duration();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto active_time = duration - idleTime;
|
auto active_time = duration - idleTime;
|
||||||
auto active_percent = duration == 0 ? 100. : ::profiler_gui::percentReal(active_time, duration);
|
auto active_percent = duration == 0 ? 100. : ::profiler_gui::percentReal(active_time, duration);
|
||||||
lay->addWidget(new QLabel("Active time:", widget), row, 0, Qt::AlignRight);
|
lay->addWidget(new QLabel("Active time:", widget), row, 0, Qt::AlignRight);
|
||||||
lay->addWidget(new QLabel(QString("%1 (%2%)").arg(::profiler_gui::timeStringRealNs(EASY_GLOBALS.time_units, active_time, 3)).arg(QString::number(active_percent, 'g', 3)), widget), row, 1, 1, 3, Qt::AlignLeft);
|
lay->addWidget(new QLabel(QString("%1 (%2%)").arg(::profiler_gui::timeStringRealNs(EASY_GLOBALS.time_units, active_time, 3)).arg(QString::number(active_percent, 'g', 3)), widget), row, 1, 1, 3, Qt::AlignLeft);
|
||||||
|
@ -20,34 +20,34 @@
|
|||||||
* :
|
* :
|
||||||
* : * 2016/08/18 Victor Zarubkin: Moved sources of TreeWidgetItem into tree_widget_item.h/.cpp
|
* : * 2016/08/18 Victor Zarubkin: Moved sources of TreeWidgetItem into tree_widget_item.h/.cpp
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* license : Lightweight profiler library for c++
|
* license : Lightweight profiler library for c++
|
||||||
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
||||||
* :
|
* :
|
||||||
* :
|
* :
|
||||||
* : Licensed under the Apache License, Version 2.0 (the "License");
|
* : Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* : you may not use this file except in compliance with the License.
|
* : you may not use this file except in compliance with the License.
|
||||||
* : You may obtain a copy of the License at
|
* : You may obtain a copy of the License at
|
||||||
* :
|
* :
|
||||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* :
|
* :
|
||||||
* : Unless required by applicable law or agreed to in writing, software
|
* : Unless required by applicable law or agreed to in writing, software
|
||||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* : See the License for the specific language governing permissions and
|
* : See the License for the specific language governing permissions and
|
||||||
* : limitations under the License.
|
* : limitations under the License.
|
||||||
* :
|
* :
|
||||||
* :
|
* :
|
||||||
* : GNU General Public License Usage
|
* : GNU General Public License Usage
|
||||||
* : Alternatively, this file may be used under the terms of the GNU
|
* : Alternatively, this file may be used under the terms of the GNU
|
||||||
* : General Public License as published by the Free Software Foundation,
|
* : General Public License as published by the Free Software Foundation,
|
||||||
* : either version 3 of the License, or (at your option) any later version.
|
* : either version 3 of the License, or (at your option) any later version.
|
||||||
* :
|
* :
|
||||||
* : This program is distributed in the hope that it will be useful,
|
* : This program is distributed in the hope that it will be useful,
|
||||||
* : but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* : but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
* : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
||||||
* : GNU General Public License for more details.
|
* : GNU General Public License for more details.
|
||||||
* :
|
* :
|
||||||
* : You should have received a copy of the GNU General Public License
|
* : You should have received a copy of the GNU General Public License
|
||||||
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
@ -70,16 +70,16 @@
|
|||||||
#include "blocks_tree_widget.h"
|
#include "blocks_tree_widget.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef max
|
#ifdef max
|
||||||
#undef max
|
#undef max
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef min
|
#ifdef min
|
||||||
#undef min
|
#undef min
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
@ -136,7 +136,7 @@ EasyTreeWidget::EasyTreeWidget(QWidget* _parent)
|
|||||||
setItemsExpandable(true);
|
setItemsExpandable(true);
|
||||||
setAnimated(true);
|
setAnimated(true);
|
||||||
setSortingEnabled(false);
|
setSortingEnabled(false);
|
||||||
setColumnCount(COL_COLUMNS_NUMBER);
|
setColumnCount(COL_COLUMNS_NUMBER);
|
||||||
|
|
||||||
auto header_item = new QTreeWidgetItem();
|
auto header_item = new QTreeWidgetItem();
|
||||||
auto f = header()->font();
|
auto f = header()->font();
|
||||||
@ -433,8 +433,8 @@ void EasyTreeWidget::clearSilent(bool _global)
|
|||||||
delete item;
|
delete item;
|
||||||
}, ::std::move(topLevelItems));
|
}, ::std::move(topLevelItems));
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
SetThreadPriority(deleter_thread.native_handle(), THREAD_PRIORITY_LOWEST);
|
SetThreadPriority(deleter_thread.native_handle(), THREAD_PRIORITY_LOWEST);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
deleter_thread.detach();
|
deleter_thread.detach();
|
||||||
@ -1087,8 +1087,8 @@ void EasyTreeWidget::loadSettings()
|
|||||||
memcpy(m_columnsHiddenStatus, byteArray.constData(), ::std::min(sizeof(m_columnsHiddenStatus), (size_t)byteArray.size()));
|
memcpy(m_columnsHiddenStatus, byteArray.constData(), ::std::min(sizeof(m_columnsHiddenStatus), (size_t)byteArray.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto state = settings.value("headerState").toByteArray();
|
auto state = settings.value("headerState").toByteArray();
|
||||||
if (!state.isEmpty())
|
if (!state.isEmpty())
|
||||||
header()->restoreState(state);
|
header()->restoreState(state);
|
||||||
|
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
@ -1101,7 +1101,7 @@ void EasyTreeWidget::saveSettings()
|
|||||||
settings.setValue("color_rows", m_bColorRows);
|
settings.setValue("color_rows", m_bColorRows);
|
||||||
settings.setValue("regime", static_cast<uint8_t>(m_mode));
|
settings.setValue("regime", static_cast<uint8_t>(m_mode));
|
||||||
settings.setValue("columns", QByteArray(m_columnsHiddenStatus, COL_COLUMNS_NUMBER));
|
settings.setValue("columns", QByteArray(m_columnsHiddenStatus, COL_COLUMNS_NUMBER));
|
||||||
settings.setValue("headerState", header()->saveState());
|
settings.setValue("headerState", header()->saveState());
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1120,16 +1120,16 @@ EasyHierarchyWidget::EasyHierarchyWidget(QWidget* _parent) : Parent(_parent)
|
|||||||
m_searchBox->setFixedWidth(200);
|
m_searchBox->setFixedWidth(200);
|
||||||
m_searchBox->setContentsMargins(5, 0, 0, 0);
|
m_searchBox->setContentsMargins(5, 0, 0, 0);
|
||||||
|
|
||||||
QMenu* menu = new QMenu(this);
|
QMenu* menu = new QMenu(this);
|
||||||
m_searchButton = menu->menuAction();
|
m_searchButton = menu->menuAction();
|
||||||
m_searchButton->setText("Find next");
|
m_searchButton->setText("Find next");
|
||||||
m_searchButton->setIcon(QIcon(":/Search-next"));
|
m_searchButton->setIcon(QIcon(":/Search-next"));
|
||||||
m_searchButton->setData(true);
|
m_searchButton->setData(true);
|
||||||
connect(m_searchButton, &QAction::triggered, this, &This::findNext);
|
connect(m_searchButton, &QAction::triggered, this, &This::findNext);
|
||||||
|
|
||||||
auto actionGroup = new QActionGroup(this);
|
auto actionGroup = new QActionGroup(this);
|
||||||
actionGroup->setExclusive(true);
|
actionGroup->setExclusive(true);
|
||||||
|
|
||||||
auto a = new QAction(tr("Find next"), actionGroup);
|
auto a = new QAction(tr("Find next"), actionGroup);
|
||||||
a->setCheckable(true);
|
a->setCheckable(true);
|
||||||
a->setChecked(true);
|
a->setChecked(true);
|
||||||
@ -1139,18 +1139,18 @@ EasyHierarchyWidget::EasyHierarchyWidget(QWidget* _parent) : Parent(_parent)
|
|||||||
a = new QAction(tr("Find previous"), actionGroup);
|
a = new QAction(tr("Find previous"), actionGroup);
|
||||||
a->setCheckable(true);
|
a->setCheckable(true);
|
||||||
connect(a, &QAction::triggered, this, &This::findPrevFromMenu);
|
connect(a, &QAction::triggered, this, &This::findPrevFromMenu);
|
||||||
menu->addAction(a);
|
menu->addAction(a);
|
||||||
|
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
a = menu->addAction("Case sensitive");
|
a = menu->addAction("Case sensitive");
|
||||||
a->setCheckable(true);
|
a->setCheckable(true);
|
||||||
a->setChecked(m_bCaseSensitiveSearch);
|
a->setChecked(m_bCaseSensitiveSearch);
|
||||||
connect(a, &QAction::triggered, [this](bool _checked){ m_bCaseSensitiveSearch = _checked; });
|
connect(a, &QAction::triggered, [this](bool _checked){ m_bCaseSensitiveSearch = _checked; });
|
||||||
menu->addAction(a);
|
menu->addAction(a);
|
||||||
|
|
||||||
auto tb = new QToolBar(this);
|
auto tb = new QToolBar(this);
|
||||||
tb->setIconSize(::profiler_gui::ICONS_SIZE);
|
tb->setIconSize(::profiler_gui::ICONS_SIZE);
|
||||||
tb->setContentsMargins(0, 0, 0, 0);
|
tb->setContentsMargins(0, 0, 0, 0);
|
||||||
tb->addAction(m_searchButton);
|
tb->addAction(m_searchButton);
|
||||||
tb->addWidget(m_searchBox);
|
tb->addWidget(m_searchBox);
|
||||||
|
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
* file name : common_types.h
|
* file name : common_types.h
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* creation time : 2016/07/31
|
* creation time : 2016/07/31
|
||||||
* author : Victor Zarubkin
|
* author : Victor Zarubkin
|
||||||
* email : v.s.zarubkin@gmail.com
|
* email : v.s.zarubkin@gmail.com
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* description : The file contains declaration of common types for both GraphicsView
|
* description : The file contains declaration of common types for both GraphicsView
|
||||||
* : and TreeWidget.
|
* : and TreeWidget.
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* change log : * 2016/07/31 Victor Zarubkin: initial commit.
|
* change log : * 2016/07/31 Victor Zarubkin: initial commit.
|
||||||
* :
|
* :
|
||||||
* : *
|
* : *
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* license : Lightweight profiler library for c++
|
* license : Lightweight profiler library for c++
|
||||||
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
||||||
* :
|
* :
|
||||||
@ -26,7 +26,7 @@
|
|||||||
* : GNU General Public License for more details.
|
* : GNU General Public License for more details.
|
||||||
* :
|
* :
|
||||||
* : You should have received a copy of the GNU General Public License
|
* : You should have received a copy of the GNU General Public License
|
||||||
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
#ifndef EASY_PROFILER__GUI_COMMON_TYPES_H
|
#ifndef EASY_PROFILER__GUI_COMMON_TYPES_H
|
||||||
|
@ -12,34 +12,34 @@
|
|||||||
* :
|
* :
|
||||||
* : *
|
* : *
|
||||||
* ----------------- :
|
* ----------------- :
|
||||||
* license : Lightweight profiler library for c++
|
* license : Lightweight profiler library for c++
|
||||||
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
* : Copyright(C) 2016 Sergey Yagovtsev, Victor Zarubkin
|
||||||
* :
|
* :
|
||||||
* :
|
* :
|
||||||
* : Licensed under the Apache License, Version 2.0 (the "License");
|
* : Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* : you may not use this file except in compliance with the License.
|
* : you may not use this file except in compliance with the License.
|
||||||
* : You may obtain a copy of the License at
|
* : You may obtain a copy of the License at
|
||||||
* :
|
* :
|
||||||
* : http://www.apache.org/licenses/LICENSE-2.0
|
* : http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* :
|
* :
|
||||||
* : Unless required by applicable law or agreed to in writing, software
|
* : Unless required by applicable law or agreed to in writing, software
|
||||||
* : distributed under the License is distributed on an "AS IS" BASIS,
|
* : distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* : See the License for the specific language governing permissions and
|
* : See the License for the specific language governing permissions and
|
||||||
* : limitations under the License.
|
* : limitations under the License.
|
||||||
* :
|
* :
|
||||||
* :
|
* :
|
||||||
* : GNU General Public License Usage
|
* : GNU General Public License Usage
|
||||||
* : Alternatively, this file may be used under the terms of the GNU
|
* : Alternatively, this file may be used under the terms of the GNU
|
||||||
* : General Public License as published by the Free Software Foundation,
|
* : General Public License as published by the Free Software Foundation,
|
||||||
* : either version 3 of the License, or (at your option) any later version.
|
* : either version 3 of the License, or (at your option) any later version.
|
||||||
* :
|
* :
|
||||||
* : This program is distributed in the hope that it will be useful,
|
* : This program is distributed in the hope that it will be useful,
|
||||||
* : but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* : but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
* : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
||||||
* : GNU General Public License for more details.
|
* : GNU General Public License for more details.
|
||||||
* :
|
* :
|
||||||
* : You should have received a copy of the GNU General Public License
|
* : You should have received a copy of the GNU General Public License
|
||||||
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
* : along with this program.If not, see <http://www.gnu.org/licenses/>.
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
@ -62,16 +62,16 @@
|
|||||||
#include "descriptors_tree_widget.h"
|
#include "descriptors_tree_widget.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef max
|
#ifdef max
|
||||||
#undef max
|
#undef max
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef min
|
#ifdef min
|
||||||
#undef min
|
#undef min
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
@ -92,23 +92,23 @@ enum DescColumns
|
|||||||
{
|
{
|
||||||
switch (_status)
|
switch (_status)
|
||||||
{
|
{
|
||||||
case ::profiler::OFF:
|
case ::profiler::OFF:
|
||||||
return ::profiler::ON;
|
return ::profiler::ON;
|
||||||
|
|
||||||
case ::profiler::ON:
|
case ::profiler::ON:
|
||||||
return ::profiler::FORCE_ON;
|
return ::profiler::FORCE_ON;
|
||||||
|
|
||||||
case ::profiler::FORCE_ON:
|
case ::profiler::FORCE_ON:
|
||||||
return ::profiler::OFF_RECURSIVE;
|
return ::profiler::OFF_RECURSIVE;
|
||||||
|
|
||||||
case ::profiler::OFF_RECURSIVE:
|
case ::profiler::OFF_RECURSIVE:
|
||||||
return ::profiler::ON_WITHOUT_CHILDREN;
|
return ::profiler::ON_WITHOUT_CHILDREN;
|
||||||
|
|
||||||
case ::profiler::ON_WITHOUT_CHILDREN:
|
case ::profiler::ON_WITHOUT_CHILDREN:
|
||||||
return ::profiler::FORCE_ON_WITHOUT_CHILDREN;
|
return ::profiler::FORCE_ON_WITHOUT_CHILDREN;
|
||||||
|
|
||||||
case ::profiler::FORCE_ON_WITHOUT_CHILDREN:
|
case ::profiler::FORCE_ON_WITHOUT_CHILDREN:
|
||||||
return ::profiler::OFF;
|
return ::profiler::OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ::profiler::OFF;
|
return ::profiler::OFF;
|
||||||
@ -118,23 +118,23 @@ const char* statusText(::profiler::EasyBlockStatus _status)
|
|||||||
{
|
{
|
||||||
switch (_status)
|
switch (_status)
|
||||||
{
|
{
|
||||||
case ::profiler::OFF:
|
case ::profiler::OFF:
|
||||||
return "OFF";
|
return "OFF";
|
||||||
|
|
||||||
case ::profiler::ON:
|
case ::profiler::ON:
|
||||||
return "ON";
|
return "ON";
|
||||||
|
|
||||||
case ::profiler::FORCE_ON:
|
case ::profiler::FORCE_ON:
|
||||||
return "FORCE_ON";
|
return "FORCE_ON";
|
||||||
|
|
||||||
case ::profiler::OFF_RECURSIVE:
|
case ::profiler::OFF_RECURSIVE:
|
||||||
return "OFF_RECURSIVE";
|
return "OFF_RECURSIVE";
|
||||||
|
|
||||||
case ::profiler::ON_WITHOUT_CHILDREN:
|
case ::profiler::ON_WITHOUT_CHILDREN:
|
||||||
return "ON_WITHOUT_CHILDREN";
|
return "ON_WITHOUT_CHILDREN";
|
||||||
|
|
||||||
case ::profiler::FORCE_ON_WITHOUT_CHILDREN:
|
case ::profiler::FORCE_ON_WITHOUT_CHILDREN:
|
||||||
return "FORCE_ON_WITHOUT_CHILDREN";
|
return "FORCE_ON_WITHOUT_CHILDREN";
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
@ -144,23 +144,23 @@ const char* statusText(::profiler::EasyBlockStatus _status)
|
|||||||
{
|
{
|
||||||
switch (_status)
|
switch (_status)
|
||||||
{
|
{
|
||||||
case ::profiler::OFF:
|
case ::profiler::OFF:
|
||||||
return ::profiler::colors::Red900;
|
return ::profiler::colors::Red900;
|
||||||
|
|
||||||
case ::profiler::ON:
|
case ::profiler::ON:
|
||||||
return ::profiler::colors::LightGreen900;
|
return ::profiler::colors::LightGreen900;
|
||||||
|
|
||||||
case ::profiler::FORCE_ON:
|
case ::profiler::FORCE_ON:
|
||||||
return ::profiler::colors::LightGreen900;
|
return ::profiler::colors::LightGreen900;
|
||||||
|
|
||||||
case ::profiler::OFF_RECURSIVE:
|
case ::profiler::OFF_RECURSIVE:
|
||||||
return ::profiler::colors::Red900;
|
return ::profiler::colors::Red900;
|
||||||
|
|
||||||
case ::profiler::ON_WITHOUT_CHILDREN:
|
case ::profiler::ON_WITHOUT_CHILDREN:
|
||||||
return ::profiler::colors::Lime900;
|
return ::profiler::colors::Lime900;
|
||||||
|
|
||||||
case ::profiler::FORCE_ON_WITHOUT_CHILDREN:
|
case ::profiler::FORCE_ON_WITHOUT_CHILDREN:
|
||||||
return ::profiler::colors::Lime900;
|
return ::profiler::colors::Lime900;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ::profiler::colors::Black;
|
return ::profiler::colors::Black;
|
||||||
@ -338,8 +338,8 @@ void EasyDescTreeWidget::clearSilent(bool _global)
|
|||||||
delete item;
|
delete item;
|
||||||
}, ::std::move(topLevelItems));
|
}, ::std::move(topLevelItems));
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
SetThreadPriority(deleter_thread.native_handle(), THREAD_PRIORITY_LOWEST);
|
SetThreadPriority(deleter_thread.native_handle(), THREAD_PRIORITY_LOWEST);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
deleter_thread.detach();
|
deleter_thread.detach();
|
||||||
@ -734,16 +734,16 @@ EasyDescWidget::EasyDescWidget(QWidget* _parent) : Parent(_parent)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
QMenu* menu = new QMenu(this);
|
QMenu* menu = new QMenu(this);
|
||||||
m_searchButton = menu->menuAction();
|
m_searchButton = menu->menuAction();
|
||||||
m_searchButton->setText("Find next");
|
m_searchButton->setText("Find next");
|
||||||
m_searchButton->setIcon(QIcon(":/Search-next"));
|
m_searchButton->setIcon(QIcon(":/Search-next"));
|
||||||
m_searchButton->setData(true);
|
m_searchButton->setData(true);
|
||||||
connect(m_searchButton, &QAction::triggered, this, &This::findNext);
|
connect(m_searchButton, &QAction::triggered, this, &This::findNext);
|
||||||
|
|
||||||
auto actionGroup = new QActionGroup(this);
|
auto actionGroup = new QActionGroup(this);
|
||||||
actionGroup->setExclusive(true);
|
actionGroup->setExclusive(true);
|
||||||
|
|
||||||
auto a = new QAction(tr("Find next"), actionGroup);
|
auto a = new QAction(tr("Find next"), actionGroup);
|
||||||
a->setCheckable(true);
|
a->setCheckable(true);
|
||||||
a->setChecked(true);
|
a->setChecked(true);
|
||||||
@ -753,15 +753,15 @@ EasyDescWidget::EasyDescWidget(QWidget* _parent) : Parent(_parent)
|
|||||||
a = new QAction(tr("Find previous"), actionGroup);
|
a = new QAction(tr("Find previous"), actionGroup);
|
||||||
a->setCheckable(true);
|
a->setCheckable(true);
|
||||||
connect(a, &QAction::triggered, this, &This::findPrevFromMenu);
|
connect(a, &QAction::triggered, this, &This::findPrevFromMenu);
|
||||||
menu->addAction(a);
|
menu->addAction(a);
|
||||||
|
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
a = menu->addAction("Case sensitive");
|
a = menu->addAction("Case sensitive");
|
||||||
a->setCheckable(true);
|
a->setCheckable(true);
|
||||||
a->setChecked(m_bCaseSensitiveSearch);
|
a->setChecked(m_bCaseSensitiveSearch);
|
||||||
connect(a, &QAction::triggered, [this](bool _checked){ m_bCaseSensitiveSearch = _checked; });
|
connect(a, &QAction::triggered, [this](bool _checked){ m_bCaseSensitiveSearch = _checked; });
|
||||||
menu->addAction(a);
|
menu->addAction(a);
|
||||||
|
|
||||||
tb->addSeparator();
|
tb->addSeparator();
|
||||||
tb->addAction(m_searchButton);
|
tb->addAction(m_searchButton);
|
||||||
tb->addWidget(m_searchBox);
|
tb->addWidget(m_searchBox);
|
||||||
|
@ -772,7 +772,7 @@ void EasyHystogramItem::setSource(::profiler::thread_id_t _thread_id, const ::pr
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
const auto& root = EASY_GLOBALS.profiler_blocks[_thread_id];
|
const auto& root = EASY_GLOBALS.profiler_blocks[_thread_id];
|
||||||
m_threadName = ::profiler_gui::decoratedThreadName(EASY_GLOBALS.use_decorated_thread_name, root);
|
m_threadName = ::profiler_gui::decoratedThreadName(EASY_GLOBALS.use_decorated_thread_name, root);
|
||||||
|
|
||||||
if (root.children.empty())
|
if (root.children.empty())
|
||||||
m_threadDuration = 0;
|
m_threadDuration = 0;
|
||||||
|
@ -1,44 +1,44 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 210.002 210.002" style="enable-background:new 0 0 210.002 210.002;" xml:space="preserve">
|
viewBox="0 0 210.002 210.002" style="enable-background:new 0 0 210.002 210.002;" xml:space="preserve">
|
||||||
<path style="fill:#212121;" d="M195.765,76.815l-77.424,11.118l11.119-77.422l19.932,19.931l30.445-30.441l26.439,26.44
|
<path style="fill:#212121;" d="M195.765,76.815l-77.424,11.118l11.119-77.422l19.932,19.931l30.445-30.441l26.439,26.44
|
||||||
l-30.441,30.444L195.765,76.815z"/>
|
l-30.441,30.444L195.765,76.815z"/>
|
||||||
<path style="fill:#212121;" d="M34.168,153.117L3.725,183.563l26.439,26.439l30.445-30.441l19.932,19.93l11.119-77.422
|
<path style="fill:#212121;" d="M34.168,153.117L3.725,183.563l26.439,26.439l30.445-30.441l19.932,19.93l11.119-77.422
|
||||||
l-77.422,11.119L34.168,153.117z"/>
|
l-77.422,11.119L34.168,153.117z"/>
|
||||||
<path style="fill:#f44336;" d="M60.61,30.441L30.164,0L3.725,26.44l30.443,30.444l-19.93,19.931L91.66,87.933L80.541,10.511
|
<path style="fill:#f44336;" d="M60.61,30.441L30.164,0L3.725,26.44l30.443,30.444l-19.93,19.931L91.66,87.933L80.541,10.511
|
||||||
L60.61,30.441z"/>
|
L60.61,30.441z"/>
|
||||||
<path style="fill:#f44336;" d="M195.765,133.188l-77.424-11.119l11.119,77.422l19.932-19.93l30.445,30.441l26.439-26.439l-30.441-30.445
|
<path style="fill:#f44336;" d="M195.765,133.188l-77.424-11.119l11.119,77.422l19.932-19.93l30.445,30.441l26.439-26.439l-30.441-30.445
|
||||||
L195.765,133.188z"/>
|
L195.765,133.188z"/>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@ -1,59 +1,59 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 441.902 441.902" style="enable-background:new 0 0 441.902 441.902;" xml:space="preserve">
|
viewBox="0 0 441.902 441.902" style="enable-background:new 0 0 441.902 441.902;" xml:space="preserve">
|
||||||
<path style="fill:#212121;" d="M372.231,170.869c-4.097-2.365-8.303-4.509-12.595-6.438c0.471-4.651,0.713-9.369,0.713-14.143
|
<path style="fill:#212121;" d="M372.231,170.869c-4.097-2.365-8.303-4.509-12.595-6.438c0.471-4.651,0.713-9.369,0.713-14.143
|
||||||
c0-76.864-62.534-139.397-139.397-139.397S81.553,73.425,81.553,150.289c0,4.773,0.242,9.492,0.713,14.143
|
c0-76.864-62.534-139.397-139.397-139.397S81.553,73.425,81.553,150.289c0,4.773,0.242,9.492,0.713,14.143
|
||||||
c-4.293,1.929-8.499,4.073-12.595,6.438C3.105,209.302-19.783,294.724,18.648,361.29c24.829,43.005,71.133,69.721,120.843,69.721
|
c-4.293,1.929-8.499,4.073-12.595,6.438C3.105,209.302-19.783,294.724,18.648,361.29c24.829,43.005,71.133,69.721,120.843,69.721
|
||||||
c24.332,0,48.392-6.466,69.578-18.698c4.114-2.375,8.076-4.939,11.882-7.675c3.806,2.736,7.768,5.3,11.882,7.675
|
c24.332,0,48.392-6.466,69.578-18.698c4.114-2.375,8.076-4.939,11.882-7.675c3.806,2.736,7.768,5.3,11.882,7.675
|
||||||
c21.187,12.232,45.246,18.698,69.578,18.698c49.709,0,96.014-26.715,120.843-69.721
|
c21.187,12.232,45.246,18.698,69.578,18.698c49.709,0,96.014-26.715,120.843-69.721
|
||||||
C461.685,294.724,438.797,209.302,372.231,170.869z M101.553,150.289c0-65.836,53.562-119.397,119.397-119.397
|
C461.685,294.724,438.797,209.302,372.231,170.869z M101.553,150.289c0-65.836,53.562-119.397,119.397-119.397
|
||||||
s119.397,53.562,119.397,119.397c0,2.377-0.078,4.735-0.216,7.078c-12.175-3.419-24.788-5.194-37.48-5.194
|
s119.397,53.562,119.397,119.397c0,2.377-0.078,4.735-0.216,7.078c-12.175-3.419-24.788-5.194-37.48-5.194
|
||||||
c-29.746,0-58.267,9.573-81.702,26.471c-23.435-16.898-51.956-26.471-81.702-26.471c-12.692,0-25.306,1.775-37.48,5.194
|
c-29.746,0-58.267,9.573-81.702,26.471c-23.435-16.898-51.956-26.471-81.702-26.471c-12.692,0-25.306,1.775-37.48,5.194
|
||||||
C101.631,155.024,101.553,152.665,101.553,150.289z M254.699,322.493c-5.869,21.903-17.558,41.245-33.749,56.329
|
C101.631,155.024,101.553,152.665,101.553,150.289z M254.699,322.493c-5.869,21.903-17.558,41.245-33.749,56.329
|
||||||
c-16.191-15.084-27.88-34.426-33.749-56.329c-3.367-12.566-4.654-25.361-3.917-37.981c11.986,3.368,24.618,5.174,37.666,5.174
|
c-16.191-15.084-27.88-34.426-33.749-56.329c-3.367-12.566-4.654-25.361-3.917-37.981c11.986,3.368,24.618,5.174,37.666,5.174
|
||||||
s25.68-1.807,37.666-5.174C259.353,297.133,258.066,309.927,254.699,322.493z M220.951,269.687c-12.088,0-23.76-1.812-34.765-5.168
|
s25.68-1.807,37.666-5.174C259.353,297.133,258.066,309.927,254.699,322.493z M220.951,269.687c-12.088,0-23.76-1.812-34.765-5.168
|
||||||
c2.646-11.307,6.974-22.286,12.945-32.627c5.947-10.3,13.335-19.508,21.82-27.431c8.486,7.923,15.873,17.13,21.82,27.431
|
c2.646-11.307,6.974-22.286,12.945-32.627c5.947-10.3,13.335-19.508,21.82-27.431c8.486,7.923,15.873,17.13,21.82,27.431
|
||||||
c5.97,10.34,10.298,21.32,12.945,32.627C244.711,267.875,233.039,269.687,220.951,269.687z M167.433,256.999
|
c5.97,10.34,10.298,21.32,12.945,32.627C244.711,267.875,233.039,269.687,220.951,269.687z M167.433,256.999
|
||||||
c-31.244-15.733-54.677-44.784-62.787-79.655c11.197-3.412,22.864-5.173,34.603-5.173c23.75,0,46.588,7.124,65.837,19.809
|
c-31.244-15.733-54.677-44.784-62.787-79.655c11.197-3.412,22.864-5.173,34.603-5.173c23.75,0,46.588,7.124,65.837,19.809
|
||||||
c-8.984,8.764-16.853,18.787-23.276,29.911C175.367,233.053,170.564,244.851,167.433,256.999z M260.092,221.892
|
c-8.984,8.764-16.853,18.787-23.276,29.911C175.367,233.053,170.564,244.851,167.433,256.999z M260.092,221.892
|
||||||
c-6.423-11.124-14.292-21.147-23.276-29.911c19.249-12.685,42.087-19.809,65.837-19.809c11.738,0,23.405,1.761,34.603,5.173
|
c-6.423-11.124-14.292-21.147-23.276-29.911c19.249-12.685,42.087-19.809,65.837-19.809c11.738,0,23.405,1.761,34.603,5.173
|
||||||
c-8.109,34.87-31.543,63.921-62.787,79.655C271.338,244.851,266.535,233.053,260.092,221.892z M199.069,394.992
|
c-8.109,34.87-31.543,63.921-62.787,79.655C271.338,244.851,266.535,233.053,260.092,221.892z M199.069,394.992
|
||||||
c-18.15,10.479-38.752,16.018-59.578,16.018c-42.587,0-82.254-22.884-103.522-59.721c-32.917-57.015-13.313-130.182,43.703-163.1
|
c-18.15,10.479-38.752,16.018-59.578,16.018c-42.587,0-82.254-22.884-103.522-59.721c-32.917-57.015-13.313-130.182,43.703-163.1
|
||||||
c2.042-1.179,4.12-2.286,6.221-3.34c10.581,41.328,39.68,75.319,77.896,92.57c-1.692,16.636-0.362,33.614,4.096,50.25
|
c2.042-1.179,4.12-2.286,6.221-3.34c10.581,41.328,39.68,75.319,77.896,92.57c-1.692,16.636-0.362,33.614,4.096,50.25
|
||||||
c6.578,24.55,19.418,46.345,37.159,63.631C203.094,392.581,201.106,393.817,199.069,394.992z M405.933,351.29
|
c6.578,24.55,19.418,46.345,37.159,63.631C203.094,392.581,201.106,393.817,199.069,394.992z M405.933,351.29
|
||||||
c-21.268,36.837-60.936,59.721-103.522,59.721c-20.826,0-41.428-5.539-59.578-16.018c-2.036-1.176-4.024-2.411-5.974-3.691
|
c-21.268,36.837-60.936,59.721-103.522,59.721c-20.826,0-41.428-5.539-59.578-16.018c-2.036-1.176-4.024-2.411-5.974-3.691
|
||||||
c17.741-17.286,30.581-39.081,37.159-63.631c4.458-16.636,5.788-33.614,4.096-50.25c38.216-17.251,67.315-51.242,77.896-92.57
|
c17.741-17.286,30.581-39.081,37.159-63.631c4.458-16.636,5.788-33.614,4.096-50.25c38.216-17.251,67.315-51.242,77.896-92.57
|
||||||
c2.101,1.053,4.179,2.16,6.221,3.34C419.246,221.108,438.851,294.275,405.933,351.29z"/>
|
c2.101,1.053,4.179,2.16,6.221,3.34C419.246,221.108,438.851,294.275,405.933,351.29z"/>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.1 KiB |
@ -1,73 +1,73 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 297 297" style="enable-background:new 0 0 297 297;" xml:space="preserve">
|
viewBox="0 0 297 297" style="enable-background:new 0 0 297 297;" xml:space="preserve">
|
||||||
<g id="XMLID_28_">
|
<g id="XMLID_28_">
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M233.51,115.94c36.58,10.3,63.49,43.94,63.49,83.78c0,47.99-39.04,87.04-87.04,87.04c-23.97,0-45.7-9.74-61.46-25.47
|
<path style="fill:#212121;" d="M233.51,115.94c36.58,10.3,63.49,43.94,63.49,83.78c0,47.99-39.04,87.04-87.04,87.04c-23.97,0-45.7-9.74-61.46-25.47
|
||||||
c-15.75,15.73-37.49,25.47-61.46,25.47C39.05,286.76,0,247.71,0,199.72c0-39.84,26.91-73.48,63.5-83.78
|
c-15.75,15.73-37.49,25.47-61.46,25.47C39.05,286.76,0,247.71,0,199.72c0-39.84,26.91-73.48,63.5-83.78
|
||||||
c-1.32-6.01-2.04-12.25-2.04-18.66c0-47.99,39.05-87.04,87.04-87.04c48,0,87.04,39.05,87.04,87.04
|
c-1.32-6.01-2.04-12.25-2.04-18.66c0-47.99,39.05-87.04,87.04-87.04c48,0,87.04,39.05,87.04,87.04
|
||||||
C235.54,103.69,234.83,109.93,233.51,115.94z M286.82,199.72c0-35.18-23.77-64.89-56.08-73.98c-9.28,26.75-31.26,47.6-58.69,55.32
|
C235.54,103.69,234.83,109.93,233.51,115.94z M286.82,199.72c0-35.18-23.77-64.89-56.08-73.98c-9.28,26.75-31.26,47.6-58.69,55.32
|
||||||
c1.32,6.01,2.03,12.25,2.03,18.66c0,20.36-7.04,39.09-18.8,53.93c13.94,14.14,33.3,22.92,54.68,22.92
|
c1.32,6.01,2.03,12.25,2.03,18.66c0,20.36-7.04,39.09-18.8,53.93c13.94,14.14,33.3,22.92,54.68,22.92
|
||||||
C252.34,276.57,286.82,242.1,286.82,199.72z M223.56,113.75c1.17-5.31,1.8-10.81,1.8-16.47c0-42.38-34.48-76.85-76.86-76.85
|
C252.34,276.57,286.82,242.1,286.82,199.72z M223.56,113.75c1.17-5.31,1.8-10.81,1.8-16.47c0-42.38-34.48-76.85-76.86-76.85
|
||||||
S71.65,54.9,71.65,97.28c0,5.66,0.63,11.16,1.79,16.47c4.44-0.7,8.98-1.07,13.6-1.07c23.97,0,45.71,9.74,61.46,25.47
|
S71.65,54.9,71.65,97.28c0,5.66,0.63,11.16,1.79,16.47c4.44-0.7,8.98-1.07,13.6-1.07c23.97,0,45.71,9.74,61.46,25.47
|
||||||
c15.76-15.73,37.49-25.47,61.46-25.47C214.59,112.68,219.13,113.05,223.56,113.75z M220.71,123.63c-3.52-0.5-7.1-0.77-10.75-0.77
|
c15.76-15.73,37.49-25.47,61.46-25.47C214.59,112.68,219.13,113.05,223.56,113.75z M220.71,123.63c-3.52-0.5-7.1-0.77-10.75-0.77
|
||||||
c-21.38,0-40.74,8.78-54.68,22.92c6,7.58,10.77,16.17,14,25.48C193.1,164.56,212.27,146.67,220.71,123.63z M163.9,199.72
|
c-21.38,0-40.74,8.78-54.68,22.92c6,7.58,10.77,16.17,14,25.48C193.1,164.56,212.27,146.67,220.71,123.63z M163.9,199.72
|
||||||
c0-5.66-0.63-11.16-1.8-16.47c-4.43,0.7-8.97,1.07-13.6,1.07c-4.62,0-9.16-0.37-13.6-1.07c-1.16,5.31-1.79,10.81-1.79,16.47
|
c0-5.66-0.63-11.16-1.8-16.47c-4.43,0.7-8.97,1.07-13.6,1.07c-4.62,0-9.16-0.37-13.6-1.07c-1.16,5.31-1.79,10.81-1.79,16.47
|
||||||
c0,17.27,5.73,33.24,15.39,46.09C158.16,232.96,163.9,216.99,163.9,199.72z M159.24,173.37c-2.61-7.13-6.25-13.77-10.74-19.74
|
c0,17.27,5.73,33.24,15.39,46.09C158.16,232.96,163.9,216.99,163.9,199.72z M159.24,173.37c-2.61-7.13-6.25-13.77-10.74-19.74
|
||||||
c-4.49,5.97-8.13,12.61-10.74,19.74c3.51,0.5,7.1,0.77,10.74,0.77C152.15,174.14,155.73,173.87,159.24,173.37z M127.73,171.26
|
c-4.49,5.97-8.13,12.61-10.74,19.74c3.51,0.5,7.1,0.77,10.74,0.77C152.15,174.14,155.73,173.87,159.24,173.37z M127.73,171.26
|
||||||
c3.23-9.31,7.99-17.9,14-25.48c-13.95-14.14-33.31-22.92-54.69-22.92c-3.64,0-7.23,0.27-10.74,0.77
|
c3.23-9.31,7.99-17.9,14-25.48c-13.95-14.14-33.31-22.92-54.69-22.92c-3.64,0-7.23,0.27-10.74,0.77
|
||||||
C84.73,146.67,103.91,164.56,127.73,171.26z M141.73,253.65c-11.76-14.84-18.81-33.57-18.81-53.93c0-6.41,0.72-12.65,2.04-18.66
|
C84.73,146.67,103.91,164.56,127.73,171.26z M141.73,253.65c-11.76-14.84-18.81-33.57-18.81-53.93c0-6.41,0.72-12.65,2.04-18.66
|
||||||
c-27.44-7.72-49.41-28.57-58.69-55.32c-32.32,9.09-56.08,38.8-56.08,73.98c0,42.38,34.47,76.85,76.85,76.85
|
c-27.44-7.72-49.41-28.57-58.69-55.32c-32.32,9.09-56.08,38.8-56.08,73.98c0,42.38,34.47,76.85,76.85,76.85
|
||||||
C108.42,276.57,127.78,267.79,141.73,253.65z"/>
|
C108.42,276.57,127.78,267.79,141.73,253.65z"/>
|
||||||
<path style="fill:#3498DB;" d="M230.74,125.74c32.31,9.09,56.08,38.8,56.08,73.98c0,42.38-34.48,76.85-76.86,76.85
|
<path style="fill:#3498DB;" d="M230.74,125.74c32.31,9.09,56.08,38.8,56.08,73.98c0,42.38-34.48,76.85-76.86,76.85
|
||||||
c-21.38,0-40.74-8.78-54.68-22.92c11.76-14.84,18.8-33.57,18.8-53.93c0-6.41-0.71-12.65-2.03-18.66
|
c-21.38,0-40.74-8.78-54.68-22.92c11.76-14.84,18.8-33.57,18.8-53.93c0-6.41-0.71-12.65-2.03-18.66
|
||||||
C199.48,173.34,221.46,152.49,230.74,125.74z"/>
|
C199.48,173.34,221.46,152.49,230.74,125.74z"/>
|
||||||
<path style="fill:#D35400;" d="M225.36,97.28c0,5.66-0.63,11.16-1.8,16.47c-4.43-0.7-8.97-1.07-13.6-1.07
|
<path style="fill:#D35400;" d="M225.36,97.28c0,5.66-0.63,11.16-1.8,16.47c-4.43-0.7-8.97-1.07-13.6-1.07
|
||||||
c-23.97,0-45.7,9.74-61.46,25.47c-15.75-15.73-37.49-25.47-61.46-25.47c-4.62,0-9.16,0.37-13.6,1.07
|
c-23.97,0-45.7,9.74-61.46,25.47c-15.75-15.73-37.49-25.47-61.46-25.47c-4.62,0-9.16,0.37-13.6,1.07
|
||||||
c-1.16-5.31-1.79-10.81-1.79-16.47c0-42.38,34.47-76.85,76.85-76.85S225.36,54.9,225.36,97.28z"/>
|
c-1.16-5.31-1.79-10.81-1.79-16.47c0-42.38,34.47-76.85,76.85-76.85S225.36,54.9,225.36,97.28z"/>
|
||||||
<path style="fill:#5E345E;" d="M209.96,122.86c3.65,0,7.23,0.27,10.75,0.77c-8.44,23.04-27.61,40.93-51.43,47.63
|
<path style="fill:#5E345E;" d="M209.96,122.86c3.65,0,7.23,0.27,10.75,0.77c-8.44,23.04-27.61,40.93-51.43,47.63
|
||||||
c-3.23-9.31-8-17.9-14-25.48C169.22,131.64,188.58,122.86,209.96,122.86z"/>
|
c-3.23-9.31-8-17.9-14-25.48C169.22,131.64,188.58,122.86,209.96,122.86z"/>
|
||||||
<path style="fill:#1ABC9C;" d="M162.1,183.25c1.17,5.31,1.8,10.81,1.8,16.47c0,17.27-5.74,33.24-15.4,46.09
|
<path style="fill:#1ABC9C;" d="M162.1,183.25c1.17,5.31,1.8,10.81,1.8,16.47c0,17.27-5.74,33.24-15.4,46.09
|
||||||
c-9.66-12.85-15.39-28.82-15.39-46.09c0-5.66,0.63-11.16,1.79-16.47c4.44,0.7,8.98,1.07,13.6,1.07
|
c-9.66-12.85-15.39-28.82-15.39-46.09c0-5.66,0.63-11.16,1.79-16.47c4.44,0.7,8.98,1.07,13.6,1.07
|
||||||
C153.13,184.32,157.67,183.95,162.1,183.25z"/>
|
C153.13,184.32,157.67,183.95,162.1,183.25z"/>
|
||||||
<path style="fill:#503B2C;" d="M148.5,153.63c4.49,5.97,8.13,12.61,10.74,19.74c-3.51,0.5-7.09,0.77-10.74,0.77
|
<path style="fill:#503B2C;" d="M148.5,153.63c4.49,5.97,8.13,12.61,10.74,19.74c-3.51,0.5-7.09,0.77-10.74,0.77
|
||||||
c-3.64,0-7.23-0.27-10.74-0.77C140.37,166.24,144.01,159.6,148.5,153.63z"/>
|
c-3.64,0-7.23-0.27-10.74-0.77C140.37,166.24,144.01,159.6,148.5,153.63z"/>
|
||||||
<path style="fill:#FFA800;" d="M141.73,145.78c-6.01,7.58-10.77,16.17-14,25.48c-23.82-6.7-43-24.59-51.43-47.63
|
<path style="fill:#FFA800;" d="M141.73,145.78c-6.01,7.58-10.77,16.17-14,25.48c-23.82-6.7-43-24.59-51.43-47.63
|
||||||
c3.51-0.5,7.1-0.77,10.74-0.77C108.42,122.86,127.78,131.64,141.73,145.78z"/>
|
c3.51-0.5,7.1-0.77,10.74-0.77C108.42,122.86,127.78,131.64,141.73,145.78z"/>
|
||||||
<path style="fill:#FFCD02;" d="M122.92,199.72c0,20.36,7.05,39.09,18.81,53.93c-13.95,14.14-33.31,22.92-54.69,22.92
|
<path style="fill:#FFCD02;" d="M122.92,199.72c0,20.36,7.05,39.09,18.81,53.93c-13.95,14.14-33.31,22.92-54.69,22.92
|
||||||
c-42.38,0-76.85-34.47-76.85-76.85c0-35.18,23.76-64.89,56.08-73.98c9.28,26.75,31.25,47.6,58.69,55.32
|
c-42.38,0-76.85-34.47-76.85-76.85c0-35.18,23.76-64.89,56.08-73.98c9.28,26.75,31.25,47.6,58.69,55.32
|
||||||
C123.64,187.07,122.92,193.31,122.92,199.72z"/>
|
C123.64,187.07,122.92,193.31,122.92,199.72z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 3.9 KiB |
@ -1,45 +1,45 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 443 443" style="enable-background:new 0 0 443 443;" xml:space="preserve">
|
viewBox="0 0 443 443" style="enable-background:new 0 0 443 443;" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<rect x="61.785" y="128" width="60" height="290"/>
|
<rect x="61.785" y="128" width="60" height="290"/>
|
||||||
<path style="fill:#212121;" d="M211.785,250.65V128h-60v290h44.172c-14.861-21.067-23.602-46.746-23.602-74.43
|
<path style="fill:#212121;" d="M211.785,250.65V128h-60v290h44.172c-14.861-21.067-23.602-46.746-23.602-74.43
|
||||||
C172.356,307.145,187.486,274.193,211.785,250.65z"/>
|
C172.356,307.145,187.486,274.193,211.785,250.65z"/>
|
||||||
<path style="fill:#212121;" d="M301.785,214.141l0-86.141h-60v100.918C259.731,219.488,280.144,214.141,301.785,214.141z"/>
|
<path style="fill:#212121;" d="M301.785,214.141l0-86.141h-60v100.918C259.731,219.488,280.144,214.141,301.785,214.141z"/>
|
||||||
<path style="fill:#212121;" d="M321.785,38h-83.384V0H125.169v38H41.785v60h280V38z M155.169,30h53.232v8h-53.232V30z"/>
|
<path style="fill:#212121;" d="M321.785,38h-83.384V0H125.169v38H41.785v60h280V38z M155.169,30h53.232v8h-53.232V30z"/>
|
||||||
<path style="fill:#f44336;" d="M301.785,244.141c-54.826,0-99.429,44.604-99.429,99.429S246.959,443,301.785,443s99.43-44.604,99.43-99.43
|
<path style="fill:#f44336;" d="M301.785,244.141c-54.826,0-99.429,44.604-99.429,99.429S246.959,443,301.785,443s99.43-44.604,99.43-99.43
|
||||||
S356.611,244.141,301.785,244.141z M355.961,376.533l-21.213,21.213l-32.963-32.963l-32.963,32.963l-21.213-21.213l32.963-32.963
|
S356.611,244.141,301.785,244.141z M355.961,376.533l-21.213,21.213l-32.963-32.963l-32.963,32.963l-21.213-21.213l32.963-32.963
|
||||||
l-32.963-32.963l21.213-21.213l32.963,32.963l32.963-32.963l21.213,21.213l-32.963,32.963L355.961,376.533z"/>
|
l-32.963-32.963l21.213-21.213l32.963,32.963l32.963-32.963l21.213,21.213l-32.963,32.963L355.961,376.533z"/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@ -1,43 +1,43 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 210 210" style="enable-background:new 0 0 210 210;" xml:space="preserve">
|
viewBox="0 0 210 210" style="enable-background:new 0 0 210 210;" xml:space="preserve">
|
||||||
<path style="fill:#f44336;" d="M34.774,152.509l26.441,26.442l19.93,19.931L3.724,210l11.119-77.422L34.774,152.509z"/>
|
<path style="fill:#f44336;" d="M34.774,152.509l26.441,26.442l19.93,19.931L3.724,210l11.119-77.422L34.774,152.509z"/>
|
||||||
<path style="fill:#212121;" d="M175.226,152.509l-30.445-30.441l-26.44,26.439l30.441,30.444l-19.93,19.931L206.276,210l-11.119-77.422L175.226,152.509z"/>
|
<path style="fill:#212121;" d="M175.226,152.509l-30.445-30.441l-26.44,26.439l30.441,30.444l-19.93,19.931L206.276,210l-11.119-77.422L175.226,152.509z"/>
|
||||||
<path style="fill:#f44336;" d="M65.22,122.067l26.439,26.439l-30.443,30.444l-26.441-26.442L65.22,122.067z"/>
|
<path style="fill:#f44336;" d="M65.22,122.067l26.439,26.439l-30.443,30.444l-26.441-26.442L65.22,122.067z"/>
|
||||||
<path style="fill:#212121;" d="M61.216,31.049l30.443,30.444L65.22,87.933
|
<path style="fill:#212121;" d="M61.216,31.049l30.443,30.444L65.22,87.933
|
||||||
L34.774,57.491L14.843,77.422L3.724,0l77.422,11.118L61.216,31.049z"/>
|
L34.774,57.491L14.843,77.422L3.724,0l77.422,11.118L61.216,31.049z"/>
|
||||||
<path style="fill:#f44336;" d="M118.341,61.493l30.441-30.444l-19.93-19.931L206.276,0
|
<path style="fill:#f44336;" d="M118.341,61.493l30.441-30.444l-19.93-19.931L206.276,0
|
||||||
l-11.119,77.422l-19.932-19.931L144.78,87.933L118.341,61.493z"/>
|
l-11.119,77.422l-19.932-19.931L144.78,87.933L118.341,61.493z"/>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
@ -1,58 +1,58 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 94.414 94.414" style="enable-background:new 0 0 94.414 94.414;" xml:space="preserve">
|
viewBox="0 0 94.414 94.414" style="enable-background:new 0 0 94.414 94.414;" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M86.522,60.468v-3.16V38.34V19.372c0-1.736-1.421-3.16-3.164-3.16H36.25v2.827h43.068
|
<path style="fill:#212121;" d="M86.522,60.468v-3.16V38.34V19.372c0-1.736-1.421-3.16-3.164-3.16H36.25v2.827h43.068
|
||||||
c1.514,0,2.759,1.242,2.759,2.759v33.069c0,1.525-1.245,2.759-2.759,2.759H24.179c-0.229,0-0.433-0.075-0.648-0.132v17.196h66.144
|
c1.514,0,2.759,1.242,2.759,2.759v33.069c0,1.525-1.245,2.759-2.759,2.759H24.179c-0.229,0-0.433-0.075-0.648-0.132v17.196h66.144
|
||||||
c2.616,0,4.738-2.126,4.738-4.746L86.522,60.468z M58.07,73.112H45.426c-0.437,0-0.791-0.351-0.791-0.791
|
c2.616,0,4.738-2.126,4.738-4.746L86.522,60.468z M58.07,73.112H45.426c-0.437,0-0.791-0.351-0.791-0.791
|
||||||
c0-0.44,0.354-0.791,0.791-0.791H58.07c0.44,0,0.791,0.351,0.791,0.791C58.861,72.762,58.511,73.112,58.07,73.112z M38.716,69.952
|
c0-0.44,0.354-0.791,0.791-0.791H58.07c0.44,0,0.791,0.351,0.791,0.791C58.861,72.762,58.511,73.112,58.07,73.112z M38.716,69.952
|
||||||
l2.412-2.895h21.237l2.416,2.895H38.716z"/>
|
l2.412-2.895h21.237l2.416,2.895H38.716z"/>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M31.92,42.935H0V14.258c0-1.793,1.453-3.246,3.246-3.246c1.793,0,3.246,1.453,3.246,3.246v22.178
|
<path style="fill:#212121;" d="M31.92,42.935H0V14.258c0-1.793,1.453-3.246,3.246-3.246c1.793,0,3.246,1.453,3.246,3.246v22.178
|
||||||
h18.936V14.258c0-1.793,1.453-3.246,3.246-3.246c1.789,0,3.246,1.453,3.246,3.246C31.92,14.258,31.92,42.935,31.92,42.935z"/>
|
h18.936V14.258c0-1.793,1.453-3.246,3.246-3.246c1.789,0,3.246,1.453,3.246,3.246C31.92,14.258,31.92,42.935,31.92,42.935z"/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#f44336;" d="M12.712,31.784V14.262c0-1.793,1.453-3.246,3.246-3.246s3.246,1.453,3.246,3.246v17.522H12.712z"
|
<path style="fill:#f44336;" d="M12.712,31.784V14.262c0-1.793,1.453-3.246,3.246-3.246s3.246,1.453,3.246,3.246v17.522H12.712z"
|
||||||
/>
|
/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#f44336;" d="M15.962,83.402c-1.793,0-3.246-1.446-3.246-3.242V47.595h6.492v32.564
|
<path style="fill:#f44336;" d="M15.962,83.402c-1.793,0-3.246-1.446-3.246-3.242V47.595h6.492v32.564
|
||||||
C19.208,81.949,17.755,83.402,15.962,83.402z"/>
|
C19.208,81.949,17.755,83.402,15.962,83.402z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
@ -1,58 +1,58 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 94.414 94.414" style="enable-background:new 0 0 94.414 94.414;" xml:space="preserve">
|
viewBox="0 0 94.414 94.414" style="enable-background:new 0 0 94.414 94.414;" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M86.522,60.468v-3.16V38.34V19.372c0-1.736-1.421-3.16-3.164-3.16H36.25v2.827h43.068
|
<path style="fill:#212121;" d="M86.522,60.468v-3.16V38.34V19.372c0-1.736-1.421-3.16-3.164-3.16H36.25v2.827h43.068
|
||||||
c1.514,0,2.759,1.242,2.759,2.759v33.069c0,1.525-1.245,2.759-2.759,2.759H24.179c-0.229,0-0.433-0.075-0.648-0.132v17.196h66.144
|
c1.514,0,2.759,1.242,2.759,2.759v33.069c0,1.525-1.245,2.759-2.759,2.759H24.179c-0.229,0-0.433-0.075-0.648-0.132v17.196h66.144
|
||||||
c2.616,0,4.738-2.126,4.738-4.746L86.522,60.468z M58.07,73.112H45.426c-0.437,0-0.791-0.351-0.791-0.791
|
c2.616,0,4.738-2.126,4.738-4.746L86.522,60.468z M58.07,73.112H45.426c-0.437,0-0.791-0.351-0.791-0.791
|
||||||
c0-0.44,0.354-0.791,0.791-0.791H58.07c0.44,0,0.791,0.351,0.791,0.791C58.861,72.762,58.511,73.112,58.07,73.112z M38.716,69.952
|
c0-0.44,0.354-0.791,0.791-0.791H58.07c0.44,0,0.791,0.351,0.791,0.791C58.861,72.762,58.511,73.112,58.07,73.112z M38.716,69.952
|
||||||
l2.412-2.895h21.237l2.416,2.895H38.716z"/>
|
l2.412-2.895h21.237l2.416,2.895H38.716z"/>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M31.92,42.935H0V14.258c0-1.793,1.453-3.246,3.246-3.246c1.793,0,3.246,1.453,3.246,3.246v22.178
|
<path style="fill:#212121;" d="M31.92,42.935H0V14.258c0-1.793,1.453-3.246,3.246-3.246c1.793,0,3.246,1.453,3.246,3.246v22.178
|
||||||
h18.936V14.258c0-1.793,1.453-3.246,3.246-3.246c1.789,0,3.246,1.453,3.246,3.246C31.92,14.258,31.92,42.935,31.92,42.935z"/>
|
h18.936V14.258c0-1.793,1.453-3.246,3.246-3.246c1.789,0,3.246,1.453,3.246,3.246C31.92,14.258,31.92,42.935,31.92,42.935z"/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#4caf50;" d="M12.712,31.784V14.262c0-1.793,1.453-3.246,3.246-3.246s3.246,1.453,3.246,3.246v17.522H12.712z"
|
<path style="fill:#4caf50;" d="M12.712,31.784V14.262c0-1.793,1.453-3.246,3.246-3.246s3.246,1.453,3.246,3.246v17.522H12.712z"
|
||||||
/>
|
/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#4caf50;" d="M15.962,83.402c-1.793,0-3.246-1.446-3.246-3.242V47.595h6.492v32.564
|
<path style="fill:#4caf50;" d="M15.962,83.402c-1.793,0-3.246-1.446-3.246-3.242V47.595h6.492v32.564
|
||||||
C19.208,81.949,17.755,83.402,15.962,83.402z"/>
|
C19.208,81.949,17.755,83.402,15.962,83.402z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
@ -1,63 +1,63 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
width="485.69px" height="485.69px" viewBox="0 0 485.69 485.69" style="enable-background:new 0 0 485.69 485.69;"
|
width="485.69px" height="485.69px" viewBox="0 0 485.69 485.69" style="enable-background:new 0 0 485.69 485.69;"
|
||||||
xml:space="preserve">
|
xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M410.428,34.738h-76.405l5.155,23.852c0.634,2.961,0.603,5.934,0.271,8.859h54.621V452.98H91.588V67.449h54.637
|
<path style="fill:#212121;" d="M410.428,34.738h-76.405l5.155,23.852c0.634,2.961,0.603,5.934,0.271,8.859h54.621V452.98H91.588V67.449h54.637
|
||||||
c-0.332-2.941-0.348-5.914,0.285-8.891l5.156-23.82H75.248c-9.031,0-16.34,7.324-16.34,16.354v418.243
|
c-0.332-2.941-0.348-5.914,0.285-8.891l5.156-23.82H75.248c-9.031,0-16.34,7.324-16.34,16.354v418.243
|
||||||
c0,9.016,7.309,16.354,16.34,16.354h335.18c9.031,0,16.354-7.341,16.354-16.354V51.093
|
c0,9.016,7.309,16.354,16.34,16.354h335.18c9.031,0,16.354-7.341,16.354-16.354V51.093
|
||||||
C426.783,42.062,419.459,34.738,410.428,34.738z"/>
|
C426.783,42.062,419.459,34.738,410.428,34.738z"/>
|
||||||
<path style="fill:#212121;" d="M355.568,152.949h-111.71c-9.047,0-16.355,7.324-16.355,16.34c0,9.035,7.309,16.355,16.355,16.355h111.71
|
<path style="fill:#212121;" d="M355.568,152.949h-111.71c-9.047,0-16.355,7.324-16.355,16.34c0,9.035,7.309,16.355,16.355,16.355h111.71
|
||||||
c9.047,0,16.354-7.32,16.354-16.355C371.924,160.273,364.615,152.949,355.568,152.949z"/>
|
c9.047,0,16.354-7.32,16.354-16.355C371.924,160.273,364.615,152.949,355.568,152.949z"/>
|
||||||
<path style="fill:#212121;" d="M355.568,253.254h-111.71c-9.047,0-16.355,7.323-16.355,16.354c0,9.021,7.309,16.357,16.355,16.357h111.71
|
<path style="fill:#212121;" d="M355.568,253.254h-111.71c-9.047,0-16.355,7.323-16.355,16.354c0,9.021,7.309,16.357,16.355,16.357h111.71
|
||||||
c9.047,0,16.354-7.34,16.354-16.357C371.924,260.577,364.615,253.254,355.568,253.254z"/>
|
c9.047,0,16.354-7.34,16.354-16.357C371.924,260.577,364.615,253.254,355.568,253.254z"/>
|
||||||
<path style="fill:#f44336;" d="M119.556,156.792c-6.898,5.82-7.786,16.137-1.965,23.047l23.855,28.27c3.117,3.699,7.688,5.805,12.496,5.805
|
<path style="fill:#f44336;" d="M119.556,156.792c-6.898,5.82-7.786,16.137-1.965,23.047l23.855,28.27c3.117,3.699,7.688,5.805,12.496,5.805
|
||||||
c0.398,0,0.792-0.016,1.203-0.047c5.219-0.379,9.949-3.258,12.703-7.719l42.914-69.477c4.746-7.688,2.375-17.75-5.312-22.492
|
c0.398,0,0.792-0.016,1.203-0.047c5.219-0.379,9.949-3.258,12.703-7.719l42.914-69.477c4.746-7.688,2.375-17.75-5.312-22.492
|
||||||
c-7.688-4.777-17.75-2.375-22.497,5.313l-31.066,50.273l-9.301-11.012C136.763,151.843,126.467,150.956,119.556,156.792z"/>
|
c-7.688-4.777-17.75-2.375-22.497,5.313l-31.066,50.273l-9.301-11.012C136.763,151.843,126.467,150.956,119.556,156.792z"/>
|
||||||
<path style="fill:#212121;" d="M158.72,245.094c-13.554,0-24.535,10.978-24.535,24.517c0,13.543,10.98,24.52,24.535,24.52
|
<path style="fill:#212121;" d="M158.72,245.094c-13.554,0-24.535,10.978-24.535,24.517c0,13.543,10.98,24.52,24.535,24.52
|
||||||
c13.543,0,24.52-10.977,24.52-24.52C183.24,256.07,172.263,245.094,158.72,245.094z"/>
|
c13.543,0,24.52-10.977,24.52-24.52C183.24,256.07,172.263,245.094,158.72,245.094z"/>
|
||||||
<path style="fill:#212121;" d="M355.568,351.359h-111.71c-9.047,0-16.355,7.309-16.355,16.358c0,9.017,7.309,16.34,16.355,16.34h111.71
|
<path style="fill:#212121;" d="M355.568,351.359h-111.71c-9.047,0-16.355,7.309-16.355,16.358c0,9.017,7.309,16.34,16.355,16.34h111.71
|
||||||
c9.047,0,16.354-7.323,16.354-16.34C371.924,358.667,364.615,351.359,355.568,351.359z"/>
|
c9.047,0,16.354-7.323,16.354-16.34C371.924,358.667,364.615,351.359,355.568,351.359z"/>
|
||||||
<path style="fill:#212121;" d="M158.72,343.199c-13.554,0-24.535,10.977-24.535,24.52c0,13.539,10.98,24.521,24.535,24.521
|
<path style="fill:#212121;" d="M158.72,343.199c-13.554,0-24.535,10.977-24.535,24.52c0,13.539,10.98,24.521,24.535,24.521
|
||||||
c13.543,0,24.52-10.979,24.52-24.521C183.24,354.176,172.263,343.199,158.72,343.199z"/>
|
c13.543,0,24.52-10.979,24.52-24.521C183.24,354.176,172.263,343.199,158.72,343.199z"/>
|
||||||
<path style="fill:#212121;" d="M173.463,75.613h138.73c3.401,0,6.613-1.521,8.746-4.176c2.137-2.629,2.961-6.105,2.229-9.43L311.686,8.859
|
<path style="fill:#212121;" d="M173.463,75.613h138.73c3.401,0,6.613-1.521,8.746-4.176c2.137-2.629,2.961-6.105,2.229-9.43L311.686,8.859
|
||||||
C310.564,3.687,305.994,0,300.708,0H184.963c-5.281,0-9.852,3.688-10.977,8.859l-11.5,53.148
|
C310.564,3.687,305.994,0,300.708,0H184.963c-5.281,0-9.852,3.688-10.977,8.859l-11.5,53.148
|
||||||
c-0.695,3.324,0.125,6.801,2.247,9.43C166.868,74.093,170.08,75.613,173.463,75.613z"/>
|
c-0.695,3.324,0.125,6.801,2.247,9.43C166.868,74.093,170.08,75.613,173.463,75.613z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.8 KiB |
@ -1,51 +1,51 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
width="705.299px" height="705.299px" viewBox="0 0 705.299 705.299" style="enable-background:new 0 0 705.299 705.299;"
|
width="705.299px" height="705.299px" viewBox="0 0 705.299 705.299" style="enable-background:new 0 0 705.299 705.299;"
|
||||||
xml:space="preserve">
|
xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M395.233,117.99V91.598l64.906,0.023v-5.55C460.151,38.549,421.636,0,374.08,0h-62.632
|
<path style="fill:#212121;" d="M395.233,117.99V91.598l64.906,0.023v-5.55C460.151,38.549,421.636,0,374.08,0h-62.632
|
||||||
c-47.511,0-86.06,38.549-86.06,86.071v5.515l66.343,0.023v26.163C152.565,141.993,46.651,263.051,46.651,409.157
|
c-47.511,0-86.06,38.549-86.06,86.071v5.515l66.343,0.023v26.163C152.565,141.993,46.651,263.051,46.651,409.157
|
||||||
c0,163.594,132.571,296.142,296.107,296.142c163.537,0,296.107-132.548,296.107-296.142
|
c0,163.594,132.571,296.142,296.107,296.142c163.537,0,296.107-132.548,296.107-296.142
|
||||||
C638.876,263.557,533.698,142.786,395.233,117.99z M342.758,637.52c-125.907,0-228.339-102.433-228.339-228.362
|
C638.876,263.557,533.698,142.786,395.233,117.99z M342.758,637.52c-125.907,0-228.339-102.433-228.339-228.362
|
||||||
c0-125.896,102.433-228.305,228.339-228.305c125.895,0,228.339,102.41,228.339,228.305
|
c0-125.896,102.433-228.305,228.339-228.305c125.895,0,228.339,102.41,228.339,228.305
|
||||||
C571.097,535.087,468.665,637.52,342.758,637.52z"/>
|
C571.097,535.087,468.665,637.52,342.758,637.52z"/>
|
||||||
<path style="fill:#f44336;" d="M651.987,153.333l-48.017-48.028c-4.274-4.286-10.065-6.688-16.098-6.688s-11.823,2.401-16.097,6.665l-38.929,38.939
|
<path style="fill:#f44336;" d="M651.987,153.333l-48.017-48.028c-4.274-4.286-10.065-6.688-16.098-6.688s-11.823,2.401-16.097,6.665l-38.929,38.939
|
||||||
l80.246,80.2l38.894-38.917C660.869,176.612,660.869,162.227,651.987,153.333z"/>
|
l80.246,80.2l38.894-38.917C660.869,176.612,660.869,162.227,651.987,153.333z"/>
|
||||||
<path style="fill:#f44336;" d="M341.724,195.237c-117.714,0.54-212.966,96.125-212.966,213.92c0,118.231,95.815,214.022,214.012,214.022
|
<path style="fill:#f44336;" d="M341.724,195.237c-117.714,0.54-212.966,96.125-212.966,213.92c0,118.231,95.815,214.022,214.012,214.022
|
||||||
c118.185,0,213.989-95.769,214-214H341.724V195.237z"/>
|
c118.185,0,213.989-95.769,214-214H341.724V195.237z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
@ -1,46 +1,46 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 26.009 26.009" style="enable-background:new 0 0 26.009 26.009;" xml:space="preserve">
|
viewBox="0 0 26.009 26.009" style="enable-background:new 0 0 26.009 26.009;" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g id="c192_off">
|
<g id="c192_off">
|
||||||
<path style="fill:#212121;" d="M17.284,2.033v3.3c3.006,1.551,5.065,4.683,5.065,8.299c0,5.161-4.184,9.344-9.343,9.344c-5.16,0-9.346-4.183-9.346-9.344
|
<path style="fill:#212121;" d="M17.284,2.033v3.3c3.006,1.551,5.065,4.683,5.065,8.299c0,5.161-4.184,9.344-9.343,9.344c-5.16,0-9.346-4.183-9.346-9.344
|
||||||
c0-3.316,1.735-6.223,4.34-7.881V2.32C3.662,4.242,0.63,8.581,0.63,13.632c0,6.834,5.539,12.377,12.374,12.377
|
c0-3.316,1.735-6.223,4.34-7.881V2.32C3.662,4.242,0.63,8.581,0.63,13.632c0,6.834,5.539,12.377,12.374,12.377
|
||||||
c6.834,0,12.374-5.543,12.374-12.377C25.378,8.304,22.003,3.779,17.284,2.033z"/>
|
c6.834,0,12.374-5.543,12.374-12.377C25.378,8.304,22.003,3.779,17.284,2.033z"/>
|
||||||
<path style="fill:#f44336;" d="M12.766,15.229c1.359,0,2.457-0.803,2.457-1.79V1.795C15.224,0.804,14.125,0,12.766,0c-1.357,0-2.456,0.804-2.456,1.795
|
<path style="fill:#f44336;" d="M12.766,15.229c1.359,0,2.457-0.803,2.457-1.79V1.795C15.224,0.804,14.125,0,12.766,0c-1.357,0-2.456,0.804-2.456,1.795
|
||||||
V13.44C10.311,14.427,11.41,15.229,12.766,15.229z"/>
|
V13.44C10.311,14.427,11.41,15.229,12.766,15.229z"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="Capa_1_192_">
|
<g id="Capa_1_192_">
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@ -1,42 +1,42 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 250.604 250.604" style="enable-background:new 0 0 250.604 250.604;" xml:space="preserve">
|
viewBox="0 0 250.604 250.604" style="enable-background:new 0 0 250.604 250.604;" xml:space="preserve">
|
||||||
<path style="fill:#212121;" d="M66.34,115.302h173.065c4.148,0,6.846,2.708,8.084,4.322c2.898,3.776,3.847,8.949,2.537,13.839l-23.92,89.297
|
<path style="fill:#212121;" d="M66.34,115.302h173.065c4.148,0,6.846,2.708,8.084,4.322c2.898,3.776,3.847,8.949,2.537,13.839l-23.92,89.297
|
||||||
c-1.528,5.707-5.796,9.542-10.619,9.542H42.422c-4.148,0-6.846-2.708-8.084-4.322c-2.898-3.776-3.847-8.949-2.537-13.839
|
c-1.528,5.707-5.796,9.542-10.619,9.542H42.422c-4.148,0-6.846-2.708-8.084-4.322c-2.898-3.776-3.847-8.949-2.537-13.839
|
||||||
l23.919-89.297C57.249,119.137,61.517,115.302,66.34,115.302z"/>
|
l23.919-89.297C57.249,119.137,61.517,115.302,66.34,115.302z"/>
|
||||||
<path style="fill:#f44336;" d="M17.312,210.26l23.919-89.297
|
<path style="fill:#f44336;" d="M17.312,210.26l23.919-89.297
|
||||||
c3.31-12.358,13.399-20.661,25.108-20.661H229v-42c0-4.143-2.524-7-6.667-7H130v-2.633c0-17.021-13.014-30.367-30.033-30.367H31.2
|
c3.31-12.358,13.399-20.661,25.108-20.661H229v-42c0-4.143-2.524-7-6.667-7H130v-2.633c0-17.021-13.014-30.367-30.033-30.367H31.2
|
||||||
C14.18,18.302,0,31.649,0,48.669v9.633v33v115.5c0,4.143,3.69,7.5,7.833,7.5h8.684C16.697,212.947,16.954,211.597,17.312,210.26z"/>
|
C14.18,18.302,0,31.649,0,48.669v9.633v33v115.5c0,4.143,3.69,7.5,7.833,7.5h8.684C16.697,212.947,16.954,211.597,17.312,210.26z"/>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
@ -1,44 +1,44 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 247.355 247.355" style="enable-background:new 0 0 247.355 247.355;" xml:space="preserve">
|
viewBox="0 0 247.355 247.355" style="enable-background:new 0 0 247.355 247.355;" xml:space="preserve">
|
||||||
<path style="fill:#212121;" d="M181.751,79.678h64.049c0.617,0,0.995,0.275,1.204,0.506c0.27,0.297,0.385,0.66,0.344,1.078l-14.7,147.766
|
<path style="fill:#212121;" d="M181.751,79.678h64.049c0.617,0,0.995,0.275,1.204,0.506c0.27,0.297,0.385,0.66,0.344,1.078l-14.7,147.766
|
||||||
c-0.086,0.863-0.824,1.65-1.548,1.65H15.792c-0.748,0-1.44-0.667-1.543-1.486L0.013,115.176c-0.05-0.396,0.041-0.719,0.278-0.986
|
c-0.086,0.863-0.824,1.65-1.548,1.65H15.792c-0.748,0-1.44-0.667-1.543-1.486L0.013,115.176c-0.05-0.396,0.041-0.719,0.278-0.986
|
||||||
c0.168-0.191,0.557-0.512,1.265-0.512h151.291c6.107,0,11.713-3.423,14.639-8.948l12.891-24.474
|
c0.168-0.191,0.557-0.512,1.265-0.512h151.291c6.107,0,11.713-3.423,14.639-8.948l12.891-24.474
|
||||||
C180.653,79.734,181.429,79.678,181.751,79.678z"/>
|
C180.653,79.734,181.429,79.678,181.751,79.678z"/>
|
||||||
<path style="fill:#f44336;" d="M152.847,98.678c0.513,0,1.077-0.392,1.375-0.953l12.891-24.474
|
<path style="fill:#f44336;" d="M152.847,98.678c0.513,0,1.077-0.392,1.375-0.953l12.891-24.474
|
||||||
c2.803-5.294,8.409-8.573,14.638-8.573h54.594v-16.75c0-8.837-5.87-15.25-14.417-15.25H91.428c-0.536-0.009-1.569-0.809-1.752-1.342
|
c2.803-5.294,8.409-8.573,14.638-8.573h54.594v-16.75c0-8.837-5.87-15.25-14.417-15.25H91.428c-0.536-0.009-1.569-0.809-1.752-1.342
|
||||||
c-0.001-0.113-0.005-0.227-0.011-0.338c-0.304-8.467-6.278-14.32-14.738-14.32h-48.5c-9.393,0-17.083,6.479-17.083,14.75v67.25
|
c-0.001-0.113-0.005-0.227-0.011-0.338c-0.304-8.467-6.278-14.32-14.738-14.32h-48.5c-9.393,0-17.083,6.479-17.083,14.75v67.25
|
||||||
H152.847z"/>
|
H152.847z"/>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
@ -1,43 +1,43 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
width="510px" height="510px" viewBox="0 0 510 510" style="enable-background:new 0 0 510 510;" xml:space="preserve">
|
width="510px" height="510px" viewBox="0 0 510 510" style="enable-background:new 0 0 510 510;" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g id="play-circle-outline">
|
<g id="play-circle-outline">
|
||||||
<path style="fill:#f44336;" d="M204,369.75L357,255L204,140.25V369.75z"/>
|
<path style="fill:#f44336;" d="M204,369.75L357,255L204,140.25V369.75z"/>
|
||||||
<path style="fill:#212121;" d="M255,0C114.75,0,0,114.75,0,255s114.75,255,255,255s255-114.75,255-255
|
<path style="fill:#212121;" d="M255,0C114.75,0,0,114.75,0,255s114.75,255,255,255s255-114.75,255-255
|
||||||
S395.25,0,255,0z M255,459c-112.2,0-204-91.8-204-204S142.8,51,255,51s204,91.8,204,204S367.2,459,255,459z"/>
|
S395.25,0,255,0z M255,459c-112.2,0-204-91.8-204-204S142.8,51,255,51s204,91.8,204,204S367.2,459,255,459z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1004 B After Width: | Height: | Size: 961 B |
@ -1,52 +1,52 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 247.355 247.355" style="enable-background:new 0 0 247.355 247.355;" xml:space="preserve">
|
viewBox="0 0 247.355 247.355" style="enable-background:new 0 0 247.355 247.355;" xml:space="preserve">
|
||||||
<path style="fill:#f44336;" d="M9.344,98.678v-67.25c0-8.271,7.69-14.75,17.083-14.75h48.5c8.46,0,14.435,5.854,14.738,14.32
|
<path style="fill:#f44336;" d="M9.344,98.678v-67.25c0-8.271,7.69-14.75,17.083-14.75h48.5c8.46,0,14.435,5.854,14.738,14.32
|
||||||
c0.006,0.111,0.01,0.225,0.011,0.338c0.183,0.533,1.216,1.333,1.752,1.342h130.499c8.547,0,14.417,6.413,14.417,15.25v16.75h-54.594
|
c0.006,0.111,0.01,0.225,0.011,0.338c0.183,0.533,1.216,1.333,1.752,1.342h130.499c8.547,0,14.417,6.413,14.417,15.25v16.75h-54.594
|
||||||
c-6.229,0-11.835,3.279-14.638,8.573l-12.891,24.474c-0.298,0.562-0.862,0.953-1.375,0.953H9.344z"/>
|
c-6.229,0-11.835,3.279-14.638,8.573l-12.891,24.474c-0.298,0.562-0.862,0.953-1.375,0.953H9.344z"/>
|
||||||
<path style="fill:#212121;" d="M247.347,81.262l-14.7,147.766
|
<path style="fill:#212121;" d="M247.347,81.262l-14.7,147.766
|
||||||
c-0.086,0.863-0.824,1.65-1.548,1.65H15.792c-0.748,0-1.44-0.667-1.543-1.486L0.013,115.176c-0.05-0.396,0.041-0.719,0.278-0.986
|
c-0.086,0.863-0.824,1.65-1.548,1.65H15.792c-0.748,0-1.44-0.667-1.543-1.486L0.013,115.176c-0.05-0.396,0.041-0.719,0.278-0.986
|
||||||
c0.168-0.191,0.557-0.512,1.265-0.512h151.291c6.107,0,11.713-3.423,14.639-8.948l12.891-24.474
|
c0.168-0.191,0.557-0.512,1.265-0.512h151.291c6.107,0,11.713-3.423,14.639-8.948l12.891-24.474
|
||||||
c0.276-0.521,1.053-0.578,1.374-0.578h64.049c0.617,0,0.995,0.275,1.204,0.506C247.273,80.48,247.388,80.844,247.347,81.262z"/>
|
c0.276-0.521,1.053-0.578,1.374-0.578h64.049c0.617,0,0.995,0.275,1.204,0.506C247.273,80.48,247.388,80.844,247.347,81.262z"/>
|
||||||
<path style="fill:#f44336;" d="M203.177,188.998c0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5c0,8.336-6.781,15.117-15.116,15.117
|
<path style="fill:#f44336;" d="M203.177,188.998c0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5c0,8.336-6.781,15.117-15.116,15.117
|
||||||
c-4.563,0-8.651-2.041-11.425-5.247c2.581,0.161,5.176-1.011,6.714-3.319c2.298-3.446,1.366-8.103-2.08-10.4l-11.466-7.645
|
c-4.563,0-8.651-2.041-11.425-5.247c2.581,0.161,5.176-1.011,6.714-3.319c2.298-3.446,1.366-8.103-2.08-10.4l-11.466-7.645
|
||||||
c-2.52-1.68-5.801-1.68-8.32,0l-11.467,7.645c-3.446,2.298-4.378,6.954-2.08,10.4c1.445,2.168,3.823,3.341,6.247,3.341
|
c-2.52-1.68-5.801-1.68-8.32,0l-11.467,7.645c-3.446,2.298-4.378,6.954-2.08,10.4c1.445,2.168,3.823,3.341,6.247,3.341
|
||||||
c1.43,0,2.875-0.408,4.153-1.261l0.734-0.489c3.561,12.662,15.205,21.976,28.99,21.976
|
c1.43,0,2.875-0.408,4.153-1.261l0.734-0.489c3.561,12.662,15.205,21.976,28.99,21.976
|
||||||
C189.667,219.115,203.177,205.604,203.177,188.998z M212.917,154.81c-2.298-3.446-6.954-4.377-10.4-2.08l-0.733,0.489
|
C189.667,219.115,203.177,205.604,203.177,188.998z M212.917,154.81c-2.298-3.446-6.954-4.377-10.4-2.08l-0.733,0.489
|
||||||
c-3.562-12.662-15.205-21.975-28.99-21.975c-16.606,0-30.117,13.511-30.117,30.117c0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5
|
c-3.562-12.662-15.205-21.975-28.99-21.975c-16.606,0-30.117,13.511-30.117,30.117c0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5
|
||||||
c0-8.336,6.781-15.117,15.117-15.117c4.563,0,8.651,2.041,11.425,5.248c-2.582-0.161-5.177,1.012-6.715,3.319
|
c0-8.336,6.781-15.117,15.117-15.117c4.563,0,8.651,2.041,11.425,5.248c-2.582-0.161-5.177,1.012-6.715,3.319
|
||||||
c-2.298,3.446-1.366,8.103,2.08,10.4l11.467,7.645c1.26,0.84,2.71,1.26,4.16,1.26s2.9-0.42,4.16-1.26l11.466-7.645
|
c-2.298,3.446-1.366,8.103,2.08,10.4l11.467,7.645c1.26,0.84,2.71,1.26,4.16,1.26s2.9-0.42,4.16-1.26l11.466-7.645
|
||||||
C214.284,162.913,215.215,158.257,212.917,154.81z"/>
|
C214.284,162.913,215.215,158.257,212.917,154.81z"/>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
@ -1,75 +1,75 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 502.707 502.707" style="enable-background:new 0 0 502.707 502.707;" xml:space="preserve">
|
viewBox="0 0 502.707 502.707" style="enable-background:new 0 0 502.707 502.707;" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M203.758,153.541l37.576,73.686L297.03,55.674L125.456,0.022l37.274,73.125
|
<path style="fill:#212121;" d="M203.758,153.541l37.576,73.686L297.03,55.674L125.456,0.022l37.274,73.125
|
||||||
C75.002,104.467,12.166,188.054,12.166,286.525c0,101.383,66.546,187.17,158.351,216.161
|
C75.002,104.467,12.166,188.054,12.166,286.525c0,101.383,66.546,187.17,158.351,216.161
|
||||||
c-55.307-34.902-92.15-96.378-92.15-166.526C78.345,252.788,130.525,182.208,203.758,153.541z"/>
|
c-55.307-34.902-92.15-96.378-92.15-166.526C78.345,252.788,130.525,182.208,203.758,153.541z"/>
|
||||||
<path style="fill:#f44336;" d="M298.993,349.209l-37.598-73.707l-55.631,171.531l171.509,55.674l-37.296-73.147
|
<path style="fill:#f44336;" d="M298.993,349.209l-37.598-73.707l-55.631,171.531l171.509,55.674l-37.296-73.147
|
||||||
c87.75-31.278,150.564-114.886,150.564-213.4C490.541,114.8,424.017,29.013,332.212,0c55.286,34.902,92.172,96.357,92.172,166.526
|
c87.75-31.278,150.564-114.886,150.564-213.4C490.541,114.8,424.017,29.013,332.212,0c55.286,34.902,92.172,96.357,92.172,166.526
|
||||||
C424.405,249.941,372.225,320.477,298.993,349.209z"/>
|
C424.405,249.941,372.225,320.477,298.993,349.209z"/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@ -1,57 +1,57 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
width="47px" height="47px" viewBox="0 0 47 47" style="enable-background:new 0 0 47 47;" xml:space="preserve">
|
width="47px" height="47px" viewBox="0 0 47 47" style="enable-background:new 0 0 47 47;" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g id="Layer_1_18_">
|
<g id="Layer_1_18_">
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M46.368,43.354l-7.177-7.178c-0.476-0.475-1.117-0.67-1.737-0.604l-1.005-1.006c3.353-3.803,5.204-8.623,5.204-13.736
|
<path style="fill:#212121;" d="M46.368,43.354l-7.177-7.178c-0.476-0.475-1.117-0.67-1.737-0.604l-1.005-1.006c3.353-3.803,5.204-8.623,5.204-13.736
|
||||||
c0-5.563-2.166-10.793-6.1-14.727C31.618,2.167,26.388,0,20.825,0S10.03,2.167,6.097,6.102c-8.122,8.12-8.122,21.335,0,29.457
|
c0-5.563-2.166-10.793-6.1-14.727C31.618,2.167,26.388,0,20.825,0S10.03,2.167,6.097,6.102c-8.122,8.12-8.122,21.335,0,29.457
|
||||||
c3.934,3.935,9.164,6.101,14.727,6.101c5.115,0,9.934-1.851,13.738-5.204l1.005,1.005c-0.066,0.62,0.129,1.263,0.604,1.737
|
c3.934,3.935,9.164,6.101,14.727,6.101c5.115,0,9.934-1.851,13.738-5.204l1.005,1.005c-0.066,0.62,0.129,1.263,0.604,1.737
|
||||||
l7.178,7.177C43.765,46.791,44.312,47,44.857,47s1.094-0.208,1.51-0.626C47.203,45.54,47.203,44.188,46.368,43.354z
|
l7.178,7.177C43.765,46.791,44.312,47,44.857,47s1.094-0.208,1.51-0.626C47.203,45.54,47.203,44.188,46.368,43.354z
|
||||||
M20.824,37.386c-4.421,0-8.578-1.722-11.706-4.849c-6.456-6.456-6.456-16.96,0-23.415c3.128-3.127,7.285-4.85,11.707-4.85
|
M20.824,37.386c-4.421,0-8.578-1.722-11.706-4.849c-6.456-6.456-6.456-16.96,0-23.415c3.128-3.127,7.285-4.85,11.707-4.85
|
||||||
c4.421,0,8.58,1.723,11.708,4.851c3.127,3.127,4.849,7.285,4.849,11.706c0,4.422-1.723,8.579-4.852,11.706
|
c4.421,0,8.58,1.723,11.708,4.851c3.127,3.127,4.849,7.285,4.849,11.706c0,4.422-1.723,8.579-4.852,11.706
|
||||||
C29.403,35.664,25.245,37.386,20.824,37.386z"/>
|
C29.403,35.664,25.245,37.386,20.824,37.386z"/>
|
||||||
<path style="fill:#f44336;" d="M33.258,25.352L26.85,20.01c-0.319-0.266-0.764-0.322-1.138-0.147c-0.375,0.176-0.614,0.553-0.614,0.967v2.258h-5.341
|
<path style="fill:#f44336;" d="M33.258,25.352L26.85,20.01c-0.319-0.266-0.764-0.322-1.138-0.147c-0.375,0.176-0.614,0.553-0.614,0.967v2.258h-5.341
|
||||||
c-0.59,0-1.068,0.479-1.068,1.068v4.023c0,0.59,0.478,1.068,1.068,1.068h5.341v2.261c0,0.415,0.239,0.792,0.614,0.968
|
c-0.59,0-1.068,0.479-1.068,1.068v4.023c0,0.59,0.478,1.068,1.068,1.068h5.341v2.261c0,0.415,0.239,0.792,0.614,0.968
|
||||||
c0.146,0.067,0.3,0.102,0.453,0.102c0.245,0,0.488-0.084,0.685-0.248l6.408-5.34c0.243-0.203,0.385-0.504,0.385-0.82
|
c0.146,0.067,0.3,0.102,0.453,0.102c0.245,0,0.488-0.084,0.685-0.248l6.408-5.34c0.243-0.203,0.385-0.504,0.385-0.82
|
||||||
S33.501,25.555,33.258,25.352z"/>
|
S33.501,25.555,33.258,25.352z"/>
|
||||||
<path style="fill:#212121;" d="M22.96,17.5v-4.023c0-0.59-0.478-1.068-1.068-1.068h-5.339V10.15c0-0.415-0.24-0.792-0.615-0.968
|
<path style="fill:#212121;" d="M22.96,17.5v-4.023c0-0.59-0.478-1.068-1.068-1.068h-5.339V10.15c0-0.415-0.24-0.792-0.615-0.968
|
||||||
c-0.376-0.175-0.819-0.118-1.137,0.146l-6.411,5.341c-0.244,0.203-0.384,0.503-0.384,0.821c0,0.317,0.141,0.618,0.384,0.821
|
c-0.376-0.175-0.819-0.118-1.137,0.146l-6.411,5.341c-0.244,0.203-0.384,0.503-0.384,0.821c0,0.317,0.141,0.618,0.384,0.821
|
||||||
l6.411,5.341c0.195,0.163,0.438,0.248,0.684,0.248c0.154,0,0.309-0.034,0.454-0.101c0.375-0.177,0.615-0.553,0.615-0.968v-2.263
|
l6.411,5.341c0.195,0.163,0.438,0.248,0.684,0.248c0.154,0,0.309-0.034,0.454-0.101c0.375-0.177,0.615-0.553,0.615-0.968v-2.263
|
||||||
h5.339C22.482,18.567,22.96,18.089,22.96,17.5z"/>
|
h5.339C22.482,18.567,22.96,18.089,22.96,17.5z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
@ -1,57 +1,57 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
width="47px" height="47px" viewBox="0 0 47 47" style="enable-background:new 0 0 47 47;" xml:space="preserve">
|
width="47px" height="47px" viewBox="0 0 47 47" style="enable-background:new 0 0 47 47;" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g id="Layer_1_18_">
|
<g id="Layer_1_18_">
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M46.368,43.354l-7.177-7.178c-0.476-0.475-1.117-0.67-1.737-0.604l-1.005-1.006c3.353-3.803,5.204-8.623,5.204-13.736
|
<path style="fill:#212121;" d="M46.368,43.354l-7.177-7.178c-0.476-0.475-1.117-0.67-1.737-0.604l-1.005-1.006c3.353-3.803,5.204-8.623,5.204-13.736
|
||||||
c0-5.563-2.166-10.793-6.1-14.727C31.618,2.167,26.388,0,20.825,0S10.03,2.167,6.097,6.102c-8.122,8.12-8.122,21.335,0,29.457
|
c0-5.563-2.166-10.793-6.1-14.727C31.618,2.167,26.388,0,20.825,0S10.03,2.167,6.097,6.102c-8.122,8.12-8.122,21.335,0,29.457
|
||||||
c3.934,3.935,9.164,6.101,14.727,6.101c5.115,0,9.934-1.851,13.738-5.204l1.005,1.005c-0.066,0.62,0.129,1.263,0.604,1.737
|
c3.934,3.935,9.164,6.101,14.727,6.101c5.115,0,9.934-1.851,13.738-5.204l1.005,1.005c-0.066,0.62,0.129,1.263,0.604,1.737
|
||||||
l7.178,7.177C43.765,46.791,44.312,47,44.857,47s1.094-0.208,1.51-0.626C47.203,45.54,47.203,44.188,46.368,43.354z
|
l7.178,7.177C43.765,46.791,44.312,47,44.857,47s1.094-0.208,1.51-0.626C47.203,45.54,47.203,44.188,46.368,43.354z
|
||||||
M20.824,37.386c-4.421,0-8.578-1.722-11.706-4.849c-6.456-6.456-6.456-16.96,0-23.415c3.128-3.127,7.285-4.85,11.707-4.85
|
M20.824,37.386c-4.421,0-8.578-1.722-11.706-4.849c-6.456-6.456-6.456-16.96,0-23.415c3.128-3.127,7.285-4.85,11.707-4.85
|
||||||
c4.421,0,8.58,1.723,11.708,4.851c3.127,3.127,4.849,7.285,4.849,11.706c0,4.422-1.723,8.579-4.852,11.706
|
c4.421,0,8.58,1.723,11.708,4.851c3.127,3.127,4.849,7.285,4.849,11.706c0,4.422-1.723,8.579-4.852,11.706
|
||||||
C29.403,35.664,25.245,37.386,20.824,37.386z"/>
|
C29.403,35.664,25.245,37.386,20.824,37.386z"/>
|
||||||
<path style="fill:#212121;" d="M33.258,25.352L26.85,20.01c-0.319-0.266-0.764-0.322-1.138-0.147c-0.375,0.176-0.614,0.553-0.614,0.967v2.258h-5.341
|
<path style="fill:#212121;" d="M33.258,25.352L26.85,20.01c-0.319-0.266-0.764-0.322-1.138-0.147c-0.375,0.176-0.614,0.553-0.614,0.967v2.258h-5.341
|
||||||
c-0.59,0-1.068,0.479-1.068,1.068v4.023c0,0.59,0.478,1.068,1.068,1.068h5.341v2.261c0,0.415,0.239,0.792,0.614,0.968
|
c-0.59,0-1.068,0.479-1.068,1.068v4.023c0,0.59,0.478,1.068,1.068,1.068h5.341v2.261c0,0.415,0.239,0.792,0.614,0.968
|
||||||
c0.146,0.067,0.3,0.102,0.453,0.102c0.245,0,0.488-0.084,0.685-0.248l6.408-5.34c0.243-0.203,0.385-0.504,0.385-0.82
|
c0.146,0.067,0.3,0.102,0.453,0.102c0.245,0,0.488-0.084,0.685-0.248l6.408-5.34c0.243-0.203,0.385-0.504,0.385-0.82
|
||||||
S33.501,25.555,33.258,25.352z"/>
|
S33.501,25.555,33.258,25.352z"/>
|
||||||
<path style="fill:#f44336;" d="M22.96,17.5v-4.023c0-0.59-0.478-1.068-1.068-1.068h-5.339V10.15c0-0.415-0.24-0.792-0.615-0.968
|
<path style="fill:#f44336;" d="M22.96,17.5v-4.023c0-0.59-0.478-1.068-1.068-1.068h-5.339V10.15c0-0.415-0.24-0.792-0.615-0.968
|
||||||
c-0.376-0.175-0.819-0.118-1.137,0.146l-6.411,5.341c-0.244,0.203-0.384,0.503-0.384,0.821c0,0.317,0.141,0.618,0.384,0.821
|
c-0.376-0.175-0.819-0.118-1.137,0.146l-6.411,5.341c-0.244,0.203-0.384,0.503-0.384,0.821c0,0.317,0.141,0.618,0.384,0.821
|
||||||
l6.411,5.341c0.195,0.163,0.438,0.248,0.684,0.248c0.154,0,0.309-0.034,0.454-0.101c0.375-0.177,0.615-0.553,0.615-0.968v-2.263
|
l6.411,5.341c0.195,0.163,0.438,0.248,0.684,0.248c0.154,0,0.309-0.034,0.454-0.101c0.375-0.177,0.615-0.553,0.615-0.968v-2.263
|
||||||
h5.339C22.482,18.567,22.96,18.089,22.96,17.5z"/>
|
h5.339C22.482,18.567,22.96,18.089,22.96,17.5z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
@ -1,70 +1,70 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
width="932.179px" height="932.179px" viewBox="0 0 932.179 932.179" style="enable-background:new 0 0 932.179 932.179;"
|
width="932.179px" height="932.179px" viewBox="0 0 932.179 932.179" style="enable-background:new 0 0 932.179 932.179;"
|
||||||
xml:space="preserve">
|
xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M61.2,341.538c4.9,16.8,11.7,33,20.3,48.2l-24.5,30.9c-8,10.1-7.1,24.5,1.9,33.6l42.2,42.2c9.1,9.1,23.5,9.899,33.6,1.899
|
<path style="fill:#212121;" d="M61.2,341.538c4.9,16.8,11.7,33,20.3,48.2l-24.5,30.9c-8,10.1-7.1,24.5,1.9,33.6l42.2,42.2c9.1,9.1,23.5,9.899,33.6,1.899
|
||||||
l30.7-24.3c15.8,9.101,32.6,16.2,50.1,21.2l4.6,39.5c1.5,12.8,12.3,22.4,25.1,22.4h59.7c12.8,0,23.6-9.601,25.1-22.4l4.4-38.1
|
l30.7-24.3c15.8,9.101,32.6,16.2,50.1,21.2l4.6,39.5c1.5,12.8,12.3,22.4,25.1,22.4h59.7c12.8,0,23.6-9.601,25.1-22.4l4.4-38.1
|
||||||
c18.8-4.9,36.8-12.2,53.7-21.7l29.7,23.5c10.1,8,24.5,7.1,33.6-1.9l42.2-42.2c9.1-9.1,9.9-23.5,1.9-33.6l-23.1-29.3
|
c18.8-4.9,36.8-12.2,53.7-21.7l29.7,23.5c10.1,8,24.5,7.1,33.6-1.9l42.2-42.2c9.1-9.1,9.9-23.5,1.9-33.6l-23.1-29.3
|
||||||
c9.6-16.601,17.1-34.3,22.1-52.8l35.6-4.1c12.801-1.5,22.4-12.3,22.4-25.1v-59.7c0-12.8-9.6-23.6-22.4-25.1l-35.1-4.1
|
c9.6-16.601,17.1-34.3,22.1-52.8l35.6-4.1c12.801-1.5,22.4-12.3,22.4-25.1v-59.7c0-12.8-9.6-23.6-22.4-25.1l-35.1-4.1
|
||||||
c-4.801-18.3-12-35.8-21.199-52.2l21.6-27.3c8-10.1,7.1-24.5-1.9-33.6l-42.1-42.1c-9.1-9.1-23.5-9.9-33.6-1.9l-26.5,21
|
c-4.801-18.3-12-35.8-21.199-52.2l21.6-27.3c8-10.1,7.1-24.5-1.9-33.6l-42.1-42.1c-9.1-9.1-23.5-9.9-33.6-1.9l-26.5,21
|
||||||
c-17.2-10.1-35.601-17.8-54.9-23l-4-34.3c-1.5-12.8-12.3-22.4-25.1-22.4h-59.7c-12.8,0-23.6,9.6-25.1,22.4l-4,34.3
|
c-17.2-10.1-35.601-17.8-54.9-23l-4-34.3c-1.5-12.8-12.3-22.4-25.1-22.4h-59.7c-12.8,0-23.6,9.6-25.1,22.4l-4,34.3
|
||||||
c-19.8,5.3-38.7,13.3-56.3,23.8l-27.5-21.8c-10.1-8-24.5-7.1-33.6,1.9l-42.2,42.2c-9.1,9.1-9.9,23.5-1.9,33.6l23,29.1
|
c-19.8,5.3-38.7,13.3-56.3,23.8l-27.5-21.8c-10.1-8-24.5-7.1-33.6,1.9l-42.2,42.2c-9.1,9.1-9.9,23.5-1.9,33.6l23,29.1
|
||||||
c-9.2,16.6-16.2,34.3-20.8,52.7l-36.8,4.2c-12.8,1.5-22.4,12.3-22.4,25.1v59.7c0,12.8,9.6,23.6,22.4,25.1L61.2,341.538z
|
c-9.2,16.6-16.2,34.3-20.8,52.7l-36.8,4.2c-12.8,1.5-22.4,12.3-22.4,25.1v59.7c0,12.8,9.6,23.6,22.4,25.1L61.2,341.538z
|
||||||
M277.5,180.038c54.4,0,98.7,44.3,98.7,98.7s-44.3,98.7-98.7,98.7c-54.399,0-98.7-44.3-98.7-98.7S223.1,180.038,277.5,180.038z"/>
|
M277.5,180.038c54.4,0,98.7,44.3,98.7,98.7s-44.3,98.7-98.7,98.7c-54.399,0-98.7-44.3-98.7-98.7S223.1,180.038,277.5,180.038z"/>
|
||||||
<path style="fill:#f44336;" d="M867.699,356.238l-31.5-26.6c-9.699-8.2-24-7.8-33.199,0.9l-17.4,16.3c-14.699-7.1-30.299-12.1-46.4-15l-4.898-24
|
<path style="fill:#f44336;" d="M867.699,356.238l-31.5-26.6c-9.699-8.2-24-7.8-33.199,0.9l-17.4,16.3c-14.699-7.1-30.299-12.1-46.4-15l-4.898-24
|
||||||
c-2.5-12.4-14-21-26.602-20l-41.1,3.5c-12.6,1.1-22.5,11.4-22.9,24.1l-0.799,24.4c-15.801,5.7-30.701,13.5-44.301,23.3
|
c-2.5-12.4-14-21-26.602-20l-41.1,3.5c-12.6,1.1-22.5,11.4-22.9,24.1l-0.799,24.4c-15.801,5.7-30.701,13.5-44.301,23.3
|
||||||
l-20.799-13.8c-10.602-7-24.701-5-32.9,4.7l-26.6,31.7c-8.201,9.7-7.801,24,0.898,33.2l18.201,19.399
|
l-20.799-13.8c-10.602-7-24.701-5-32.9,4.7l-26.6,31.7c-8.201,9.7-7.801,24,0.898,33.2l18.201,19.399
|
||||||
c-6.301,14.2-10.801,29.101-13.4,44.4l-26,5.3c-12.4,2.5-21,14-20,26.601l3.5,41.1c1.1,12.6,11.4,22.5,24.1,22.9l28.1,0.899
|
c-6.301,14.2-10.801,29.101-13.4,44.4l-26,5.3c-12.4,2.5-21,14-20,26.601l3.5,41.1c1.1,12.6,11.4,22.5,24.1,22.9l28.1,0.899
|
||||||
c5.102,13.4,11.801,26.101,19.9,38l-15.699,23.7c-7,10.6-5,24.7,4.699,32.9l31.5,26.6c9.701,8.2,24,7.8,33.201-0.9l20.6-19.3
|
c5.102,13.4,11.801,26.101,19.9,38l-15.699,23.7c-7,10.6-5,24.7,4.699,32.9l31.5,26.6c9.701,8.2,24,7.8,33.201-0.9l20.6-19.3
|
||||||
c13.5,6.3,27.699,11,42.299,13.8l5.701,28.2c2.5,12.4,14,21,26.6,20l41.1-3.5c12.6-1.1,22.5-11.399,22.9-24.1l0.9-27.601
|
c13.5,6.3,27.699,11,42.299,13.8l5.701,28.2c2.5,12.4,14,21,26.6,20l41.1-3.5c12.6-1.1,22.5-11.399,22.9-24.1l0.9-27.601
|
||||||
c15-5.3,29.199-12.5,42.299-21.399l22.701,15c10.6,7,24.699,5,32.9-4.7l26.6-31.5c8.199-9.7,7.799-24-0.9-33.2l-18.301-19.399
|
c15-5.3,29.199-12.5,42.299-21.399l22.701,15c10.6,7,24.699,5,32.9-4.7l26.6-31.5c8.199-9.7,7.799-24-0.9-33.2l-18.301-19.399
|
||||||
c6.701-14.2,11.602-29.2,14.4-44.601l25-5.1c12.4-2.5,21-14,20-26.601l-3.5-41.1c-1.1-12.6-11.4-22.5-24.1-22.9l-25.1-0.8
|
c6.701-14.2,11.602-29.2,14.4-44.601l25-5.1c12.4-2.5,21-14,20-26.601l-3.5-41.1c-1.1-12.6-11.4-22.5-24.1-22.9l-25.1-0.8
|
||||||
c-5.201-14.6-12.201-28.399-20.9-41.2l13.699-20.6C879.4,378.638,877.4,364.438,867.699,356.238z M712.801,593.837
|
c-5.201-14.6-12.201-28.399-20.9-41.2l13.699-20.6C879.4,378.638,877.4,364.438,867.699,356.238z M712.801,593.837
|
||||||
c-44.4,3.801-83.602-29.3-87.301-73.699c-3.801-44.4,29.301-83.601,73.699-87.301c44.4-3.8,83.602,29.301,87.301,73.7
|
c-44.4,3.801-83.602-29.3-87.301-73.699c-3.801-44.4,29.301-83.601,73.699-87.301c44.4-3.8,83.602,29.301,87.301,73.7
|
||||||
C790.301,550.938,757.199,590.138,712.801,593.837z"/>
|
C790.301,550.938,757.199,590.138,712.801,593.837z"/>
|
||||||
<path style="fill:#212121;" d="M205,704.438c-12.6,1.3-22.3,11.899-22.4,24.6l-0.3,25.3c-0.2,12.7,9.2,23.5,21.8,25.101l18.6,2.399
|
<path style="fill:#212121;" d="M205,704.438c-12.6,1.3-22.3,11.899-22.4,24.6l-0.3,25.3c-0.2,12.7,9.2,23.5,21.8,25.101l18.6,2.399
|
||||||
c3.1,11.301,7.5,22.101,13.2,32.301l-12,14.8c-8,9.899-7.4,24.1,1.5,33.2l17.7,18.1c8.9,9.1,23.1,10.1,33.2,2.3l14.899-11.5
|
c3.1,11.301,7.5,22.101,13.2,32.301l-12,14.8c-8,9.899-7.4,24.1,1.5,33.2l17.7,18.1c8.9,9.1,23.1,10.1,33.2,2.3l14.899-11.5
|
||||||
c10.5,6.2,21.601,11.101,33.2,14.5l2,19.2c1.3,12.6,11.9,22.3,24.6,22.4l25.301,0.3c12.699,0.2,23.5-9.2,25.1-21.8l2.3-18.2
|
c10.5,6.2,21.601,11.101,33.2,14.5l2,19.2c1.3,12.6,11.9,22.3,24.6,22.4l25.301,0.3c12.699,0.2,23.5-9.2,25.1-21.8l2.3-18.2
|
||||||
c12.601-3.101,24.601-7.8,36-14l14,11.3c9.9,8,24.101,7.4,33.201-1.5l18.1-17.7c9.1-8.899,10.1-23.1,2.301-33.2L496.6,818.438
|
c12.601-3.101,24.601-7.8,36-14l14,11.3c9.9,8,24.101,7.4,33.201-1.5l18.1-17.7c9.1-8.899,10.1-23.1,2.301-33.2L496.6,818.438
|
||||||
c6.6-11,11.701-22.7,15.201-35l16.6-1.7c12.6-1.3,22.299-11.9,22.4-24.6l0.299-25.301c0.201-12.699-9.199-23.5-21.799-25.1
|
c6.6-11,11.701-22.7,15.201-35l16.6-1.7c12.6-1.3,22.299-11.9,22.4-24.6l0.299-25.301c0.201-12.699-9.199-23.5-21.799-25.1
|
||||||
l-16.201-2.1c-3.1-12.2-7.699-24-13.699-35l10.1-12.4c8-9.9,7.4-24.1-1.5-33.2l-17.699-18.1c-8.9-9.101-23.102-10.101-33.201-2.3
|
l-16.201-2.1c-3.1-12.2-7.699-24-13.699-35l10.1-12.4c8-9.9,7.4-24.1-1.5-33.2l-17.699-18.1c-8.9-9.101-23.102-10.101-33.201-2.3
|
||||||
l-12.101,9.3c-11.399-6.9-23.6-12.2-36.399-15.8l-1.601-15.7c-1.3-12.601-11.899-22.3-24.6-22.4l-25.3-0.3
|
l-12.101,9.3c-11.399-6.9-23.6-12.2-36.399-15.8l-1.601-15.7c-1.3-12.601-11.899-22.3-24.6-22.4l-25.3-0.3
|
||||||
c-12.7-0.2-23.5,9.2-25.101,21.8l-2,15.601c-13.199,3.399-25.899,8.6-37.699,15.399l-12.5-10.2c-9.9-8-24.101-7.399-33.201,1.5
|
c-12.7-0.2-23.5,9.2-25.101,21.8l-2,15.601c-13.199,3.399-25.899,8.6-37.699,15.399l-12.5-10.2c-9.9-8-24.101-7.399-33.201,1.5
|
||||||
l-18.2,17.801c-9.1,8.899-10.1,23.1-2.3,33.199l10.7,13.801c-6.2,11-11.1,22.699-14.3,35L205,704.438z M368.3,675.837
|
l-18.2,17.801c-9.1,8.899-10.1,23.1-2.3,33.199l10.7,13.801c-6.2,11-11.1,22.699-14.3,35L205,704.438z M368.3,675.837
|
||||||
c36.3,0.4,65.399,30.301,65,66.601c-0.4,36.3-30.301,65.399-66.601,65c-36.3-0.4-65.399-30.3-65-66.601
|
c36.3,0.4,65.399,30.301,65,66.601c-0.4,36.3-30.301,65.399-66.601,65c-36.3-0.4-65.399-30.3-65-66.601
|
||||||
C302.1,704.538,332,675.438,368.3,675.837z"/>
|
C302.1,704.538,332,675.438,368.3,675.837z"/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.1 KiB |
@ -1,47 +1,47 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
width="372.465px" height="372.465px" viewBox="0 0 372.465 372.465" style="enable-background:new 0 0 372.465 372.465;"
|
width="372.465px" height="372.465px" viewBox="0 0 372.465 372.465" style="enable-background:new 0 0 372.465 372.465;"
|
||||||
xml:space="preserve">
|
xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M101.98,186.441H30.484c-5.523,0-10,4.477-10,10v166.021c0,5.523,4.477,10,10,10h71.496c5.523,0,10-4.477,10-10V196.441
|
<path style="fill:#212121;" d="M101.98,186.441H30.484c-5.523,0-10,4.477-10,10v166.021c0,5.523,4.477,10,10,10h71.496c5.523,0,10-4.477,10-10V196.441
|
||||||
C111.98,190.919,107.503,186.441,101.98,186.441z"/>
|
C111.98,190.919,107.503,186.441,101.98,186.441z"/>
|
||||||
<path style="fill:#f44336;" d="M221.98,0h-71.496c-5.523,0-10,4.477-10,10v352.465c0,5.521,4.477,10,10,10h71.496c5.523,0,10-4.479,10-10V10
|
<path style="fill:#f44336;" d="M221.98,0h-71.496c-5.523,0-10,4.477-10,10v352.465c0,5.521,4.477,10,10,10h71.496c5.523,0,10-4.479,10-10V10
|
||||||
C231.98,4.477,227.504,0,221.98,0z"/>
|
C231.98,4.477,227.504,0,221.98,0z"/>
|
||||||
<path style="fill:#212121;" d="M341.98,115.257h-71.496c-5.523,0-10,4.477-10,10v237.208c0,5.521,4.477,10,10,10h71.496c5.523,0,10-4.479,10-10V125.257
|
<path style="fill:#212121;" d="M341.98,115.257h-71.496c-5.523,0-10,4.477-10,10v237.208c0,5.521,4.477,10,10,10h71.496c5.523,0,10-4.479,10-10V125.257
|
||||||
C351.98,119.734,347.504,115.257,341.98,115.257z"/>
|
C351.98,119.734,347.504,115.257,341.98,115.257z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
@ -1,48 +1,48 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 482 482" style="enable-background:new 0 0 482 482;" xml:space="preserve">
|
viewBox="0 0 482 482" style="enable-background:new 0 0 482 482;" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path style="fill:#212121;" d="M123.7,216.8H13.5c-7.5,0-13.5,6-13.5,13.5v225.4c0,7.5,6,13.5,13.5,13.5h110.2c7.5,0,13.5-6,13.5-13.5V230.3
|
<path style="fill:#212121;" d="M123.7,216.8H13.5c-7.5,0-13.5,6-13.5,13.5v225.4c0,7.5,6,13.5,13.5,13.5h110.2c7.5,0,13.5-6,13.5-13.5V230.3
|
||||||
C137.2,222.8,131.2,216.8,123.7,216.8z M110.2,442.2H27V243.8h83.2V442.2z"/>
|
C137.2,222.8,131.2,216.8,123.7,216.8z M110.2,442.2H27V243.8h83.2V442.2z"/>
|
||||||
<path style="fill:#212121;" d="M296.1,12.8H185.9c-7.5,0-13.5,6-13.5,13.5v429.4c0,7.5,6,13.5,13.5,13.5h110.2c7.5,0,13.5-6,13.5-13.5V26.3
|
<path style="fill:#212121;" d="M296.1,12.8H185.9c-7.5,0-13.5,6-13.5,13.5v429.4c0,7.5,6,13.5,13.5,13.5h110.2c7.5,0,13.5-6,13.5-13.5V26.3
|
||||||
C309.6,18.9,303.6,12.8,296.1,12.8z M199.4,39.8h25.3l-25.3,25.3V39.8z M282.6,442.2h-22.7l22.7-22.7V442.2z M282.6,381.3
|
C309.6,18.9,303.6,12.8,296.1,12.8z M199.4,39.8h25.3l-25.3,25.3V39.8z M282.6,442.2h-22.7l22.7-22.7V442.2z M282.6,381.3
|
||||||
c-0.1,0.1-0.1,0.1-0.2,0.2l-60.7,60.7h-22.3v-37.5l83.2-83.2L282.6,381.3L282.6,381.3z M282.6,283.4c-0.1,0.1-0.1,0.1-0.2,0.2
|
c-0.1,0.1-0.1,0.1-0.2,0.2l-60.7,60.7h-22.3v-37.5l83.2-83.2L282.6,381.3L282.6,381.3z M282.6,283.4c-0.1,0.1-0.1,0.1-0.2,0.2
|
||||||
l-83,83v-67.7l83.2-83.2L282.6,283.4L282.6,283.4z M282.6,177.5c-0.1,0.1-0.1,0.1-0.2,0.2l-83,83v-57.5l83.2-83.2L282.6,177.5
|
l-83,83v-67.7l83.2-83.2L282.6,283.4L282.6,283.4z M282.6,177.5c-0.1,0.1-0.1,0.1-0.2,0.2l-83,83v-57.5l83.2-83.2L282.6,177.5
|
||||||
L282.6,177.5z M282.6,81.8c-0.1,0.1-0.1,0.1-0.2,0.2l-83,83v-61.7l63.1-63.1c0.1-0.1,0.2-0.3,0.4-0.4h19.7V81.8z"/>
|
L282.6,177.5z M282.6,81.8c-0.1,0.1-0.1,0.1-0.2,0.2l-83,83v-61.7l63.1-63.1c0.1-0.1,0.2-0.3,0.4-0.4h19.7V81.8z"/>
|
||||||
<path style="fill:#212121;" d="M468.5,153H358.3c-7.5,0-13.5,6-13.5,13.5v289.2c0,7.5,6,13.5,13.5,13.5h110.2c7.5,0,13.5-6,13.5-13.5V166.5
|
<path style="fill:#212121;" d="M468.5,153H358.3c-7.5,0-13.5,6-13.5,13.5v289.2c0,7.5,6,13.5,13.5,13.5h110.2c7.5,0,13.5-6,13.5-13.5V166.5
|
||||||
C482,159,475.9,153,468.5,153z M455,442.2h-83.2V180H455V442.2z"/>
|
C482,159,475.9,153,468.5,153z M455,442.2h-83.2V180H455V442.2z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.5 KiB |
@ -1,43 +1,43 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
width="510px" height="510px" viewBox="0 0 510 510" style="enable-background:new 0 0 510 510;" xml:space="preserve">
|
width="510px" height="510px" viewBox="0 0 510 510" style="enable-background:new 0 0 510 510;" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g id="pause-circle-outline">
|
<g id="pause-circle-outline">
|
||||||
<path style="fill:#f44336;" d="M178.5,357h-25.5V153h204V357z"/>
|
<path style="fill:#f44336;" d="M178.5,357h-25.5V153h204V357z"/>
|
||||||
<path style="fill:#212121;" d="M255,0C114.75,0,0,114.75,0,255s114.75,255,255,255s255-114.75,255-255S395.25,0,255,0z
|
<path style="fill:#212121;" d="M255,0C114.75,0,0,114.75,0,255s114.75,255,255,255s255-114.75,255-255S395.25,0,255,0z
|
||||||
M255,459c-112.2,0-204-91.8-204-204S142.8,51,255,51s204,91.8,204,204S367.2,459,255,459z"/>
|
M255,459c-112.2,0-204-91.8-204-204S142.8,51,255,51s204,91.8,204,204S367.2,459,255,459z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 996 B After Width: | Height: | Size: 953 B |
@ -1,46 +1,46 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 233.576 233.576" style="enable-background:new 0 0 233.576 233.576;" xml:space="preserve">
|
viewBox="0 0 233.576 233.576" style="enable-background:new 0 0 233.576 233.576;" xml:space="preserve">
|
||||||
<path style="fill:#212121;" d="M176.982,129.274c-16.066-16.113-37.442-24.986-60.193-24.986s-44.128,8.873-60.193,24.986l-21.244-21.182
|
<path style="fill:#212121;" d="M176.982,129.274c-16.066-16.113-37.442-24.986-60.193-24.986s-44.128,8.873-60.193,24.986l-21.244-21.182
|
||||||
c21.735-21.799,50.657-33.805,81.438-33.805c30.781,0,59.703,12.005,81.438,33.805L176.982,129.274z"/>
|
c21.735-21.799,50.657-33.805,81.438-33.805c30.781,0,59.703,12.005,81.438,33.805L176.982,129.274z"/>
|
||||||
<path style="fill:#212121;" d="M116.788,54.288
|
<path style="fill:#212121;" d="M116.788,54.288
|
||||||
c36.109,0,70.045,14.076,95.554,39.636l21.234-21.192c-31.178-31.239-72.654-48.444-116.788-48.444
|
c36.109,0,70.045,14.076,95.554,39.636l21.234-21.192c-31.178-31.239-72.654-48.444-116.788-48.444
|
||||||
C72.653,24.288,31.178,41.493,0,72.732l21.234,21.192C46.743,68.364,80.678,54.288,116.788,54.288z"/>
|
C72.653,24.288,31.178,41.493,0,72.732l21.234,21.192C46.743,68.364,80.678,54.288,116.788,54.288z"/>
|
||||||
<path style="fill:#212121;" d="M162.885,143.465
|
<path style="fill:#212121;" d="M162.885,143.465
|
||||||
c-12.293-12.367-28.664-19.177-46.097-19.177c-17.432,0-33.803,6.811-46.097,19.177l21.275,21.151
|
c-12.293-12.367-28.664-19.177-46.097-19.177c-17.432,0-33.803,6.811-46.097,19.177l21.275,21.151
|
||||||
c6.621-6.66,15.437-10.328,24.821-10.328c9.386,0,18.2,3.667,24.819,10.327L162.885,143.465z"/>
|
c6.621-6.66,15.437-10.328,24.821-10.328c9.386,0,18.2,3.667,24.819,10.327L162.885,143.465z"/>
|
||||||
<path style="fill:#f44336;" d="M116.788,169.288
|
<path style="fill:#f44336;" d="M116.788,169.288
|
||||||
c-11.046,0-20,8.954-20,20s8.954,20,20,20c11.044,0,20-8.954,20-20S127.832,169.288,116.788,169.288z"/>
|
c-11.046,0-20,8.954-20,20s8.954,20,20,20c11.044,0,20-8.954,20-20S127.832,169.288,116.788,169.288z"/>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.4 KiB |
@ -1,46 +1,46 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 233.576 233.576" style="enable-background:new 0 0 233.576 233.576;" xml:space="preserve">
|
viewBox="0 0 233.576 233.576" style="enable-background:new 0 0 233.576 233.576;" xml:space="preserve">
|
||||||
<path style="fill:#4caf50;" d="M176.982,129.274c-16.066-16.113-37.442-24.986-60.193-24.986s-44.128,8.873-60.193,24.986l-21.244-21.182
|
<path style="fill:#4caf50;" d="M176.982,129.274c-16.066-16.113-37.442-24.986-60.193-24.986s-44.128,8.873-60.193,24.986l-21.244-21.182
|
||||||
c21.735-21.799,50.657-33.805,81.438-33.805c30.781,0,59.703,12.005,81.438,33.805L176.982,129.274z"/>
|
c21.735-21.799,50.657-33.805,81.438-33.805c30.781,0,59.703,12.005,81.438,33.805L176.982,129.274z"/>
|
||||||
<path style="fill:#4caf50;" d="M116.788,54.288
|
<path style="fill:#4caf50;" d="M116.788,54.288
|
||||||
c36.109,0,70.045,14.076,95.554,39.636l21.234-21.192c-31.178-31.239-72.654-48.444-116.788-48.444
|
c36.109,0,70.045,14.076,95.554,39.636l21.234-21.192c-31.178-31.239-72.654-48.444-116.788-48.444
|
||||||
C72.653,24.288,31.178,41.493,0,72.732l21.234,21.192C46.743,68.364,80.678,54.288,116.788,54.288z"/>
|
C72.653,24.288,31.178,41.493,0,72.732l21.234,21.192C46.743,68.364,80.678,54.288,116.788,54.288z"/>
|
||||||
<path style="fill:#4caf50;" d="M162.885,143.465
|
<path style="fill:#4caf50;" d="M162.885,143.465
|
||||||
c-12.293-12.367-28.664-19.177-46.097-19.177c-17.432,0-33.803,6.811-46.097,19.177l21.275,21.151
|
c-12.293-12.367-28.664-19.177-46.097-19.177c-17.432,0-33.803,6.811-46.097,19.177l21.275,21.151
|
||||||
c6.621-6.66,15.437-10.328,24.821-10.328c9.386,0,18.2,3.667,24.819,10.327L162.885,143.465z"/>
|
c6.621-6.66,15.437-10.328,24.821-10.328c9.386,0,18.2,3.667,24.819,10.327L162.885,143.465z"/>
|
||||||
<path style="fill:#f44336;" d="M116.788,169.288
|
<path style="fill:#f44336;" d="M116.788,169.288
|
||||||
c-11.046,0-20,8.954-20,20s8.954,20,20,20c11.044,0,20-8.954,20-20S127.832,169.288,116.788,169.288z"/>
|
c-11.046,0-20,8.954-20,20s8.954,20,20,20c11.044,0,20-8.954,20-20S127.832,169.288,116.788,169.288z"/>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.4 KiB |
@ -1,29 +1,29 @@
|
|||||||
<!DOCTYPE RCC><RCC version="1.0">
|
<!DOCTYPE RCC><RCC version="1.0">
|
||||||
<qresource>
|
<qresource>
|
||||||
<file alias="logo">icons/logo.svg</file>
|
<file alias="logo">icons/logo.svg</file>
|
||||||
<file alias="Exit">icons/off.svg</file>
|
<file alias="Exit">icons/off.svg</file>
|
||||||
<file alias="Open">icons/open-folder2.svg</file>
|
<file alias="Open">icons/open-folder2.svg</file>
|
||||||
<file alias="Reopen">icons/reload-folder2.svg</file>
|
<file alias="Reopen">icons/reload-folder2.svg</file>
|
||||||
<file alias="Reload">icons/reload.svg</file>
|
<file alias="Reload">icons/reload.svg</file>
|
||||||
<file alias="Expand">icons/expand.svg</file>
|
<file alias="Expand">icons/expand.svg</file>
|
||||||
<file alias="Collapse">icons/collapse.svg</file>
|
<file alias="Collapse">icons/collapse.svg</file>
|
||||||
<file alias="Color">icons/colors.svg</file>
|
<file alias="Color">icons/colors.svg</file>
|
||||||
<file alias="NoColor">icons/colors-black.svg</file>
|
<file alias="NoColor">icons/colors-black.svg</file>
|
||||||
<file alias="Save">icons/save.svg</file>
|
<file alias="Save">icons/save.svg</file>
|
||||||
<file alias="Stats">icons/statistics.svg</file>
|
<file alias="Stats">icons/statistics.svg</file>
|
||||||
<file alias="Stats-off">icons/statistics2.svg</file>
|
<file alias="Stats-off">icons/statistics2.svg</file>
|
||||||
<file alias="LAN">icons/lan.svg</file>
|
<file alias="LAN">icons/lan.svg</file>
|
||||||
<file alias="LAN-on">icons/lan_on.svg</file>
|
<file alias="LAN-on">icons/lan_on.svg</file>
|
||||||
<file alias="WiFi">icons/wifi.svg</file>
|
<file alias="WiFi">icons/wifi.svg</file>
|
||||||
<file alias="WiFi-on">icons/wifi_on.svg</file>
|
<file alias="WiFi-on">icons/wifi_on.svg</file>
|
||||||
<file alias="Connection">icons/lan.svg</file>
|
<file alias="Connection">icons/lan.svg</file>
|
||||||
<file alias="Connection-on">icons/lan_on.svg</file>
|
<file alias="Connection-on">icons/lan_on.svg</file>
|
||||||
<file alias="Start">icons/play.svg</file>
|
<file alias="Start">icons/play.svg</file>
|
||||||
<file alias="Stop">icons/stop.svg</file>
|
<file alias="Stop">icons/stop.svg</file>
|
||||||
<file alias="Delete">icons/delete.svg</file>
|
<file alias="Delete">icons/delete.svg</file>
|
||||||
<file alias="List">icons/list.svg</file>
|
<file alias="List">icons/list.svg</file>
|
||||||
<file alias="Search-next">icons/search-next.svg</file>
|
<file alias="Search-next">icons/search-next.svg</file>
|
||||||
<file alias="Search-prev">icons/search-prev.svg</file>
|
<file alias="Search-prev">icons/search-prev.svg</file>
|
||||||
<file alias="Settings">icons/settings.svg</file>
|
<file alias="Settings">icons/settings.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
480
sample/main.cpp
@ -1,240 +1,240 @@
|
|||||||
//#define FULL_DISABLE_PROFILER
|
//#define FULL_DISABLE_PROFILER
|
||||||
#include "easy/profiler.h"
|
#include "easy/profiler.h"
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
#include "easy/reader.h"
|
#include "easy/reader.h"
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
std::condition_variable cv;
|
std::condition_variable cv;
|
||||||
std::mutex cv_m;
|
std::mutex cv_m;
|
||||||
int g_i = 0;
|
int g_i = 0;
|
||||||
|
|
||||||
int OBJECTS = 500;
|
int OBJECTS = 500;
|
||||||
int MODELLING_STEPS = 1500;
|
int MODELLING_STEPS = 1500;
|
||||||
int RENDER_STEPS = 1500;
|
int RENDER_STEPS = 1500;
|
||||||
int RESOURCE_LOADING_COUNT = 50;
|
int RESOURCE_LOADING_COUNT = 50;
|
||||||
|
|
||||||
//#define SAMPLE_NETWORK_TEST
|
//#define SAMPLE_NETWORK_TEST
|
||||||
|
|
||||||
void localSleep(int magic=200000)
|
void localSleep(int magic=200000)
|
||||||
{
|
{
|
||||||
//PROFILER_BEGIN_FUNCTION_BLOCK_GROUPED(profiler::colors::Blue);
|
//PROFILER_BEGIN_FUNCTION_BLOCK_GROUPED(profiler::colors::Blue);
|
||||||
volatile int i = 0;
|
volatile int i = 0;
|
||||||
for (; i < magic; ++i);
|
for (; i < magic; ++i);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadingResources(){
|
void loadingResources(){
|
||||||
EASY_FUNCTION(profiler::colors::DarkCyan);
|
EASY_FUNCTION(profiler::colors::DarkCyan);
|
||||||
localSleep();
|
localSleep();
|
||||||
// std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
// std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||||
}
|
}
|
||||||
|
|
||||||
void prepareMath(){
|
void prepareMath(){
|
||||||
EASY_FUNCTION(profiler::colors::Green);
|
EASY_FUNCTION(profiler::colors::Green);
|
||||||
int* intarray = new int[OBJECTS];
|
int* intarray = new int[OBJECTS];
|
||||||
for (int i = 0; i < OBJECTS; ++i)
|
for (int i = 0; i < OBJECTS; ++i)
|
||||||
intarray[i] = i * i;
|
intarray[i] = i * i;
|
||||||
delete[] intarray;
|
delete[] intarray;
|
||||||
//std::this_thread::sleep_for(std::chrono::milliseconds(3));
|
//std::this_thread::sleep_for(std::chrono::milliseconds(3));
|
||||||
}
|
}
|
||||||
|
|
||||||
void calcIntersect(){
|
void calcIntersect(){
|
||||||
EASY_FUNCTION(profiler::colors::Gold);
|
EASY_FUNCTION(profiler::colors::Gold);
|
||||||
//int* intarray = new int[OBJECTS * OBJECTS];
|
//int* intarray = new int[OBJECTS * OBJECTS];
|
||||||
int* intarray = new int[OBJECTS];
|
int* intarray = new int[OBJECTS];
|
||||||
for (int i = 0; i < OBJECTS; ++i)
|
for (int i = 0; i < OBJECTS; ++i)
|
||||||
{
|
{
|
||||||
for (int j = i; j < OBJECTS; ++j)
|
for (int j = i; j < OBJECTS; ++j)
|
||||||
//intarray[i * OBJECTS + j] = i * j - i / 2 + (OBJECTS - j) * 5;
|
//intarray[i * OBJECTS + j] = i * j - i / 2 + (OBJECTS - j) * 5;
|
||||||
intarray[j] = i * j - i / 2 + (OBJECTS - j) * 5;
|
intarray[j] = i * j - i / 2 + (OBJECTS - j) * 5;
|
||||||
}
|
}
|
||||||
delete[] intarray;
|
delete[] intarray;
|
||||||
//std::this_thread::sleep_for(std::chrono::milliseconds(4));
|
//std::this_thread::sleep_for(std::chrono::milliseconds(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
double multModel(double i)
|
double multModel(double i)
|
||||||
{
|
{
|
||||||
EASY_FUNCTION(profiler::colors::PaleGold);
|
EASY_FUNCTION(profiler::colors::PaleGold);
|
||||||
return i * sin(i) * cos(i);
|
return i * sin(i) * cos(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
void calcPhys(){
|
void calcPhys(){
|
||||||
EASY_FUNCTION(profiler::colors::Amber);
|
EASY_FUNCTION(profiler::colors::Amber);
|
||||||
double* intarray = new double[OBJECTS];
|
double* intarray = new double[OBJECTS];
|
||||||
for (int i = 0; i < OBJECTS; ++i)
|
for (int i = 0; i < OBJECTS; ++i)
|
||||||
intarray[i] = multModel(double(i)) + double(i / 3) - double((OBJECTS - i) / 2);
|
intarray[i] = multModel(double(i)) + double(i / 3) - double((OBJECTS - i) / 2);
|
||||||
calcIntersect();
|
calcIntersect();
|
||||||
delete[] intarray;
|
delete[] intarray;
|
||||||
}
|
}
|
||||||
|
|
||||||
double calcSubbrain(int i)
|
double calcSubbrain(int i)
|
||||||
{
|
{
|
||||||
EASY_FUNCTION(profiler::colors::Navy);
|
EASY_FUNCTION(profiler::colors::Navy);
|
||||||
return i * i * i - i / 10 + (OBJECTS - i) * 7 ;
|
return i * i * i - i / 10 + (OBJECTS - i) * 7 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void calcBrain(){
|
void calcBrain(){
|
||||||
EASY_FUNCTION(profiler::colors::LightBlue);
|
EASY_FUNCTION(profiler::colors::LightBlue);
|
||||||
double* intarray = new double[OBJECTS];
|
double* intarray = new double[OBJECTS];
|
||||||
for (int i = 0; i < OBJECTS; ++i)
|
for (int i = 0; i < OBJECTS; ++i)
|
||||||
intarray[i] = calcSubbrain(i) + double(i * 180 / 3);
|
intarray[i] = calcSubbrain(i) + double(i * 180 / 3);
|
||||||
delete[] intarray;
|
delete[] intarray;
|
||||||
//std::this_thread::sleep_for(std::chrono::milliseconds(3));
|
//std::this_thread::sleep_for(std::chrono::milliseconds(3));
|
||||||
}
|
}
|
||||||
|
|
||||||
void calculateBehavior(){
|
void calculateBehavior(){
|
||||||
EASY_FUNCTION(profiler::colors::Blue);
|
EASY_FUNCTION(profiler::colors::Blue);
|
||||||
calcPhys();
|
calcPhys();
|
||||||
calcBrain();
|
calcBrain();
|
||||||
}
|
}
|
||||||
|
|
||||||
void modellingStep(){
|
void modellingStep(){
|
||||||
EASY_FUNCTION();
|
EASY_FUNCTION();
|
||||||
prepareMath();
|
prepareMath();
|
||||||
calculateBehavior();
|
calculateBehavior();
|
||||||
}
|
}
|
||||||
|
|
||||||
void prepareRender(){
|
void prepareRender(){
|
||||||
EASY_FUNCTION(profiler::colors::Brick);
|
EASY_FUNCTION(profiler::colors::Brick);
|
||||||
localSleep();
|
localSleep();
|
||||||
//std::this_thread::sleep_for(std::chrono::milliseconds(8));
|
//std::this_thread::sleep_for(std::chrono::milliseconds(8));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int multPhys(int i)
|
int multPhys(int i)
|
||||||
{
|
{
|
||||||
EASY_FUNCTION(profiler::colors::Red700, profiler::ON);
|
EASY_FUNCTION(profiler::colors::Red700, profiler::ON);
|
||||||
return i * i * i * i / 100;
|
return i * i * i * i / 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
int calcPhysicForObject(int i)
|
int calcPhysicForObject(int i)
|
||||||
{
|
{
|
||||||
EASY_FUNCTION(profiler::colors::Red);
|
EASY_FUNCTION(profiler::colors::Red);
|
||||||
return multPhys(i) + i / 3 - (OBJECTS - i) * 15;
|
return multPhys(i) + i / 3 - (OBJECTS - i) * 15;
|
||||||
}
|
}
|
||||||
|
|
||||||
void calculatePhysics(){
|
void calculatePhysics(){
|
||||||
EASY_FUNCTION(profiler::colors::Red);
|
EASY_FUNCTION(profiler::colors::Red);
|
||||||
unsigned int* intarray = new unsigned int[OBJECTS];
|
unsigned int* intarray = new unsigned int[OBJECTS];
|
||||||
for (int i = 0; i < OBJECTS; ++i)
|
for (int i = 0; i < OBJECTS; ++i)
|
||||||
intarray[i] = calcPhysicForObject(i);
|
intarray[i] = calcPhysicForObject(i);
|
||||||
delete[] intarray;
|
delete[] intarray;
|
||||||
//std::this_thread::sleep_for(std::chrono::milliseconds(8));
|
//std::this_thread::sleep_for(std::chrono::milliseconds(8));
|
||||||
}
|
}
|
||||||
|
|
||||||
void frame(){
|
void frame(){
|
||||||
EASY_FUNCTION(profiler::colors::Magenta);
|
EASY_FUNCTION(profiler::colors::Magenta);
|
||||||
prepareRender();
|
prepareRender();
|
||||||
calculatePhysics();
|
calculatePhysics();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadingResourcesThread(){
|
void loadingResourcesThread(){
|
||||||
//std::unique_lock<std::mutex> lk(cv_m);
|
//std::unique_lock<std::mutex> lk(cv_m);
|
||||||
//cv.wait(lk, []{return g_i == 1; });
|
//cv.wait(lk, []{return g_i == 1; });
|
||||||
EASY_THREAD("Resource loading");
|
EASY_THREAD("Resource loading");
|
||||||
#ifdef SAMPLE_NETWORK_TEST
|
#ifdef SAMPLE_NETWORK_TEST
|
||||||
while (true) {
|
while (true) {
|
||||||
#else
|
#else
|
||||||
for(int i = 0; i < RESOURCE_LOADING_COUNT; i++){
|
for(int i = 0; i < RESOURCE_LOADING_COUNT; i++){
|
||||||
#endif
|
#endif
|
||||||
loadingResources();
|
loadingResources();
|
||||||
EASY_EVENT("Resources Loading!", profiler::colors::Cyan);
|
EASY_EVENT("Resources Loading!", profiler::colors::Cyan);
|
||||||
localSleep(1200000);
|
localSleep(1200000);
|
||||||
//std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
//std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void modellingThread(){
|
void modellingThread(){
|
||||||
//std::unique_lock<std::mutex> lk(cv_m);
|
//std::unique_lock<std::mutex> lk(cv_m);
|
||||||
//cv.wait(lk, []{return g_i == 1; });
|
//cv.wait(lk, []{return g_i == 1; });
|
||||||
EASY_THREAD("Modelling");
|
EASY_THREAD("Modelling");
|
||||||
#ifdef SAMPLE_NETWORK_TEST
|
#ifdef SAMPLE_NETWORK_TEST
|
||||||
while (true) {
|
while (true) {
|
||||||
#else
|
#else
|
||||||
for (int i = 0; i < MODELLING_STEPS; i++){
|
for (int i = 0; i < MODELLING_STEPS; i++){
|
||||||
#endif
|
#endif
|
||||||
modellingStep();
|
modellingStep();
|
||||||
localSleep(1200000);
|
localSleep(1200000);
|
||||||
//std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
//std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void renderThread(){
|
void renderThread(){
|
||||||
//std::unique_lock<std::mutex> lk(cv_m);
|
//std::unique_lock<std::mutex> lk(cv_m);
|
||||||
//cv.wait(lk, []{return g_i == 1; });
|
//cv.wait(lk, []{return g_i == 1; });
|
||||||
EASY_THREAD("Render");
|
EASY_THREAD("Render");
|
||||||
#ifdef SAMPLE_NETWORK_TEST
|
#ifdef SAMPLE_NETWORK_TEST
|
||||||
while (true) {
|
while (true) {
|
||||||
#else
|
#else
|
||||||
for (int i = 0; i < RENDER_STEPS; i++){
|
for (int i = 0; i < RENDER_STEPS; i++){
|
||||||
#endif
|
#endif
|
||||||
frame();
|
frame();
|
||||||
localSleep(1200000);
|
localSleep(1200000);
|
||||||
//std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
//std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
if (argc > 1 && argv[1]){
|
if (argc > 1 && argv[1]){
|
||||||
OBJECTS = std::atoi(argv[1]);
|
OBJECTS = std::atoi(argv[1]);
|
||||||
}
|
}
|
||||||
if (argc > 2 && argv[2]){
|
if (argc > 2 && argv[2]){
|
||||||
MODELLING_STEPS = std::atoi(argv[2]);
|
MODELLING_STEPS = std::atoi(argv[2]);
|
||||||
}
|
}
|
||||||
if (argc > 3 && argv[3]){
|
if (argc > 3 && argv[3]){
|
||||||
RENDER_STEPS = std::atoi(argv[3]);
|
RENDER_STEPS = std::atoi(argv[3]);
|
||||||
}
|
}
|
||||||
if (argc > 4 && argv[4]){
|
if (argc > 4 && argv[4]){
|
||||||
RESOURCE_LOADING_COUNT = std::atoi(argv[4]);
|
RESOURCE_LOADING_COUNT = std::atoi(argv[4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << "Objects count: " << OBJECTS << std::endl;
|
std::cout << "Objects count: " << OBJECTS << std::endl;
|
||||||
std::cout << "Render steps: " << MODELLING_STEPS << std::endl;
|
std::cout << "Render steps: " << MODELLING_STEPS << std::endl;
|
||||||
std::cout << "Modelling steps: " << RENDER_STEPS << std::endl;
|
std::cout << "Modelling steps: " << RENDER_STEPS << std::endl;
|
||||||
std::cout << "Resource loading count: " << RESOURCE_LOADING_COUNT << std::endl;
|
std::cout << "Resource loading count: " << RESOURCE_LOADING_COUNT << std::endl;
|
||||||
|
|
||||||
auto start = std::chrono::system_clock::now();
|
auto start = std::chrono::system_clock::now();
|
||||||
|
|
||||||
#ifndef SAMPLE_NETWORK_TEST
|
#ifndef SAMPLE_NETWORK_TEST
|
||||||
EASY_PROFILER_ENABLE;
|
EASY_PROFILER_ENABLE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EASY_MAIN_THREAD;
|
EASY_MAIN_THREAD;
|
||||||
profiler::startListen();
|
profiler::startListen();
|
||||||
|
|
||||||
std::vector<std::thread> threads;
|
std::vector<std::thread> threads;
|
||||||
for (int i=0; i < 3; i++) {
|
for (int i=0; i < 3; i++) {
|
||||||
threads.emplace_back(loadingResourcesThread);
|
threads.emplace_back(loadingResourcesThread);
|
||||||
threads.emplace_back(renderThread);
|
threads.emplace_back(renderThread);
|
||||||
threads.emplace_back(modellingThread);
|
threads.emplace_back(modellingThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
cv_m.lock();
|
cv_m.lock();
|
||||||
g_i = 1;
|
g_i = 1;
|
||||||
cv_m.unlock();
|
cv_m.unlock();
|
||||||
cv.notify_all();
|
cv.notify_all();
|
||||||
|
|
||||||
modellingThread();
|
modellingThread();
|
||||||
|
|
||||||
for(auto& t : threads)
|
for(auto& t : threads)
|
||||||
t.join();
|
t.join();
|
||||||
|
|
||||||
auto end = std::chrono::system_clock::now();
|
auto end = std::chrono::system_clock::now();
|
||||||
auto elapsed =
|
auto elapsed =
|
||||||
std::chrono::duration_cast<std::chrono::microseconds>(end - start);
|
std::chrono::duration_cast<std::chrono::microseconds>(end - start);
|
||||||
|
|
||||||
std::cout << "Elapsed time: " << elapsed.count() << " usec" << std::endl;
|
std::cout << "Elapsed time: " << elapsed.count() << " usec" << std::endl;
|
||||||
|
|
||||||
auto blocks_count = profiler::dumpBlocksToFile("test.prof");
|
auto blocks_count = profiler::dumpBlocksToFile("test.prof");
|
||||||
|
|
||||||
std::cout << "Blocks count: " << blocks_count << std::endl;
|
std::cout << "Blocks count: " << blocks_count << std::endl;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|