mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-18 13:30:34 +01:00
Compare commits
275 Commits
9-dev-2021
...
ci-snapraf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d4d994628 | ||
|
|
d917c697b0 | ||
|
|
1be21782fd | ||
|
|
5c6b9f1829 | ||
|
|
9c55378f49 | ||
|
|
e367436358 | ||
|
|
c9ebdace04 | ||
|
|
3e6e38e566 | ||
|
|
c83d4e5aea | ||
|
|
0e9d09c62e | ||
|
|
fe66caf5ac | ||
|
|
c58d61594b | ||
|
|
3cd3535c18 | ||
|
|
97ecd26749 | ||
|
|
2e70d2e599 | ||
|
|
3dd0986c4f | ||
|
|
899caeabe9 | ||
|
|
a2b73ea2bc | ||
|
|
bf32219154 | ||
|
|
6a669f1399 | ||
|
|
4ab1ed7fc9 | ||
|
|
89d03e5503 | ||
|
|
9a6e1d2a61 | ||
|
|
fad6983cf1 | ||
|
|
daeec311b2 | ||
|
|
db8c76c184 | ||
|
|
2ec7e6aa45 | ||
|
|
021aea1d8b | ||
|
|
1f4dfdba3f | ||
|
|
f0694f0daf | ||
|
|
baf412614c | ||
|
|
e1865fec62 | ||
|
|
1e255af3be | ||
|
|
1c99cb5c2d | ||
|
|
4ca21a3bff | ||
|
|
189d92f2a9 | ||
|
|
34a7e0f3fe | ||
|
|
17290ae3b3 | ||
|
|
8b65d240db | ||
|
|
bce6a43427 | ||
|
|
1c52cd71a9 | ||
|
|
898edb6c12 | ||
|
|
de3fa988b1 | ||
|
|
b42aec7bdf | ||
|
|
ea46a92f3f | ||
|
|
6197d0215a | ||
|
|
6fd342e265 | ||
|
|
395d968ab5 | ||
|
|
e41b7f7d6c | ||
|
|
fabf0109ff | ||
|
|
cabfdc0a54 | ||
|
|
6f4122f65c | ||
|
|
ce21a812c0 | ||
|
|
5a51f6bace | ||
|
|
a38d97896d | ||
|
|
c4b0c1435c | ||
|
|
a4445c411d | ||
|
|
e92bd36f9b | ||
|
|
61ff8884e0 | ||
|
|
b8af2e9d1d | ||
|
|
8084fa8f29 | ||
|
|
1066e55262 | ||
|
|
edfb23be23 | ||
|
|
516a1a7826 | ||
|
|
be1d87c5d4 | ||
|
|
b48ba939de | ||
|
|
b1ad16d482 | ||
|
|
ceb54fbc6a | ||
|
|
e42bcb5ec9 | ||
|
|
9cbc3a2265 | ||
|
|
e93990a6e4 | ||
|
|
bb1a0767a3 | ||
|
|
0b7afe4781 | ||
|
|
9a3de1f780 | ||
|
|
0ff099fb52 | ||
|
|
05a2e4b37b | ||
|
|
830a70ac94 | ||
|
|
e63a8c8482 | ||
|
|
855162bb03 | ||
|
|
d2c15cf57b | ||
|
|
02ce65b3a9 | ||
|
|
0bf1f89c13 | ||
|
|
74c3ab1b82 | ||
|
|
062ae6e9eb | ||
|
|
dcc5a4dd0b | ||
|
|
ba638f52e5 | ||
|
|
ffd904749e | ||
|
|
c037d3ea0a | ||
|
|
087c8980f0 | ||
|
|
70f50ff362 | ||
|
|
904e805935 | ||
|
|
04d478882e | ||
|
|
35cd790c8f | ||
|
|
1a26133a78 | ||
|
|
a028b774bf | ||
|
|
72b7bc210f | ||
|
|
5fe2efca1a | ||
|
|
3ce09775ac | ||
|
|
3a53c2d53b | ||
|
|
7ba27ec9d9 | ||
|
|
d74dcdea6c | ||
|
|
9cb86a7e54 | ||
|
|
826991e6d6 | ||
|
|
53157afd12 | ||
|
|
a165a3cb28 | ||
|
|
1d20018a26 | ||
|
|
c02238cab8 | ||
|
|
35a40f1aba | ||
|
|
6e55a630b4 | ||
|
|
9a17c8f72c | ||
|
|
04c17ac5ac | ||
|
|
686bd8dff1 | ||
|
|
bd635b8e43 | ||
|
|
0bd0476cb1 | ||
|
|
d562ca8a39 | ||
|
|
a31bd6eb0d | ||
|
|
d114b097bf | ||
|
|
993eb58d46 | ||
|
|
7aa048740b | ||
|
|
306f4c7b54 | ||
|
|
4334c8ec8c | ||
|
|
7aabdd1781 | ||
|
|
bb48c4607a | ||
|
|
0600b85e8a | ||
|
|
688d9fe4c1 | ||
|
|
683095173e | ||
|
|
0d70ed53a9 | ||
|
|
7d33b48b3a | ||
|
|
d7e2ef283a | ||
|
|
782eaff4d2 | ||
|
|
9bd2ea22f3 | ||
|
|
ee4ce5db4e | ||
|
|
b90d06aa5c | ||
|
|
ba47a11282 | ||
|
|
4041073c96 | ||
|
|
8830204c0c | ||
|
|
d932f8ea01 | ||
|
|
8cfa852077 | ||
|
|
1a75eb19d0 | ||
|
|
ae9faa2192 | ||
|
|
e087270b6d | ||
|
|
b8263b03bc | ||
|
|
778837a770 | ||
|
|
09694ddec9 | ||
|
|
1572fafabe | ||
|
|
5709f469fc | ||
|
|
2ea9f8a2c6 | ||
|
|
a2e5989f3b | ||
|
|
e556abbab3 | ||
|
|
337dd7c13b | ||
|
|
34a3325ba9 | ||
|
|
02b385e0b7 | ||
|
|
e2454faa36 | ||
|
|
57e80e7b5e | ||
|
|
6505330b5f | ||
|
|
56685d0f30 | ||
|
|
ee7a752a52 | ||
|
|
7084f5bcf0 | ||
|
|
cd914c8726 | ||
|
|
beee4a06c8 | ||
|
|
98960f5b2b | ||
|
|
2bdecd3bd2 | ||
|
|
c22f3c84bb | ||
|
|
959dee7889 | ||
|
|
dd82a705d6 | ||
|
|
c744356b0f | ||
|
|
1073ebeebc | ||
|
|
b94ec0938b | ||
|
|
eed1223c1d | ||
|
|
291e163ee2 | ||
|
|
6e68e6047a | ||
|
|
ce8bd7fae3 | ||
|
|
94f66553ac | ||
|
|
c7579db674 | ||
|
|
478c7771b7 | ||
|
|
b46bf67c58 | ||
|
|
8c09399804 | ||
|
|
5055e93114 | ||
|
|
c70eb65259 | ||
|
|
ebeeb04aa4 | ||
|
|
f0413ce9a5 | ||
|
|
21bb3f8426 | ||
|
|
acf7478c8b | ||
|
|
f08811aca0 | ||
|
|
ea26f0b04e | ||
|
|
9485e3360b | ||
|
|
3e5713a512 | ||
|
|
58a3e72abe | ||
|
|
2252feca16 | ||
|
|
985988ee53 | ||
|
|
1cc162867f | ||
|
|
91ac46df83 | ||
|
|
f01b15d00a | ||
|
|
3fdba11c73 | ||
|
|
7afa1b8a59 | ||
|
|
6f197c2bb7 | ||
|
|
5b788c177b | ||
|
|
204b53cd00 | ||
|
|
a646359d51 | ||
|
|
91f034272c | ||
|
|
aefae7b73b | ||
|
|
107d7ff806 | ||
|
|
8b1f2fb0d9 | ||
|
|
7c6fca2aac | ||
|
|
c6e3e385ff | ||
|
|
089f260d9b | ||
|
|
09e345ee4a | ||
|
|
828424cae8 | ||
|
|
dca643f7aa | ||
|
|
cc327cb761 | ||
|
|
c03f2b605f | ||
|
|
7ce23598e4 | ||
|
|
3097a59c68 | ||
|
|
53178cf17a | ||
|
|
6d02cd1779 | ||
|
|
1839e988f6 | ||
|
|
543c706e0c | ||
|
|
5af8665e24 | ||
|
|
86595f4114 | ||
|
|
f8cc42e3a7 | ||
|
|
085f56d192 | ||
|
|
b580c2bb73 | ||
|
|
c6e168bb20 | ||
|
|
a2a0c166d9 | ||
|
|
96d6e21e2f | ||
|
|
4093d1fa27 | ||
|
|
de80d10f5e | ||
|
|
1699ad9dd8 | ||
|
|
e9a5fded5c | ||
|
|
a8d42b0f9a | ||
|
|
b69c7b1027 | ||
|
|
7b0a581008 | ||
|
|
4f1a6d55e5 | ||
|
|
1048cef845 | ||
|
|
dccbf92964 | ||
|
|
626bf4ce9c | ||
|
|
1f22a5a0a8 | ||
|
|
ce4729e1c0 | ||
|
|
d99b035aa6 | ||
|
|
ad77482235 | ||
|
|
b02ed7fe51 | ||
|
|
58efc14633 | ||
|
|
b03deb8e3e | ||
|
|
580bb07685 | ||
|
|
818e5ef484 | ||
|
|
bd6920e049 | ||
|
|
377f8b1521 | ||
|
|
67dbc798aa | ||
|
|
6d17f3d0ad | ||
|
|
5fc5a33543 | ||
|
|
337a2a45b4 | ||
|
|
8cb2fcc09c | ||
|
|
8547940ab2 | ||
|
|
f52ed8cf51 | ||
|
|
ccfb46b354 | ||
|
|
c640d96bca | ||
|
|
37e74b397e | ||
|
|
9135099dbf | ||
|
|
76d68f5025 | ||
|
|
710067969e | ||
|
|
ddc171cfa2 | ||
|
|
896ffb9c72 | ||
|
|
db8529c536 | ||
|
|
fcab77420d | ||
|
|
8c554e875d | ||
|
|
5ef073b6c1 | ||
|
|
895417c98c | ||
|
|
374805d6ab | ||
|
|
b08c2bd90b | ||
|
|
4dd2dc259f | ||
|
|
80601a415a | ||
|
|
cc6f66ad11 | ||
|
|
30dc34ebe1 | ||
|
|
efed7ab5c0 | ||
|
|
f410fbf7e2 |
20
.github/workflows/publish-edge-snap.yml
vendored
Normal file
20
.github/workflows/publish-edge-snap.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: Publish Edge Snap
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
publish_amd64:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: snapcore/action-build@v1
|
||||
id: build
|
||||
- uses: snapcore/action-publish@v1
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.STORE_LOGIN }}
|
||||
with:
|
||||
snap: ${{ steps.build.outputs.snap }}
|
||||
release: edge
|
||||
@@ -3,6 +3,31 @@ Changelog
|
||||
|
||||
If by accident I have forgotten to credit someone in the CHANGELOG, email me and I will fix it.
|
||||
|
||||
__3.3.4__
|
||||
---------
|
||||
|
||||
* Fix compilation under Qt 6.2+ and stricter Qt compile settings. - _Christoph Cullmann_
|
||||
|
||||
__3.3.3__
|
||||
---------
|
||||
|
||||
* Support for Qt 6.3+ - Fixed deprecated `QCryptographicHash::addData()` that will only support `QByteArrayView` going further. - _Moody Liu_
|
||||
|
||||
__3.3.2__
|
||||
---------
|
||||
|
||||
* Fixed crash caused by sending a `writeAck` on a removed connection. - _Nicolas Werner_
|
||||
|
||||
__3.3.1__
|
||||
---------
|
||||
|
||||
* Added support for _AppImage_ dynamic executable paths. - _Michael Klein_
|
||||
|
||||
__3.3.0__
|
||||
---------
|
||||
|
||||
* Fixed message fragmentation issue causing crashes and incorrectly / inconsistently received messages. - _Nils Jeisecke_
|
||||
|
||||
__3.2.0__
|
||||
---------
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.7.0)
|
||||
cmake_minimum_required(VERSION 3.12.0)
|
||||
|
||||
project(SingleApplication LANGUAGES CXX)
|
||||
|
||||
@@ -38,3 +38,13 @@ endif()
|
||||
|
||||
target_compile_definitions(${PROJECT_NAME} PUBLIC QAPPLICATION_CLASS=${QAPPLICATION_CLASS})
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||
QT_NO_CAST_TO_ASCII
|
||||
QT_NO_CAST_FROM_ASCII
|
||||
QT_NO_URL_CAST_FROM_STRING
|
||||
QT_NO_CAST_FROM_BYTEARRAY
|
||||
QT_USE_QSTRINGBUILDER
|
||||
QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
|
||||
QT_NO_KEYWORDS
|
||||
QT_NO_FOREACH
|
||||
)
|
||||
|
||||
@@ -35,7 +35,7 @@ To include the library files I would recommend that you add it as a git
|
||||
submodule to your project. Here is how:
|
||||
|
||||
```bash
|
||||
git submodule add git@github.com:itay-grudev/SingleApplication.git singleapplication
|
||||
git submodule add https://github.com/itay-grudev/SingleApplication.git singleapplication
|
||||
```
|
||||
|
||||
**Qmake:**
|
||||
@@ -182,7 +182,8 @@ bool SingleApplication::sendMessage( QByteArray message, int timeout = 100 )
|
||||
```
|
||||
|
||||
Sends `message` to the Primary Instance. Uses `timeout` as a the maximum timeout
|
||||
in milliseconds for blocking functions
|
||||
in milliseconds for blocking functions. Returns `true` if the message has been sent
|
||||
successfully. If the message can't be sent or the function timeouts - returns `false`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// Allow secondary instances
|
||||
SingleApplication app( argc, argv );
|
||||
|
||||
qWarning() << "Started a new instance";
|
||||
|
||||
@@ -248,10 +248,7 @@ bool SingleApplication::sendMessage( const QByteArray &message, int timeout )
|
||||
if( ! d->connectToPrimary( timeout, SingleApplicationPrivate::Reconnect ) )
|
||||
return false;
|
||||
|
||||
d->socket->write( message );
|
||||
bool dataWritten = d->socket->waitForBytesWritten( timeout );
|
||||
d->socket->flush();
|
||||
return dataWritten;
|
||||
return d->writeConfirmedMessage( timeout, message );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -131,21 +131,34 @@ QString SingleApplicationPrivate::getUsername()
|
||||
void SingleApplicationPrivate::genBlockServerName()
|
||||
{
|
||||
QCryptographicHash appData( QCryptographicHash::Sha256 );
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 3, 0)
|
||||
appData.addData( "SingleApplication", 17 );
|
||||
#else
|
||||
appData.addData( QByteArrayView{"SingleApplication"} );
|
||||
#endif
|
||||
appData.addData( SingleApplication::app_t::applicationName().toUtf8() );
|
||||
appData.addData( SingleApplication::app_t::organizationName().toUtf8() );
|
||||
appData.addData( SingleApplication::app_t::organizationDomain().toUtf8() );
|
||||
|
||||
if ( ! appDataList.isEmpty() )
|
||||
appData.addData( appDataList.join( "" ).toUtf8() );
|
||||
appData.addData( appDataList.join(QString()).toUtf8() );
|
||||
|
||||
if( ! (options & SingleApplication::Mode::ExcludeAppVersion) ){
|
||||
appData.addData( SingleApplication::app_t::applicationVersion().toUtf8() );
|
||||
}
|
||||
|
||||
if( ! (options & SingleApplication::Mode::ExcludeAppPath) ){
|
||||
#ifdef Q_OS_WIN
|
||||
#if defined(Q_OS_WIN)
|
||||
appData.addData( SingleApplication::app_t::applicationFilePath().toLower().toUtf8() );
|
||||
#elif defined(Q_OS_LINUX)
|
||||
// If the application is running as an AppImage then the APPIMAGE env var should be used
|
||||
// instead of applicationPath() as each instance is launched with its own executable path
|
||||
const QByteArray appImagePath = qgetenv( "APPIMAGE" );
|
||||
if( appImagePath.isEmpty() ){ // Not running as AppImage: use path to executable file
|
||||
appData.addData( SingleApplication::app_t::applicationFilePath().toUtf8() );
|
||||
} else { // Running as AppImage: Use absolute path to AppImage file
|
||||
appData.addData( appImagePath );
|
||||
};
|
||||
#else
|
||||
appData.addData( SingleApplication::app_t::applicationFilePath().toUtf8() );
|
||||
#endif
|
||||
@@ -158,7 +171,7 @@ void SingleApplicationPrivate::genBlockServerName()
|
||||
|
||||
// Replace the backslash in RFC 2045 Base64 [a-zA-Z0-9+/=] to comply with
|
||||
// server naming requirements.
|
||||
blockServerName = appData.result().toBase64().replace("/", "_");
|
||||
blockServerName = QString::fromUtf8(appData.result().toBase64().replace("/", "_"));
|
||||
}
|
||||
|
||||
void SingleApplicationPrivate::initializeMemoryBlock() const
|
||||
@@ -257,26 +270,52 @@ bool SingleApplicationPrivate::connectToPrimary( int msecs, ConnectionType conne
|
||||
writeStream << static_cast<quint8>(connectionType);
|
||||
writeStream << instanceNumber;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
quint16 checksum = qChecksum(QByteArray(initMsg, static_cast<quint32>(initMsg.length())));
|
||||
quint16 checksum = qChecksum(QByteArray(initMsg.constData(), static_cast<quint32>(initMsg.length())));
|
||||
#else
|
||||
quint16 checksum = qChecksum(initMsg.constData(), static_cast<quint32>(initMsg.length()));
|
||||
#endif
|
||||
writeStream << checksum;
|
||||
|
||||
// The header indicates the message length that follows
|
||||
return writeConfirmedMessage( static_cast<int>(msecs - time.elapsed()), initMsg );
|
||||
}
|
||||
|
||||
void SingleApplicationPrivate::writeAck( QLocalSocket *sock ) {
|
||||
sock->putChar('\n');
|
||||
}
|
||||
|
||||
bool SingleApplicationPrivate::writeConfirmedMessage (int msecs, const QByteArray &msg)
|
||||
{
|
||||
QElapsedTimer time;
|
||||
time.start();
|
||||
|
||||
// Frame 1: The header indicates the message length that follows
|
||||
QByteArray header;
|
||||
QDataStream headerStream(&header, QIODevice::WriteOnly);
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
||||
headerStream.setVersion(QDataStream::Qt_5_6);
|
||||
#endif
|
||||
headerStream << static_cast <quint64>( initMsg.length() );
|
||||
headerStream << static_cast <quint64>( msg.length() );
|
||||
|
||||
socket->write( header );
|
||||
socket->write( initMsg );
|
||||
bool result = socket->waitForBytesWritten( static_cast<int>(msecs - time.elapsed()) );
|
||||
if( ! writeConfirmedFrame( static_cast<int>(msecs - time.elapsed()), header ))
|
||||
return false;
|
||||
|
||||
// Frame 2: The message
|
||||
return writeConfirmedFrame( static_cast<int>(msecs - time.elapsed()), msg );
|
||||
}
|
||||
|
||||
bool SingleApplicationPrivate::writeConfirmedFrame( int msecs, const QByteArray &msg )
|
||||
{
|
||||
socket->write( msg );
|
||||
socket->flush();
|
||||
return result;
|
||||
|
||||
bool result = socket->waitForReadyRead( msecs ); // await ack byte
|
||||
if (result) {
|
||||
socket->read( 1 );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
quint16 SingleApplicationPrivate::blockChecksum() const
|
||||
@@ -321,33 +360,36 @@ void SingleApplicationPrivate::slotConnectionEstablished()
|
||||
QLocalSocket *nextConnSocket = server->nextPendingConnection();
|
||||
connectionMap.insert(nextConnSocket, ConnectionInfo());
|
||||
|
||||
QObject::connect(nextConnSocket, &QLocalSocket::aboutToClose,
|
||||
QObject::connect(nextConnSocket, &QLocalSocket::aboutToClose, this,
|
||||
[nextConnSocket, this](){
|
||||
auto &info = connectionMap[nextConnSocket];
|
||||
Q_EMIT this->slotClientConnectionClosed( nextConnSocket, info.instanceId );
|
||||
this->slotClientConnectionClosed( nextConnSocket, info.instanceId );
|
||||
}
|
||||
);
|
||||
|
||||
QObject::connect(nextConnSocket, &QLocalSocket::disconnected, nextConnSocket, &QLocalSocket::deleteLater);
|
||||
|
||||
QObject::connect(nextConnSocket, &QLocalSocket::destroyed,
|
||||
QObject::connect(nextConnSocket, &QLocalSocket::destroyed, this,
|
||||
[nextConnSocket, this](){
|
||||
connectionMap.remove(nextConnSocket);
|
||||
}
|
||||
);
|
||||
|
||||
QObject::connect(nextConnSocket, &QLocalSocket::readyRead,
|
||||
QObject::connect(nextConnSocket, &QLocalSocket::readyRead, this,
|
||||
[nextConnSocket, this](){
|
||||
auto &info = connectionMap[nextConnSocket];
|
||||
switch(info.stage){
|
||||
case StageHeader:
|
||||
readInitMessageHeader(nextConnSocket);
|
||||
case StageInitHeader:
|
||||
readMessageHeader( nextConnSocket, StageInitBody );
|
||||
break;
|
||||
case StageBody:
|
||||
case StageInitBody:
|
||||
readInitMessageBody(nextConnSocket);
|
||||
break;
|
||||
case StageConnected:
|
||||
Q_EMIT this->slotDataAvailable( nextConnSocket, info.instanceId );
|
||||
case StageConnectedHeader:
|
||||
readMessageHeader( nextConnSocket, StageConnectedBody );
|
||||
break;
|
||||
case StageConnectedBody:
|
||||
this->slotDataAvailable( nextConnSocket, info.instanceId );
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -356,7 +398,7 @@ void SingleApplicationPrivate::slotConnectionEstablished()
|
||||
);
|
||||
}
|
||||
|
||||
void SingleApplicationPrivate::readInitMessageHeader( QLocalSocket *sock )
|
||||
void SingleApplicationPrivate::readMessageHeader( QLocalSocket *sock, SingleApplicationPrivate::ConnectionStage nextStage )
|
||||
{
|
||||
if (!connectionMap.contains( sock )){
|
||||
return;
|
||||
@@ -376,29 +418,35 @@ void SingleApplicationPrivate::readInitMessageHeader( QLocalSocket *sock )
|
||||
quint64 msgLen = 0;
|
||||
headerStream >> msgLen;
|
||||
ConnectionInfo &info = connectionMap[sock];
|
||||
info.stage = StageBody;
|
||||
info.stage = nextStage;
|
||||
info.msgLen = msgLen;
|
||||
|
||||
if ( sock->bytesAvailable() >= (qint64) msgLen ){
|
||||
readInitMessageBody( sock );
|
||||
writeAck( sock );
|
||||
}
|
||||
|
||||
bool SingleApplicationPrivate::isFrameComplete( QLocalSocket *sock )
|
||||
{
|
||||
if (!connectionMap.contains( sock )){
|
||||
return false;
|
||||
}
|
||||
|
||||
ConnectionInfo &info = connectionMap[sock];
|
||||
if( sock->bytesAvailable() < ( qint64 )info.msgLen ){
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SingleApplicationPrivate::readInitMessageBody( QLocalSocket *sock )
|
||||
{
|
||||
Q_Q(SingleApplication);
|
||||
|
||||
if (!connectionMap.contains( sock )){
|
||||
if( !isFrameComplete( sock ) )
|
||||
return;
|
||||
}
|
||||
|
||||
ConnectionInfo &info = connectionMap[sock];
|
||||
if( sock->bytesAvailable() < ( qint64 )info.msgLen ){
|
||||
return;
|
||||
}
|
||||
|
||||
// Read the message body
|
||||
QByteArray msgBytes = sock->read(info.msgLen);
|
||||
QByteArray msgBytes = sock->readAll();
|
||||
QDataStream readStream(msgBytes);
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
||||
@@ -424,7 +472,7 @@ void SingleApplicationPrivate::readInitMessageBody( QLocalSocket *sock )
|
||||
readStream >> msgChecksum;
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
const quint16 actualChecksum = qChecksum(QByteArray(msgBytes, static_cast<quint32>(msgBytes.length() - sizeof(quint16))));
|
||||
const quint16 actualChecksum = qChecksum(QByteArray(msgBytes.constData(), static_cast<quint32>(msgBytes.length() - sizeof(quint16))));
|
||||
#else
|
||||
const quint16 actualChecksum = qChecksum(msgBytes.constData(), static_cast<quint32>(msgBytes.length() - sizeof(quint16)));
|
||||
#endif
|
||||
@@ -438,8 +486,9 @@ void SingleApplicationPrivate::readInitMessageBody( QLocalSocket *sock )
|
||||
return;
|
||||
}
|
||||
|
||||
ConnectionInfo &info = connectionMap[sock];
|
||||
info.instanceId = instanceId;
|
||||
info.stage = StageConnected;
|
||||
info.stage = StageConnectedHeader;
|
||||
|
||||
if( connectionType == NewInstance ||
|
||||
( connectionType == SecondaryInstance &&
|
||||
@@ -448,21 +497,30 @@ void SingleApplicationPrivate::readInitMessageBody( QLocalSocket *sock )
|
||||
Q_EMIT q->instanceStarted();
|
||||
}
|
||||
|
||||
if (sock->bytesAvailable() > 0){
|
||||
Q_EMIT this->slotDataAvailable( sock, instanceId );
|
||||
}
|
||||
writeAck( sock );
|
||||
}
|
||||
|
||||
void SingleApplicationPrivate::slotDataAvailable( QLocalSocket *dataSocket, quint32 instanceId )
|
||||
{
|
||||
Q_Q(SingleApplication);
|
||||
Q_EMIT q->receivedMessage( instanceId, dataSocket->readAll() );
|
||||
|
||||
if ( !isFrameComplete( dataSocket ) )
|
||||
return;
|
||||
|
||||
const QByteArray message = dataSocket->readAll();
|
||||
|
||||
writeAck( dataSocket );
|
||||
|
||||
ConnectionInfo &info = connectionMap[dataSocket];
|
||||
info.stage = StageConnectedHeader;
|
||||
|
||||
Q_EMIT q->receivedMessage( instanceId, message);
|
||||
}
|
||||
|
||||
void SingleApplicationPrivate::slotClientConnectionClosed( QLocalSocket *closedSocket, quint32 instanceId )
|
||||
{
|
||||
if( closedSocket->bytesAvailable() > 0 )
|
||||
Q_EMIT slotDataAvailable( closedSocket, instanceId );
|
||||
slotDataAvailable( closedSocket, instanceId );
|
||||
}
|
||||
|
||||
void SingleApplicationPrivate::randomSleep()
|
||||
@@ -471,7 +529,7 @@ void SingleApplicationPrivate::randomSleep()
|
||||
QThread::msleep( QRandomGenerator::global()->bounded( 8u, 18u ));
|
||||
#else
|
||||
qsrand( QDateTime::currentMSecsSinceEpoch() % std::numeric_limits<uint>::max() );
|
||||
QThread::msleep( 8 + static_cast <unsigned long>( static_cast <float>( qrand() ) / RAND_MAX * 10 ));
|
||||
QThread::msleep( qrand() % 11 + 8);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -61,9 +61,10 @@ public:
|
||||
Reconnect = 3
|
||||
};
|
||||
enum ConnectionStage : quint8 {
|
||||
StageHeader = 0,
|
||||
StageBody = 1,
|
||||
StageConnected = 2,
|
||||
StageInitHeader = 0,
|
||||
StageInitBody = 1,
|
||||
StageConnectedHeader = 2,
|
||||
StageConnectedBody = 3,
|
||||
};
|
||||
Q_DECLARE_PUBLIC(SingleApplication)
|
||||
|
||||
@@ -79,8 +80,12 @@ public:
|
||||
quint16 blockChecksum() const;
|
||||
qint64 primaryPid() const;
|
||||
QString primaryUser() const;
|
||||
void readInitMessageHeader(QLocalSocket *socket);
|
||||
bool isFrameComplete(QLocalSocket *sock);
|
||||
void readMessageHeader(QLocalSocket *socket, ConnectionStage nextStage);
|
||||
void readInitMessageBody(QLocalSocket *socket);
|
||||
void writeAck(QLocalSocket *sock);
|
||||
bool writeConfirmedFrame(int msecs, const QByteArray &msg);
|
||||
bool writeConfirmedMessage(int msecs, const QByteArray &msg);
|
||||
static void randomSleep();
|
||||
void addAppData(const QString &data);
|
||||
QStringList appData() const;
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
"--socket=fallback-x11",
|
||||
"--device=dri",
|
||||
"--share=ipc",
|
||||
"--share=network",
|
||||
"--socket=cups",
|
||||
"--filesystem=host"
|
||||
],
|
||||
"modules": [
|
||||
@@ -100,8 +102,8 @@
|
||||
"sources": [
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/45/be/d5940d365ebf256e490bc6c10837244e0b8dda08a7d790691767263c318d/qet_tb_generator-1.2.5.tar.gz",
|
||||
"sha256": "37c3298602244f3152fbb7601caba9b4862bac782991fbb472eab91afb70d09c"
|
||||
"url": "https://files.pythonhosted.org/packages/70/aa/ebde0dddfbde799a4e8cf0564e52f95089105a7f562739ee1d16ff5a495a/qet_tb_generator-1.3.1.tar.gz",
|
||||
"sha256": "52c9836387d54bc30ea29272068ec156fc65c3905e0cb863afd9418abc3c0907"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,15 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
# a KDE session forces the KDE Plasma platformtheme which is incompatible with QET
|
||||
# unset the ENV vars in that case to prevent loading of the theme
|
||||
if [ ! -z "$KDE_FULL_SESSION" ]; then
|
||||
unset KDE_FULL_SESSION
|
||||
fi
|
||||
|
||||
if echo "$XDG_CURRENT_DESKTOP" | grep -q KDE; then
|
||||
unset XDG_CURRENT_DESKTOP
|
||||
fi
|
||||
|
||||
# migrate .qet directory from SNAP_USER_DATA to SNAP_USER_COMMON
|
||||
from="$SNAP_USER_DATA/.qet"
|
||||
to="$SNAP_USER_COMMON/.qet"
|
||||
@@ -23,12 +13,4 @@ fi
|
||||
mkdir -p "$HOME/.qet"
|
||||
ln -snf "$SNAP/bin/DXFtoQET" "$HOME/.qet/DXFtoQET"
|
||||
|
||||
# start desktop portal. Open & save dialogs might fail if it is not running
|
||||
dbus-send --print-reply \
|
||||
--dest=org.freedesktop.DBus \
|
||||
/org/freedesktop/DBus \
|
||||
org.freedesktop.DBus.StartServiceByName \
|
||||
string:org.freedesktop.portal.Desktop \
|
||||
uint32:0
|
||||
|
||||
exec "${@}"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: qelectrotech
|
||||
title: QElectroTech
|
||||
base: core18
|
||||
base: core20
|
||||
adopt-info: qelectrotech
|
||||
license: GPL-2.0
|
||||
summary: Electrical diagram editor
|
||||
@@ -10,6 +10,7 @@ description: |
|
||||
|
||||
grade: stable
|
||||
confinement: strict
|
||||
compression: lzo
|
||||
|
||||
architectures:
|
||||
- build-on: amd64
|
||||
@@ -30,15 +31,14 @@ apps:
|
||||
extensions: [kde-neon]
|
||||
plugs: &plugs [opengl, unity7, home, removable-media, gsettings, network, cups-control]
|
||||
environment: &env
|
||||
__EGL_VENDOR_LIBRARY_DIRS: $SNAP/kf5/usr/share/glvnd/egl_vendor.d:$SNAP/usr/share/glvnd/egl_vendor.d
|
||||
TCL_LIBRARY: $SNAP/usr/share/tcltk/tcl8.6
|
||||
QT_QPA_PLATFORMTHEME: gtk3
|
||||
QT_AUTO_SCREEN_SCALE_FACTOR: 1
|
||||
HOME: $SNAP_USER_COMMON
|
||||
PYTHONPATH: $SNAP:$SNAP/lib/python3.6/site-packages:$SNAP/usr/lib/python3.6:$SNAP/usr/lib/python3.6/lib-dynload
|
||||
PYTHONPATH: $SNAP:$SNAP/lib/python3.8/site-packages:$SNAP/usr/lib/python3.8:$SNAP/usr/lib/python3.8/lib-dynload
|
||||
|
||||
qet-tb-generator:
|
||||
command: bin/qelectrotech-launch $SNAP/bin/qet_tb_generator
|
||||
command: bin/qet_tb_generator
|
||||
command-chain:
|
||||
- bin/qelectrotech-launch
|
||||
extensions: [kde-neon]
|
||||
plugs: *plugs
|
||||
environment: *env
|
||||
@@ -58,8 +58,7 @@ parts:
|
||||
|
||||
qet-tb-generator:
|
||||
plugin: python
|
||||
python-version: python3
|
||||
source: https://github.com/qelectrotech/qet_tb_generator.git
|
||||
source: https://github.com/raulroda/qet_tb_generator-plugin.git
|
||||
python-packages: [PySimpleGUI]
|
||||
stage-packages:
|
||||
- python3-lxml
|
||||
@@ -69,15 +68,15 @@ parts:
|
||||
kde-sdk-setup:
|
||||
plugin: nil
|
||||
build-snaps:
|
||||
- kde-frameworks-5-core18-sdk
|
||||
- kde-frameworks-5-qt-5-15-3-core20-sdk
|
||||
build-packages:
|
||||
- g++
|
||||
- mesa-common-dev
|
||||
- libglvnd-dev
|
||||
- rsync
|
||||
override-build: |
|
||||
rsync -a --ignore-existing /snap/kde-frameworks-5-core18-sdk/current/ /
|
||||
|
||||
rsync -a --ignore-existing /snap/kde-frameworks-5-qt-5-15-3-core20-sdk/current/ /
|
||||
|
||||
dxf-to-qet:
|
||||
after: [kde-sdk-setup]
|
||||
plugin: nil
|
||||
@@ -92,19 +91,18 @@ parts:
|
||||
after: [kde-sdk-setup]
|
||||
plugin: nil
|
||||
source: .
|
||||
stage-packages: [ git, sqlite3 ]
|
||||
stage-packages: [ git, sqlite3, xdg-user-dirs ]
|
||||
build-packages:
|
||||
- git
|
||||
- libsqlite3-dev
|
||||
override-pull: |
|
||||
snapcraftctl pull
|
||||
snap_version=$(git describe --dirty)
|
||||
modified_displayed_version=$snap_version".snap"
|
||||
override-build: |
|
||||
displayed_version=$(grep "displayedVersion" sources/qet.h | tr -d "\";" | cut -d" " -f5)
|
||||
snap_version="${displayed_version}-g$(git rev-parse --short=8 HEAD)"
|
||||
modified_displayed_version="${snap_version}.snap"
|
||||
sed -i -E "s|const QString displayedVersion =.*|const QString displayedVersion =\"$modified_displayed_version\";|" sources/qet.h
|
||||
snapcraftctl set-version "$snap_version"
|
||||
override-build: |
|
||||
qmake "$SNAPCRAFT_PART_SRC/qelectrotech.pro"
|
||||
make -j$(nproc)
|
||||
make -j${SNAPCRAFT_PARALLEL_BUILD_COUNT}
|
||||
make install INSTALL_ROOT="$SNAPCRAFT_PART_INSTALL"
|
||||
override-stage: |
|
||||
snapcraftctl stage
|
||||
@@ -115,11 +113,14 @@ parts:
|
||||
cleanup:
|
||||
after: [qelectrotech, dxf-to-qet, qet-tb-generator]
|
||||
plugin: nil
|
||||
build-snaps: [core18, kde-frameworks-5-core18]
|
||||
build-snaps: [kde-frameworks-5-qt-5-15-3-core20]
|
||||
override-prime: |
|
||||
# Remove all files from snap that are already included in the base snap or in
|
||||
# any connected content snaps
|
||||
set -eux
|
||||
for snap in "core18" "kde-frameworks-5-core18"; do # List all content-snaps and base snaps you're using here
|
||||
cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$SNAPCRAFT_PRIME/{}" \;
|
||||
for snap in "kde-frameworks-5-qt-5-15-3-core20"; do # List all content-snaps you're using here
|
||||
cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$SNAPCRAFT_PRIME/{}" "$SNAPCRAFT_PRIME/usr/{}" \;
|
||||
done
|
||||
for cruft in bug lintian man; do
|
||||
rm -rf $SNAPCRAFT_PRIME/usr/share/$cruft
|
||||
done
|
||||
find $SNAPCRAFT_PRIME/usr/share/doc/ -type f -not -name 'copyright' -delete
|
||||
find $SNAPCRAFT_PRIME/usr/share -type d -empty -delete
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<name lang="fr">Source tripolaire + PEN</name>
|
||||
<name lang="ar">مصدر ثلاثي القطبيّة + PEN</name>
|
||||
<name lang="cs">Přípojnice 3f+PEN pravá</name>
|
||||
<name lang="hu">3F + PEN</name>
|
||||
<name lang="hu">3F + PEN</name>
|
||||
</names>
|
||||
<elementInformations/>
|
||||
<informations>Author: The QElectroTech team
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<name lang="fr">Source tripolaire + PEN</name>
|
||||
<name lang="ar">مصدر ثلاثي القطبيّة + PEN</name>
|
||||
<name lang="cs">Přípojnice 3f+N+PE pravá</name>
|
||||
<name lang="hu">3F + N + PE</name>
|
||||
<name lang="hu">3F + N + PE</name>
|
||||
</names>
|
||||
<elementInformations/>
|
||||
<informations>Author: The QElectroTech team
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<name lang="es">Masa</name>
|
||||
<name lang="ar">هيكل معدني</name>
|
||||
<name lang="fr">Masse</name>
|
||||
<name lang="hu">Test</name>
|
||||
<name lang="hu">Test</name>
|
||||
</names>
|
||||
<elementInformations>
|
||||
<elementInformation name="comment" show="1"></elementInformation>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<name lang="en">Chassis</name>
|
||||
<name lang="fr">Masse</name>
|
||||
<name lang="ru">Шасси</name>
|
||||
<name lang="hu">Vázszerkezet</name>
|
||||
<name lang="hu">Vázszerkezet</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<name lang="en">Single-pole source + PE +N</name>
|
||||
<name lang="fr">Source unipolaire + PE +N</name>
|
||||
<name lang="ru">Однополюсный + PE +N</name>
|
||||
<name lang="hu">F + N + PE</name>
|
||||
<name lang="hu">F + N + PE</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<name lang="en">Single-pole source +PEN</name>
|
||||
<name lang="fr">Source unipolaire + PEN</name>
|
||||
<name lang="ru">Однополюсный + PEN</name>
|
||||
<name lang="hu">F + PEN</name>
|
||||
<name lang="hu">F + PEN</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<name lang="en">Single-pole source + neutral</name>
|
||||
<name lang="fr">Source unipolaire + neutre</name>
|
||||
<name lang="ru">Однополюсный + нейтраль</name>
|
||||
<name lang="hu">F + N</name>
|
||||
<name lang="hu">F + N</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<name lang="en">Three-pole source</name>
|
||||
<name lang="fr">Source tripolaire</name>
|
||||
<name lang="ru">Трёхполюсный</name>
|
||||
<name lang="hu">3F</name>
|
||||
<name lang="hu">3F</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<name lang="en">Three-pole source + PE +N</name>
|
||||
<name lang="fr">Source tripolaire + PE +N</name>
|
||||
<name lang="ru">Трёхполюсный + PE +N</name>
|
||||
<name lang="hu">3F + N + PE</name>
|
||||
<name lang="hu">3F + N + PE</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<name lang="en">Three-pole source + PEN</name>
|
||||
<name lang="fr">Source tripolaire + PEN</name>
|
||||
<name lang="ru">Трёхполюсный + PEN</name>
|
||||
<name lang="hu">3F + PEN</name>
|
||||
<name lang="hu">3F + PEN</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<name lang="en">Three-pole source + neutral</name>
|
||||
<name lang="fr">Source tripolaire + neutre</name>
|
||||
<name lang="ru">Трёхполюсный + нейтраль</name>
|
||||
<name lang="hu">3F + N</name>
|
||||
<name lang="hu">3F + N</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<name lang="en">Neutral source</name>
|
||||
<name lang="fr">Source neutre</name>
|
||||
<name lang="ru">Нейтраль</name>
|
||||
<name lang="hu">N</name>
|
||||
<name lang="hu">N</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<name lang="en">Phase source</name>
|
||||
<name lang="fr">Source phase</name>
|
||||
<name lang="ru">Фаза</name>
|
||||
<name lang="hu">F</name>
|
||||
<name lang="hu">F</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<name lang="en">Distribution point TN-C >TN-S</name>
|
||||
<name lang="fr">Point de distribution TN-C >TN-S</name>
|
||||
<name lang="ru">Распределительный пункт TN-C >TN-S</name>
|
||||
<name lang="hu">3F + PEN szétválasztva TN-C-ről TN-S-re</name>
|
||||
<name lang="hu">3F + PEN szétválasztva TN-C-ről TN-S-re</name>
|
||||
</names>
|
||||
<informations>Author: The QElectroTech team
|
||||
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
|
||||
|
||||
@@ -0,0 +1,223 @@
|
||||
<definition type="element" width="550" hotspot_y="65" height="70" link_type="simple" version="0.90" hotspot_x="265">
|
||||
<uuid uuid="{c99de07b-0296-4e75-8a90-3b5c533510e8}"/>
|
||||
<names>
|
||||
<name lang="en">24 pin connector female+male</name>
|
||||
<name lang="hu">24 tűs csatlakozó anya+apa</name>
|
||||
</names>
|
||||
<elementInformations>
|
||||
<elementInformation show="1" name="manufacturer">Weidmüller</elementInformation>
|
||||
<elementInformation show="1" name="supplier"></elementInformation>
|
||||
<elementInformation show="1" name="manufacturer_reference">HDC HE 24 MS 25-48</elementInformation>
|
||||
<elementInformation show="1" name="quantity"></elementInformation>
|
||||
<elementInformation show="1" name="description"></elementInformation>
|
||||
<elementInformation show="1" name="label"></elementInformation>
|
||||
<elementInformation show="1" name="comment"></elementInformation>
|
||||
<elementInformation show="1" name="plant"></elementInformation>
|
||||
<elementInformation show="1" name="designation"></elementInformation>
|
||||
<elementInformation show="1" name="machine_manufacturer_reference"></elementInformation>
|
||||
<elementInformation show="1" name="unity"></elementInformation>
|
||||
</elementInformations>
|
||||
<informations></informations>
|
||||
<description>
|
||||
<dynamic_text frame="false" z="1" text_from="ElementInfo" rotation="0" keep_visual_rotation="false" uuid="{c28b53eb-1e17-4e90-b9af-ff86d19d1a56}" Valignment="AlignTop" Halignment="AlignLeft" y="-90" text_width="-1" x="-270" font="Sans Serif,8,-1,5,50,0,0,0,0,0">
|
||||
<text></text>
|
||||
<info_name>label</info_name>
|
||||
</dynamic_text>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-240" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-240" length1="1.5"/>
|
||||
<text rotation="0" color="#000000" text="12" y="-40" x="1" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="20" y="-40" x="161" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="4" y="-40" x="-159" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="8" y="-40" x="-79" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="3" y="-40" x="-179" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="2" y="-40" x="-199" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-20" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-20" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-160" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-160" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-200" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-200" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="0" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="0" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="0" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="0" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-80" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-80" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-240" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-240" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="260" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="260" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="160" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="160" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-120" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-120" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-40" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-40" length1="1.5"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-3"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-40" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-40" length1="1.5"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-161"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-201"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="260" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="260" length1="1.5"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-243"/>
|
||||
<text rotation="0" color="#000000" text="18" y="-40" x="121" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="240" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="240" length1="1.5"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-241"/>
|
||||
<text rotation="0" color="#000000" text="10" y="-40" x="-39" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="7" y="-40" x="-99" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="257"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-41"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-60" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-60" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-180" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-180" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="240" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="240" length1="1.5"/>
|
||||
<text rotation="0" color="#000000" text="19" y="-40" x="141" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="6" y="-40" x="-119" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-121"/>
|
||||
<text rotation="0" color="#000000" text="11" y="-40" x="-19" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="5" y="-40" x="-139" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-1"/>
|
||||
<text rotation="0" color="#000000" text="24" y="-40" x="241" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-81"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="259"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="40" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="40" length1="1.5"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-181"/>
|
||||
<text rotation="0" color="#000000" text="16" y="-40" x="81" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-80" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-80" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="220" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="220" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-100" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-100" length1="1.5"/>
|
||||
<line y1="-37" y2="-32" length2="1.5" antialias="false" x2="270" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="270" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-20" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-20" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-100" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-100" length1="1.5"/>
|
||||
<text rotation="0" color="#000000" text="15" y="-40" x="61" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="23" y="-40" x="221" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-21"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-23"/>
|
||||
<text rotation="0" color="#000000" text="22" y="-40" x="201" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="14" y="-40" x="41" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<line y1="-32" y2="-32" length2="1.5" antialias="false" x2="274" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="266" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="80" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="80" length1="1.5"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-101"/>
|
||||
<line y1="-30" y2="-30" length2="1.5" antialias="false" x2="272" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="268" length1="1.5"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="79"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-140" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-140" length1="1.5"/>
|
||||
<text rotation="0" color="#000000" text="21" y="-40" x="181" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-60" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-60" length1="1.5"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-43"/>
|
||||
<text rotation="0" color="#000000" text="13" y="-40" x="21" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<text rotation="0" color="#000000" text="9" y="-40" x="-59" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-61"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-63"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-141"/>
|
||||
<line y1="-28" y2="-28" length2="1.5" antialias="false" x2="271" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="269" length1="1.5"/>
|
||||
<text rotation="0" color="#000000" text="17" y="-40" x="101" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="237"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-83"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="120" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="120" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="200" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="200" length1="1.5"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-103"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="200" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="200" length1="1.5"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="39"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="60" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="60" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="180" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="180" length1="1.5"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="119"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="-220" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-220" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-120" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-120" length1="1.5"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="199"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-140" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-140" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="160" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="160" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-160" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-160" length1="1.5"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="59"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-180" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-180" length1="1.5"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="159"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="239"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-200" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-200" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="140" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="140" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="-220" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-220" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="220" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="220" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="140" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="140" length1="1.5"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="217"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="139"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="219"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="100" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="100" length1="1.5"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="180" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="180" length1="1.5"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-123"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="197"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-143"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-163"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="99"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="179"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-183"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="177"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-203"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="-223"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="157"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="-221"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="137"/>
|
||||
<line y1="-25" y2="-14" length2="1.5" antialias="false" x2="20" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="20" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="120" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="120" length1="1.5"/>
|
||||
<text rotation="0" color="#000000" text="1" y="-40" x="-219" font="Sans Serif,7,-1,5,50,0,0,0,0,0"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="100" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="100" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="80" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="80" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="60" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="60" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="40" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="40" length1="1.5"/>
|
||||
<line y1="-36" y2="-45" length2="1.5" antialias="false" x2="20" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="20" length1="1.5"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="117"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="97"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="77"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="57"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="37"/>
|
||||
<arc antialias="true" width="6" height="6" start="-180" angle="-180" style="line-style:normal;line-weight:normal;filling:none;color:black" y="-35" x="17"/>
|
||||
<rect rx="0" antialias="false" width="2" height="7" style="line-style:normal;line-weight:normal;filling:black;color:black" y="-32" ry="0" x="19"/>
|
||||
<line y1="-37" y2="-32" length2="1.5" antialias="false" x2="-250" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-250" length1="1.5"/>
|
||||
<line y1="-32" y2="-32" length2="1.5" antialias="false" x2="-246" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-254" length1="1.5"/>
|
||||
<line y1="-30" y2="-30" length2="1.5" antialias="false" x2="-248" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-252" length1="1.5"/>
|
||||
<line y1="-28" y2="-28" length2="1.5" antialias="false" x2="-249" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-251" length1="1.5"/>
|
||||
<line y1="-60" y2="-60" length2="1.5" antialias="false" x2="270" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-250" length1="1.5"/>
|
||||
<line y1="-60" y2="-50" length2="1.5" antialias="false" x2="280" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="270" length1="1.5"/>
|
||||
<line y1="-50" y2="-10" length2="1.5" antialias="false" x2="280" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="280" length1="1.5"/>
|
||||
<line y1="-10" y2="0" length2="1.5" antialias="false" x2="270" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="280" length1="1.5"/>
|
||||
<line y1="0" y2="0" length2="1.5" antialias="false" x2="-250" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="270" length1="1.5"/>
|
||||
<line y1="0" y2="-10" length2="1.5" antialias="false" x2="-260" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-250" length1="1.5"/>
|
||||
<line y1="-10" y2="-50" length2="1.5" antialias="false" x2="-260" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-260" length1="1.5"/>
|
||||
<line y1="-50" y2="-60" length2="1.5" antialias="false" x2="-250" end2="none" end1="none" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-260" length1="1.5"/>
|
||||
<terminal name="" type="Generic" uuid="{2fd7e019-01c1-4cf6-9c8c-e8adca3ce496}" orientation="s" y="-14" x="240"/>
|
||||
<terminal name="" type="Generic" uuid="{6a39b490-3888-4356-91cc-0a6574a30788}" orientation="n" y="-45" x="-140"/>
|
||||
<terminal name="" type="Generic" uuid="{30fe38ae-876f-478a-83d5-22342403d1bb}" orientation="n" y="-45" x="120"/>
|
||||
<terminal name="" type="Generic" uuid="{6d000d02-1a83-4d64-816c-40b834beef4f}" orientation="s" y="-14" x="120"/>
|
||||
<terminal name="" type="Generic" uuid="{7e0e49fe-4d0a-4560-9f78-a0e160283578}" orientation="s" y="-14" x="-200"/>
|
||||
<terminal name="" type="Generic" uuid="{26db0fbd-62c0-4de4-97ac-5b0bf685cef4}" orientation="s" y="-14" x="-180"/>
|
||||
<terminal name="" type="Generic" uuid="{9e7a5014-3d0f-4f58-880a-9517e77f17ee}" orientation="s" y="-14" x="-160"/>
|
||||
<terminal name="" type="Generic" uuid="{98fdfeec-a022-4d30-bfb1-915a2bb00351}" orientation="s" y="-14" x="-80"/>
|
||||
<terminal name="" type="Generic" uuid="{ed4b19f3-15b5-432c-a9c8-bee918a2429b}" orientation="s" y="-14" x="-60"/>
|
||||
<terminal name="" type="Generic" uuid="{f3c3c49c-4170-46ff-a474-fd1fea020156}" orientation="n" y="-45" x="-100"/>
|
||||
<terminal name="" type="Generic" uuid="{da25c11c-260c-4fb8-9a9b-ae8d11c96e6d}" orientation="n" y="-45" x="-240"/>
|
||||
<terminal name="" type="Generic" uuid="{bcfc8484-a82a-4585-a428-a9ffc2a676d7}" orientation="n" y="-45" x="-160"/>
|
||||
<terminal name="" type="Generic" uuid="{ab25a69a-5c8c-469e-9da7-b79e3ebeb4ba}" orientation="n" y="-45" x="-220"/>
|
||||
<terminal name="" type="Generic" uuid="{ef7db529-e31c-4f39-b831-8c578fb43462}" orientation="s" y="-14" x="20"/>
|
||||
<terminal name="" type="Generic" uuid="{a21c8338-b99c-44a6-9b42-e71b936344ea}" orientation="s" y="-14" x="200"/>
|
||||
<terminal name="" type="Generic" uuid="{aacb7245-00e4-4588-8960-4c3aaea6085b}" orientation="n" y="-45" x="60"/>
|
||||
<terminal name="" type="Generic" uuid="{b6143a32-a9c1-40aa-8e94-c64e0d217a8f}" orientation="s" y="-14" x="-40"/>
|
||||
<terminal name="" type="Generic" uuid="{7ee9a07f-0bf2-42f4-bf51-cabae0875328}" orientation="n" y="-45" x="100"/>
|
||||
<terminal name="" type="Generic" uuid="{b03f6f6e-658a-49fa-84bd-03243a44ff18}" orientation="s" y="-14" x="60"/>
|
||||
<terminal name="" type="Generic" uuid="{a88754c9-bf2c-4e3d-aa45-95113c37c426}" orientation="s" y="-14" x="-140"/>
|
||||
<terminal name="" type="Generic" uuid="{efb0a56a-20ec-49ab-a470-dec34ed12027}" orientation="n" y="-45" x="260"/>
|
||||
<terminal name="" type="Generic" uuid="{8ad57bf7-4125-4268-9817-e0d84a3e80c7}" orientation="s" y="-14" x="100"/>
|
||||
<terminal name="" type="Generic" uuid="{66764cb9-b07b-4d38-bea0-4caefd955b61}" orientation="n" y="-45" x="-120"/>
|
||||
<terminal name="" type="Generic" uuid="{bfaa681e-3fc9-4806-8b32-36af6ae51932}" orientation="s" y="-14" x="180"/>
|
||||
<terminal name="" type="Generic" uuid="{4607cb5a-db47-40aa-9cfe-e22de405bf88}" orientation="s" y="-14" x="-20"/>
|
||||
<terminal name="" type="Generic" uuid="{951d1e08-5f4d-4034-aecb-b6b8033d0dcf}" orientation="n" y="-45" x="-40"/>
|
||||
<terminal name="" type="Generic" uuid="{f28988c9-363c-4486-a22f-a5365a15da8a}" orientation="n" y="-45" x="-180"/>
|
||||
<terminal name="" type="Generic" uuid="{31805e67-1014-4ed3-83d0-6e15db99bbb7}" orientation="s" y="-14" x="-220"/>
|
||||
<terminal name="" type="Generic" uuid="{bdb67495-8137-4c88-9986-671070320ce6}" orientation="n" y="-45" x="0"/>
|
||||
<terminal name="" type="Generic" uuid="{434fcf9a-7e51-481d-a6c7-9269d6d99b29}" orientation="s" y="-14" x="-100"/>
|
||||
<terminal name="" type="Generic" uuid="{7fede45b-d5cf-468a-9cca-52aff95a1c78}" orientation="s" y="-14" x="80"/>
|
||||
<terminal name="" type="Generic" uuid="{c7897fc8-739e-4c72-b524-a8d7ba6f2b6b}" orientation="n" y="-45" x="-60"/>
|
||||
<terminal name="" type="Generic" uuid="{bef0d722-d69f-4489-b8f1-2afb03de1784}" orientation="s" y="-14" x="220"/>
|
||||
<terminal name="" type="Generic" uuid="{9ae10c41-be73-4e99-9423-568ff93475fd}" orientation="n" y="-45" x="-200"/>
|
||||
<terminal name="" type="Generic" uuid="{8a60a879-ccf3-4c21-a0ab-3a2ae2d01dbe}" orientation="n" y="-45" x="200"/>
|
||||
<terminal name="" type="Generic" uuid="{24426091-f2ec-4154-aba3-6bdaec485c4f}" orientation="n" y="-45" x="20"/>
|
||||
<terminal name="" type="Generic" uuid="{ba1e41da-e37c-4f54-8237-618421d1e344}" orientation="s" y="-14" x="0"/>
|
||||
<terminal name="" type="Generic" uuid="{b28694f6-eac6-4eb9-9c3c-ed0cc49328e6}" orientation="n" y="-45" x="40"/>
|
||||
<terminal name="" type="Generic" uuid="{2481d2c4-d913-4d55-a48a-20eef116dc46}" orientation="s" y="-14" x="-120"/>
|
||||
<terminal name="" type="Generic" uuid="{1e6a6de8-1126-4ec0-a8dc-833a14913da6}" orientation="n" y="-45" x="-20"/>
|
||||
<terminal name="" type="Generic" uuid="{24d3c3fe-8549-4e16-b8b3-dc2fa1675be6}" orientation="n" y="-45" x="80"/>
|
||||
<terminal name="" type="Generic" uuid="{5dbff03f-b71c-4f41-81e4-5093fafce82f}" orientation="s" y="-14" x="160"/>
|
||||
<terminal name="" type="Generic" uuid="{da4a5bbe-5aa7-4493-99b6-e87b73d6b858}" orientation="n" y="-45" x="-80"/>
|
||||
<terminal name="" type="Generic" uuid="{071a2b7e-4a5a-465a-b040-0e3579f36665}" orientation="s" y="-14" x="260"/>
|
||||
<terminal name="" type="Generic" uuid="{fe47517f-462b-4a9a-a2c3-ae756dbfefe8}" orientation="n" y="-45" x="140"/>
|
||||
<terminal name="" type="Generic" uuid="{1f24bdb1-cc99-4d89-8d89-8e104aaf498e}" orientation="n" y="-45" x="220"/>
|
||||
<terminal name="" type="Generic" uuid="{2738bb7b-c6be-4aa4-81c9-31e4e457cf31}" orientation="s" y="-14" x="-240"/>
|
||||
<terminal name="" type="Generic" uuid="{4d909e53-50b1-4b45-b8c3-262038f6c247}" orientation="n" y="-45" x="160"/>
|
||||
<terminal name="" type="Generic" uuid="{0e87f452-86a3-45ef-a66b-8ed92e08899d}" orientation="n" y="-45" x="180"/>
|
||||
<terminal name="" type="Generic" uuid="{1c6e1ab1-d98f-4322-bc2b-def58fefbea7}" orientation="s" y="-14" x="40"/>
|
||||
<terminal name="" type="Generic" uuid="{1f0b7ff5-9f52-4517-b749-018b5bfa59dd}" orientation="n" y="-45" x="240"/>
|
||||
<terminal name="" type="Generic" uuid="{8adac905-77b9-471f-8822-4ac63d3f6cf6}" orientation="s" y="-14" x="140"/>
|
||||
</description>
|
||||
</definition>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user