add ACM paper as submodule from overleaf

This commit is contained in:
Arthur Grisel-Davy 2024-01-15 09:26:55 -05:00
parent 6547545b49
commit 0ce9bea86e
33 changed files with 7 additions and 49679 deletions

@ -0,0 +1 @@
Subproject commit f00f1f376a4be3222e30a450706b97a3f51d5225

1
DSD/journal/ACM Symbolic link
View file

@ -0,0 +1 @@
65a53e124c15fa3d1334d212

File diff suppressed because it is too large Load diff

View file

@ -1,18 +0,0 @@
\newabbreviation{tas}{TAS}{Temporal Action Segmentation}
\newabbreviation{apt}{APT}{Advanced Persistent Threat}
\newabbreviation{dsd}{DSD}{Device State Detector}
\newabbreviation{cpd}{CPD}{Change Point Detection}
\newabbreviation{stl}{STL}{Signal Temporal Logic}
\newabbreviation{hids}{HIDS}{Host-Based Intrusion Detection Software}
\newabbreviation{nids}{NIDS}{Network-Based Intrusion Detection Software}
\newabbreviation{1nn}{1-NN}{1-Nearest Neighbor}
\newabbreviation{knn}{K-NN}{K-Nearest Neighbor}
\newabbreviation{rnn}{RNN}{Recurrent Neural Network}
\newabbreviation{cnn}{CNN}{Convolutional Neural Network}
\newabbreviation{svm}{SVM}{Support Vector Machine}
\newabbreviation{mlp}{MLP}{Multi Layer Perceptron}
\newabbreviation{mad}{MAD}{Machine Activity Detector}
\newabbreviation{ids}{IDS}{Intrusion Detection Systems}
\newabbreviation{nilm}{NILM}{Nonintrusive Load Monitoring}
\newabbreviation{it}{IT}{Information Technology}
\newabbreviation{dtw}{DTW}{Dynamic Time Warping}

View file

@ -1,725 +0,0 @@
@inproceedings{deldari2020espresso,
title={Entropy and ShaPe awaRe timE-Series SegmentatiOn for processing heterogeneous sensor data},
author={Deldari, Shohreh and Smith, Daniel V. and Sadri and Amin and Salim and Flora D. },
journal={Proceedings of the ACM on Interactive, Mobile, Wearable and Ubiquitous Technologies (IMWUT)},
volume={4},
number={3},
articleno={77},
year={2020},
url = {https://doi.org/10.1145/3411832},
doi = {10.1145/3411832}
}
@inproceedings{10.1145/3081333.3081340,
author = {Virmani and Aditya and Shahzad and Muhammad},
title = {Position and Orientation Agnostic Gesture Recognition Using WiFi},
year = {2017},
isbn = {9781450349284},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3081333.3081340},
doi = {10.1145/3081333.3081340},
abstract = {WiFi based gesture recognition systems have recently proliferated due to the ubiquitous availability of WiFi in almost every modern building. The key limitation of existing WiFi based gesture recognition systems is that they require the user to be in the same configuration (i.e., at the same position and in same orientation) when performing gestures at runtime as when providing training samples, which significantly restricts their practical usability. In this paper, we propose a WiFi based gesture recognition system, namely WiAG, which recognizes the gestures of the user irrespective of his/her configuration. The key idea behind WiAG is that it first requests the user to provide training samples for all gestures in only one configuration and then automatically generates virtual samples for all gestures in all possible configurations by applying our novel translation function on the training samples. Next, for each configuration, it generates a classification model using virtual samples corresponding to that configuration. To recognize gestures of a user at runtime, as soon as the user performs a gesture, WiAG first automatically estimates the configuration of the user and then evaluates the gesture against the classification model corresponding to that estimated configuration. Our evaluation results show that when user's configuration is not the same at runtime as at the time of providing training samples, WiAG significantly improves the gesture recognition accuracy from just 51.4\% to 91.4\%.},
booktitle = {Proceedings of the 15th Annual International Conference on Mobile Systems, Applications, and Services},
pages = {252264},
numpages = {13},
keywords = {agnostic, position, orientation, WiFi, gesture recognition},
location = {Niagara Falls, New York, USA},
series = {MobiSys '17}
}
@article{aminikhanghahi2018real,
title={Real-time change point detection with application to smart home time series data},
author={Aminikhanghahi, Samaneh and Wang and Tinghui and Cook and Diane J},
journal={IEEE Transactions on Knowledge and Data Engineering},
volume={31},
number={5},
pages={1010--1023},
year={2018},
publisher={IEEE}
}
%Fancourt, C.L., Principe, J.C., 1996. A neighborhood map of competing one step predictors for piecewise segmentation and identification of time series. In: Proceedings of the International Conference on Neural Network, vol. 4, pp. 19061911.
@article{xiao2022self,
title={Self-Supervised Few-Shot Time-series Segmentation for Activity Recognition},
author={Xiao, Chunjing and Chen, Shiming and Zhou and Fan and Wu and Jie},
journal={IEEE Transactions on Mobile Computing},
year={2022},
publisher={IEEE}
}
@misc{2207.09925,
doi = {10.48550/ARXIV.2207.09925},
url = {https://arxiv.org/abs/2207.09925},
author = {Xu, Leiyang and Wang, Qiang and Lin and Xiaotian and Yuan and Lin},
keywords = {Computer Vision and Pattern Recognition (cs.CV), FOS: Computer and information sciences, FOS: Computer and information sciences},
title = {An Efficient Framework for Few-shot Skeleton-based Temporal Action Segmentation},
publisher = {arXiv},
year = {2022},
copyright = {arXiv.org perpetual, non-exclusive license}
}
@article{sarker2018individualized,
title={Individualized time-series segmentation for mining mobile phone user behavior},
author={Sarker, Iqbal H and Colman, Alan and Kabir and Muhammad Ashad and Han and Jun},
journal={The Computer Journal},
volume={61},
number={3},
pages={349--368},
year={2018},
publisher={Oxford University Press}
}
@article{4445667, author={Liu, Xiaoyan and Lin, Zhenjiang and Wang, Huaiqing}, journal={IEEE Transactions on Knowledge and Data Engineering}, title={Novel Online Methods for Time Series Segmentation}, year={2008}, volume={20}, number={12}, pages={1616-1626}, doi={10.1109/TKDE.2008.29}}
@article{4160958,
author={Yujian, Li and Bo, Liu},
journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
title={A Normalized Levenshtein Distance Metric},
year={2007},
volume={29},
number={6},
pages={1091-1095},
doi={10.1109/TPAMI.2007.1078}
}
@article{aminikhanghahi2017survey,
title={A survey of methods for time series change point detection},
author={Aminikhanghahi and Samaneh and Cook and Diane J},
journal={Knowledge and information systems},
volume={51},
number={2},
pages={339--367},
year={2017},
publisher={Springer}
}
@misc{palitronica,
title = {Palitronica - Palisade},
howpublished = {https://www.palitronica.com/products/palisade},
note = {Accessed: 2010-03-26}
}
@misc{hidden-palitronica,
title = {Reference hidden for peer-review},
}
@misc{articlemlcs,
title = {Side-channel Based Runtime Intrusion Detection for Network Equipment},
author = {Arthur Grisel-Davy and Goksen U. Guler and Julian Dickert and Philippe Vibien and Waleed Khan and Jack Morgan and Carlos Moreno and Sebastian Fischmeister},
year = {2023},
Journal = {Machine Learning for Cyber Security. ML4CS 2023}
}
@inbook{278e1df91d22494f9be2adfca2559f92,
title = "A data management platform for personalised real-time energy feedback",
keywords = "smart homes, real-time energy, smart energy meter, energy consumption, Electrical engineering. Electronics Nuclear engineering, Electrical and Electronic Engineering",
author = "David Murray and Jing Liao and Lina Stankovic and Vladimir Stankovic and Richard Hauxwell-Baldwin and Charlie Wilson and Michael Coleman and Tom Kane and Steven Firth",
year = "2015",
booktitle = "Proceedings of the 8th International Conference on Energy Efficiency in Domestic Appliances and Lighting",
}
@Article{Hunter:2007,
Author = {Hunter, J. D.},
Title = {Matplotlib: A 2D graphics environment},
Journal = {Computing in Science \& Engineering},
Volume = {9},
Number = {3},
Pages = {90--95},
abstract = {Matplotlib is a 2D graphics package used for Python for
application development, interactive scripting, and publication-quality
image generation across user interfaces and operating systems.},
publisher = {IEEE COMPUTER SOC},
doi = {10.1109/MCSE.2007.55},
year = 2007
}
@inproceedings{kocher1996timing,
title={Timing attacks on implementations of Diffie-Hellman, RSA, DSS, and other systems},
author={Kocher and Paul C},
booktitle={Advances in Cryptology—CRYPTO96: 16th Annual International Cryptology Conference Santa Barbara, California, USA August 18--22, 1996 Proceedings 16},
pages={104--113},
year={1996},
organization={Springer}
}
@article{villalobos2021flexible,
title={A flexible alarm prediction system for smart manufacturing scenarios following a forecaster--analyzer approach},
author={Villalobos, Kevin and Suykens and Johan and Illarramendi and Arantza},
journal={Journal of Intelligent Manufacturing},
volume={32},
pages={1323--1344},
year={2021},
publisher={Springer}
}
@article{belikovetsky2018digital,
title={Digital audio signature for 3D printing integrity},
author={Belikovetsky, Sofia and Solewicz, Yosef A and Yampolskiy, Mark and Toh and Jinghui and Elovici and Yuval},
journal={IEEE Transactions on Information Forensics and Security},
volume={14},
number={5},
pages={1127--1141},
year={2018},
publisher={IEEE}
}
@article{al2016forensics,
title={Forensics of thermal side-channel in additive manufacturing systems},
author={Al Faruque, Mohammad Abdullah and Chhetri, Sujit Rokka and Canedo and A and Wan and J},
journal={University of California, Irvine},
volume={12},
number={13},
pages={176},
year={2016}
}
@article{10.1145/3571288,
author = {Thakur, Shailja and Moreno and Carlos and Fischmeister and Sebastian},
title = {CANOA: CAN Origin Authentication Through Power Side-Channel Monitoring},
year = {2022},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
issn = {2378-962X},
url = {https://doi.org/10.1145/3571288},
doi = {10.1145/3571288},
abstract = {The lack of any sender authentication mechanism in place makes Controller Area Network (CAN) vulnerable to security threats. For instance, an attacker can impersonate an Electronic Control Unit (ECU) on the bus and send spoofed messages unobtrusively with the identifier of the impersonated ECU. To address this problem, we propose a novel source authentication technique that uses power consumption measurements of the ECU to authenticate the source of a message. A transmission of an ECU affects the power consumption and a characteristic pattern will appear. Our technique exploits the power consumption of each ECU during the transmission of a message to determine whether the message actually originated from the purported sender. We evaluate our approach in both a lab setup and a real vehicle. We also evaluate our approach against factors that can impact the power consumption measurement of the ECU. The results of the evaluation show that the proposed technique is applicable in a broad range of operating conditions with reasonable computational power requirements and attaining good accuracy.},
note = {Just Accepted},
journal = {ACM Trans. Cyber-Phys. Syst.},
month = {nov},
keywords = {CAN, transmissions, authentication, automotive security}
}
@article{gatlin2019detecting,
title={Detecting sabotage attacks in additive manufacturing using actuator power signatures},
author={Gatlin, Jacob and Belikovetsky, Sofia and Moore, Samuel B and Solewicz, Yosef and Elovici and Yuval and Yampolskiy and Mark},
journal={IEEE Access},
volume={7},
pages={133421--133432},
year={2019},
publisher={IEEE}
}
@article{CHOU2014400,
title = {Real-time detection of anomalous power consumption},
journal = {Renewable and Sustainable Energy Reviews},
volume = {33},
pages = {400-411},
year = {2014},
issn = {1364-0321},
doi = {https://doi.org/10.1016/j.rser.2014.01.088},
url = {https://www.sciencedirect.com/science/article/pii/S1364032114001142},
author = {Jui-Sheng Chou and Abdi Suryadinata Telaga},
keywords = {Power consumption, Big data analytics, Anomaly detection, Pattern recognition, Real time detection, Time series prediction},
abstract = {Effective feedback can reduce building power consumption and carbon emissions. Therefore, providing information to building managers and tenants is the first step in identifying ways to reduce power consumption. Since reducing anomalous consumption can have a large impact, this study proposes a novel approach to using large sets of data for a building space to identify anomalous power consumption. This method identifies anomalies in two stages: consumption prediction and anomaly detection. Daily real-time consumption is predicted by using a hybrid neural net ARIMA (auto-regressive integrated moving average) model of daily consumption. Anomalies are then identified by differences between real and predicted consumption by applying the two-sigma rule. The experimental results for a 17-week study of electricity consumption in a building office space confirm that the method can detect anomalous values in real time. Another contribution of the study is the development of a formalized methodology for detecting anomalous patterns in large data sets for real-time of building office space energy consumption. Moreover, the prediction component can be used to plan electricity usage while the anomaly detection component can be used to understand the energy consumption behaviors of tenants.}
}
@INPROCEEDINGS{9934955,
author={Grisel-Davy, Arthur and Bhogayata, Amrita Milan and Pabbi, Srijan and Narayan and Apurva and Fischmeister and Sebastian},
booktitle={2022 International Conference on Embedded Software (EMSOFT)},
title={Work-in-Progress: Boot Sequence Integrity Verification with Power Analysis},
year={2022},
volume={},
number={},
pages={3-4},
doi={10.1109/EMSOFT55006.2022.00009}}
@INPROCEEDINGS{9061783,
author={Li, Yanjie and He, Ruiwen and Ji and Xiaoyu and Xu and Wenyuan},
booktitle={2019 IEEE 3rd Conference on Energy Internet and Energy System Integration (EI2)},
title={Using power side-channel to implement anomaly-based intrusion detection on smart grid terminals},
year={2019},
volume={},
number={},
pages={2669-2674},
doi={10.1109/EI247390.2019.9061783}}
@article{ilgun1995state,
title={State transition analysis: A rule-based intrusion detection approach},
author={Ilgun, Koral and Kemmerer and Richard A and Porras and Phillip A},
journal={IEEE transactions on software engineering},
volume={21},
number={3},
pages={181--199},
year={1995},
publisher={IEEE}
}
@INPROCEEDINGS{5563714,
author={Lei Li and De-Zhang Yang and Fang-Cheng Shen},
booktitle={2010 3rd International Conference on Computer Science and Information Technology},
title={A novel rule-based Intrusion Detection System using data mining},
year={2010},
volume={6},
number={},
pages={169-172},
doi={10.1109/ICCSIT.2010.5563714}}
@article{kumar2020integrated,
title={An integrated rule based intrusion detection system: analysis on UNSW-NB15 data set and the real time online dataset},
author={Kumar, Vikash and Sinha, Ditipriya and Das, Ayan Kumar and Pandey and Subhash Chandra and Goswami and Radha Tamal},
journal={Cluster Computing},
volume={23},
pages={1397--1418},
year={2020},
publisher={Springer}
}
@article{uddin2018activity,
title={Activity recognition for cognitive assistance using body sensors data and deep convolutional neural network},
author={Uddin and Md Zia and Hassan and Mohammad Mehedi},
journal={IEEE Sensors Journal},
volume={19},
number={19},
pages={8413--8419},
year={2018},
publisher={IEEE}
}
@article{wannenburg2016physical,
title={Physical activity recognition from smartphone accelerometer data for user context awareness sensing},
author={Wannenburg and Johan and Malekian and Reza},
journal={IEEE Transactions on Systems, Man, and Cybernetics: Systems},
volume={47},
number={12},
pages={3142--3149},
year={2016},
publisher={IEEE}
}
@inproceedings{bodor2003vision,
title={Vision-based human tracking and activity recognition},
author={Bodor, Robert and Jackson and Bennett and Papanikolopoulos and Nikolaos},
booktitle={Proc. of the 11th Mediterranean Conf. on Control and Automation},
volume={1},
pages={1--6},
year={2003},
organization={Citeseer}
}
@article{zhang2019numerical,
title={Numerical delineation of 3D unsteady flow fields in side channel pumps for engineering processes},
author={Zhang, Fan and Chen, Ke and Appiah, Desmond and Hu, Bo and Yuan and Shouqi and Asomani and Stephen Ntiri},
journal={Energies},
volume={12},
number={7},
pages={1287},
year={2019},
publisher={MDPI}
}
@INPROCEEDINGS{4393062,
author={Zhou, Wei and Habetler and Thomas G. and Harley and Ronald G.},
booktitle={2007 IEEE International Symposium on Diagnostics for Electric Machines, Power Electronics and Drives},
title={Bearing Condition Monitoring Methods for Electric Machines: A General Review},
year={2007},
volume={},
number={},
pages={3-6},
doi={10.1109/DEMPED.2007.4393062}}
@article{yang2016power,
title={Power consumption based android malware detection},
author={Yang and Hongyu and Tang and Ruiwen},
journal={Journal of Electrical and Computer Engineering},
volume={2016},
year={2016},
publisher={Hindawi}
}
@article{chawla2021machine,
title={Machine learning in wavelet domain for electromagnetic emission based malware analysis},
author={Chawla, Nikhil and Kumar and Harshit and Mukhopadhyay and Saibal},
journal={IEEE Transactions on Information Forensics and Security},
volume={16},
pages={3426--3441},
year={2021},
publisher={IEEE}
}
@article{wang2015measurement,
title={Measurement system of gear parameters based on machine vision},
author={Wang, Wencheng and Guan, Fengnian and Ma and Shiyong and Li and Jian},
journal={Measurement and Control},
volume={48},
number={8},
pages={242--248},
year={2015},
publisher={SAGE Publications Sage UK: London, England}
}
@ARTICLE{1702202,
author={Denning and D.E.},
journal={IEEE Transactions on Software Engineering},
title={An Intrusion-Detection Model},
year={1987},
volume={SE-13},
number={2},
pages={222-232},
doi={10.1109/TSE.1987.232894}}
@INPROCEEDINGS{9491765,
author={Alsmadi and Tibra and Alqudah and Nour},
booktitle={2021 International Conference on Information Technology (ICIT)},
title={A Survey on malware detection techniques},
year={2021},
volume={},
number={},
pages={371-376},
doi={10.1109/ICIT52682.2021.9491765}}
@inproceedings{10.1145/2940343.2940348,
author = {Malik and Jyoti and Kaushal and Rishabh},
title = {CREDROID: Android Malware Detection by Network Traffic Analysis},
year = {2016},
isbn = {9781450343466},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/2940343.2940348},
doi = {10.1145/2940343.2940348},
abstract = {Android, one of the most popular open source mobile operating system, is facing a lot of security issues. Being used by users with varying degrees of awareness complicates the problem further. Most of the security problems are due to maliciousness of android applications. The malwares get installed in mobile phones through various popular applications particularly gaming applications or some utility applications from various third party app-stores which are untrustworthy. A common feature of the malware is to access the sensitive information from the mobile device and transfer it to remote servers. For our work, we have confined ourselves to defining maliciousness as leakage of privacy information by Android application. In this paper we have proposed a method named as CREDROID which identifies malicious applications on the basis of their Domain Name Server(DNS) queries as well as the data it transmits to remote server by performing the in-depth analysis of network traffic logs in offline mode. Instead of performing signature based detection which is unable to detect polymorphic malwares, we propose a pattern based detection. Pattern in our work refers to the leakage of sensitive information being sent to the remote server. CREDROID is a semi-automated approach which works on various factors like the remote server where the application is connecting, data being sent and the protocol being used for communication for identifying the trustworthiness (credibility) of the application. In our work, we have observed that 63% of the applications from a standard dataset of malwares are generating network traffic which has been the focus of our work.},
booktitle = {Proceedings of the 1st ACM Workshop on Privacy-Aware Mobile Computing},
pages = {2836},
numpages = {9},
keywords = {Android, malware detection, network traffic analysis},
location = {Paderborn, Germany},
series = {PAMCO '16}
}
}
@article{jelali2013statistical,
title={Statistical process control},
author={Jelali and Mohieddine and Jelali and Mohieddine},
journal={Control Performance Management in Industrial Automation: Assessment, Diagnosis and Improvement of Control Loop Performance},
pages={209--217},
year={2013},
publisher={Springer}
}
@inproceedings{tongaonkar2007inferring,
title={Inferring Higher Level Policies from Firewall Rules.},
author={Tongaonkar, Alok and Inamdar and Niranjan and Sekar and R},
booktitle={LISA},
volume={7},
pages={1--10},
year={2007}
}
@article{aly2005survey,
title={Survey on multiclass classification methods},
author={Aly and Mohamed},
journal={Neural Netw},
volume={19},
number={1-9},
pages={2},
year={2005},
publisher={Citeseer}
}
@misc{grandini2020metrics,
title={Metrics for Multi-Class Classification: an Overview},
author={Margherita Grandini and Enrico Bagli and Giorgio Visani},
year={2020},
eprint={2008.05756},
archivePrefix={arXiv},
primaryClass={stat.ML}
}
@misc{zenodo,
title={Evaluation Dataset for the Machine State Detector, https://zenodo.org/record/7782702\#.ZCR33byZNhE},
year={2023},
}
@misc{name_hidden_for_peer_review_2023_8192914,
title = {{160 Hours of Labeled Power Consumption Dataset of
Computer, https://doi.org/10.5281/zenodo.8192914}},
year = 2023,
}
@article{gupta2021novel,
title={A novel failure mode effect and criticality analysis (FMECA) using fuzzy rule-based method: A case study of industrial centrifugal pump},
author={Gupta, Gajanand and Ghasemian and Hamed and Janvekar and Ayub Ahmed},
journal={Engineering Failure Analysis},
volume={123},
pages={105305},
year={2021},
publisher={Elsevier}
}
@inproceedings{10.1145/2976749.2978353,
author = {Genkin, Daniel and Pachmanov, Lev and Pipman, Itamar and Tromer and Eran and Yarom and Yuval},
title = {ECDSA Key Extraction from Mobile Devices via Nonintrusive Physical Side Channels},
year = {2016},
isbn = {9781450341394},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/2976749.2978353},
doi = {10.1145/2976749.2978353},
abstract = {We show that elliptic-curve cryptography implementations on mobile devices are vulnerable to electromagnetic and power side-channel attacks. We demonstrate full extraction of ECDSA secret signing keys from OpenSSL and CoreBitcoin running on iOS devices, and partial key leakage from OpenSSL running on Android and from iOS's CommonCrypto. These non-intrusive attacks use a simple magnetic probe placed in proximity to the device, or a power probe on the phone's USB cable. They use a bandwidth of merely a few hundred kHz, and can be performed cheaply using an audio card and an improvised magnetic probe.},
booktitle = {Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security},
pages = {16261638},
numpages = {13},
keywords = {elliptic curve, side channel attack, electromagnetic analysis, power analysis},
location = {Vienna, Austria},
series = {CCS '16}
}
@article{randolph2020power,
title={Power side-channel attack analysis: A review of 20 years of study for the layman},
author={Randolph and Mark and Diehl and William},
journal={Cryptography},
volume={4},
number={2},
pages={15},
year={2020},
publisher={MDPI}
}
@article{micucci2017unimib,
title={Unimib shar: A dataset for human activity recognition using acceleration data from smartphones},
author={Micucci, Daniela and Mobilio and Marco and Napoletano and Paolo},
journal={Applied Sciences},
volume={7},
number={10},
pages={1101},
year={2017},
publisher={Multidisciplinary Digital Publishing Institute}
}
@article{truong2020selective,
title={Selective review of offline change point detection methods},
author={Truong, Charles and Oudre and Laurent and Vayatis and Nicolas},
journal={Signal Processing},
volume={167},
pages={107299},
year={2020},
publisher={Elsevier}
}
@inproceedings{10.1145/3371158.3371162,
author = {Narwariya, Jyoti and Malhotra, Pankaj and Vig, Lovekesh and Shroff and Gautam and Vishnu and T. V.},
title = {Meta-Learning for Few-Shot Time Series Classification},
year = {2020},
isbn = {9781450377386},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3371158.3371162},
doi = {10.1145/3371158.3371162},
abstract = {Deep neural networks (DNNs) have achieved state-of-the-art results on time series classification (TSC) tasks. In this work, we focus on leveraging DNNs in the often-encountered practical scenario where access to labeled training data is difficult, and where DNNs would be prone to overfitting. We leverage recent advancements in gradient-based meta-learning, and propose an approach to train a residual neural network with convolutional layers as a meta-learning agent for few-shot TSC. The network is trained on a diverse set of few-shot tasks sampled from various domains (e.g. healthcare, activity recognition, etc.) such that it can solve a target task from another domain using only a small number of training samples from the target task. Most existing meta-learning approaches are limited in practice as they assume a fixed number of target classes across tasks. We overcome this limitation in order to train a common agent across domains with each domain having different number of target classes, we utilize a triplet-loss based learning procedure that does not require any constraints to be enforced on the number of classes for the few-shot TSC tasks. To the best of our knowledge, we are the first to use meta-learning based pre-training for TSC. Our approach sets a new benchmark for few-shot TSC, outperforming several strong baselines on few-shot tasks sampled from 41 datasets in UCR TSC Archive. We observe that pre-training under the meta-learning paradigm allows the network to quickly adapt to new unseen tasks with small number of labeled instances.},
booktitle = {Proceedings of the 7th ACM IKDD CoDS and 25th COMAD},
pages = {2836},
numpages = {9},
keywords = {Time Series Classification, Meta-Learning, Few-Shot Learning, Convolutional Neural Networks},
location = {Hyderabad, India},
series = {CoDS COMAD 2020}
}
@article{tang2019few,
title={Few-shot time-series classification with dual interpretability},
author={Tang, Wensi and Liu and Lu and Long and Guodong},
journal={Space},
volume={2},
number={T1},
pages={T1},
year={2019}
}
@INPROCEEDINGS{9647357,
author={Gupta, Priyanka and Bhaskarpandit and Sathvik and Gupta and Manik},
booktitle={2021 Digital Image Computing: Techniques and Applications (DICTA)},
title={Similarity Learning based Few Shot Learning for ECG Time Series Classification},
year={2021},
volume={},
number={},
pages={1-8},
doi={10.1109/DICTA52665.2021.9647357}}
@article{duin1997experiments,
title={Experiments with a featureless approach to pattern recognition},
author={Duin, Robert PW and de Ridder and Dick and Tax and David MJ},
journal={Pattern Recognition Letters},
volume={18},
number={11-13},
pages={1159--1166},
year={1997},
publisher={Elsevier}
}
@INPROCEEDINGS{8598355,
author={Dash and Prajna and Naik and Kshirasagar},
booktitle={2018 IEEE Electrical Power and Energy Conference (EPEC)},
title={A Very Deep One Dimensional Convolutional Neural Network (VDOCNN) for Appliance Power Signature Classification},
year={2018},
volume={},
number={},
pages={1-6},
doi={10.1109/EPEC.2018.8598355}}
@article{angelis2022nilm,
title={NILM applications: Literature review of learning approaches, recent developments and challenges},
author={Angelis, Georgios-Fotios and Timplalexis, Christos and Krinidis, Stelios and Ioannidis and Dimosthenis and Tzovaras and Dimitrios},
journal={Energy and Buildings},
pages={111951},
year={2022},
publisher={Elsevier}
}
@misc{sleep_states,
title={Sleep States Description},
url={https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/system-sleeping-states},
year={2023},
}
@misc{mitre_crypto,
title={Mitre ATT\&CK - T1496 Resource Hijacking},
url = {https://attack.mitre.org/versions/v13/techniques/T1496/},
}
@misc{mitre_botnet,
title={Mitre ATT\&CK - T1583.005 Acquire Infrastructure: Botnet},
url = {https://attack.mitre.org/versions/v13/techniques/T1583/005/},
}
@misc{mitre_prevent,
title={Mitre ATT\&CK - T1562.001 Impair Defenses: Disable or Modify Tools},
url = {https://attack.mitre.org/versions/v13/techniques/T1562/001/},
}
@misc{mitre_ransomware,
title={Mitre ATT\&CK - T1486 Data Encrypted for Impact},
url = {https://attack.mitre.org/versions/v13/techniques/T1486/},
}
@misc{opitz2021macro,
title={Macro F1 and Macro F1},
author={Juri Opitz and Sebastian Burst},
year={2021},
eprint={1911.03347},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
@misc{keras,
author = {François Chollet },
title = {keras},
year = {2015},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {https://github.com/fchollet/keras},
}
@article{sklearn,
title={Scikit-learn: Machine Learning in {P}ython},
author={Pedregosa and F. et al.},
journal={Journal of Machine Learning Research},
volume={12},
pages={2825--2830},
year={2011}
}
@INPROCEEDINGS{1253591,
author={Saputra, H. and Vijaykrishnan, N. and Kandemir, M. and Irwin, M.J. and Brooks, R. and Kim and S. and Zhang and W.},
booktitle={2003 Design, Automation and Test in Europe Conference and Exhibition},
title={Masking the energy behavior of DES encryption [smart cards]},
year={2003},
volume={},
number={},
pages={84-89},
doi={10.1109/DATE.2003.1253591}
}
@ARTICLE{6918465,
author={Khedkar, Ganesh and Kudithipudi and Dhireesha and Rose and Garrett S.},
journal={IEEE Transactions on Nanotechnology},
title={Power Profile Obfuscation Using Nanoscale Memristive Devices to Counter DPA Attacks},
year={2015},
volume={14},
number={1},
pages={26-35},
doi={10.1109/TNANO.2014.2362416}}

View file

@ -1 +0,0 @@
To Robert, for the bagels and explaining CMYK and color spaces.

View file

@ -1,556 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="540.15057mm"
height="120.66377mm"
viewBox="0 0 540.15057 120.66377"
version="1.1"
id="svg5"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="2w_experiment.svg"
inkscape:export-filename="2w_experiment.pdf"
inkscape:export-xdpi="175.618"
inkscape:export-ydpi="175.618"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.5"
inkscape:cx="1017"
inkscape:cy="334"
inkscape:window-width="1920"
inkscape:window-height="1030"
inkscape:window-x="3840"
inkscape:window-y="26"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-25.925243,-96.337988)">
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect241"
width="18.938515"
height="30.643162"
x="103.9744"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect354"
width="18.938515"
height="30.643162"
x="122.91291"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect356"
width="18.938515"
height="30.643162"
x="141.85143"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect358"
width="18.938515"
height="30.643162"
x="160.78995"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect360"
width="18.938515"
height="30.643162"
x="179.72845"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect362"
width="18.938515"
height="30.643162"
x="198.66698"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect364"
width="18.938515"
height="30.643162"
x="217.60548"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect366"
width="18.938515"
height="30.643162"
x="236.54401"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect368"
width="18.938515"
height="30.643162"
x="255.48253"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect370"
width="18.938515"
height="30.643162"
x="274.42105"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect372"
width="18.938515"
height="30.643162"
x="293.35956"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect374"
width="18.938515"
height="30.643162"
x="312.29807"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect376"
width="18.938515"
height="30.643162"
x="331.23657"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect378"
width="18.938515"
height="30.643162"
x="350.17511"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect380"
width="18.938515"
height="30.643162"
x="369.11362"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect382"
width="18.938515"
height="30.643162"
x="388.05212"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect384"
width="18.938515"
height="30.643162"
x="406.99066"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect386"
width="18.938515"
height="30.643162"
x="425.92917"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect388"
width="18.938515"
height="30.643162"
x="444.86768"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect390"
width="18.938515"
height="30.643162"
x="463.80621"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect392"
width="18.938515"
height="30.643162"
x="482.74472"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect394"
width="18.938515"
height="30.643162"
x="501.68323"
y="138.23457" />
<rect
style="fill:#cccccc;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect396"
width="18.938515"
height="30.643162"
x="520.62177"
y="138.23457" />
<rect
style="fill:#666666;stroke:none;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
id="rect398"
width="18.938515"
height="30.643162"
x="539.5603"
y="138.23457" />
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="101.00295"
y="105.39599"
id="text649"><tspan
sodipodi:role="line"
id="tspan647"
style="font-size:14px;stroke-width:0.0794137"
x="101.00295"
y="105.39599">0</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="176.763"
y="105.39599"
id="text653"><tspan
sodipodi:role="line"
id="tspan651"
style="font-size:14px;stroke-width:0.0794137"
x="176.763"
y="105.39599">4</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="252.67912"
y="105.39599"
id="text707"><tspan
sodipodi:role="line"
id="tspan705"
style="font-size:14px;stroke-width:0.0794137"
x="252.67912"
y="105.39599">8</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="325.16156"
y="105.39599"
id="text711"><tspan
sodipodi:role="line"
id="tspan709"
style="font-size:14px;stroke-width:0.0794137"
x="325.16156"
y="105.39599">12</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="400.8316"
y="105.39599"
id="text715"><tspan
sodipodi:role="line"
id="tspan713"
style="font-size:14px;stroke-width:0.0794137"
x="400.8316"
y="105.39599">16</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="476.84982"
y="105.39599"
id="text719"><tspan
sodipodi:role="line"
id="tspan717"
style="font-size:14px;stroke-width:0.0794137"
x="476.84982"
y="105.39599">20</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="552.4118"
y="105.39599"
id="text723"><tspan
sodipodi:role="line"
id="tspan721"
style="font-size:14px;stroke-width:0.0794137"
x="552.4118"
y="105.39599">24</tspan></text>
<path
id="rect2057"
style="fill:#80b3ff;stroke-width:0.670833;stroke-linecap:round;stroke-linejoin:round"
d="m 217.59796,152.04333 h 189.39268 v 13.13021 l -189.39268,-0.0539 z"
sodipodi:nodetypes="ccccc" />
<text
xml:space="preserve"
style="font-size:9px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="296.68713"
y="162.5531"
id="text2158"><tspan
sodipodi:role="line"
id="tspan2156"
style="font-size:9px;stroke-width:0.264583"
x="296.68713"
y="162.5531">Work Hours</tspan></text>
<path
id="path2160"
style="fill:#ffe680;stroke-width:0.669568;stroke-linecap:round;stroke-linejoin:round"
d="m 480.05162,152.04333 78.4472,0.0495 v 1.44799 11.63273 l -78.4472,-0.0939 z"
sodipodi:nodetypes="cccccc" />
<text
xml:space="preserve"
style="font-size:9px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="503.9718"
y="162.4709"
id="text2164"><tspan
sodipodi:role="line"
id="tspan2162"
style="font-size:9px;stroke-width:0.264583"
x="503.9718"
y="162.4709">Maintenance</tspan></text>
<path
id="path2166"
style="fill:#cd87de;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
d="m 103.9744,152.09723 113.62356,-0.0539 h 0.008 v 13.07631 l -113.63109,0.0539 z"
sodipodi:nodetypes="cccccc" />
<path
id="path2168"
style="fill:#cd87de;stroke-width:0.669568;stroke-linecap:round;stroke-linejoin:round"
d="m 406.99064,152.04333 75.75408,0.002 v 13.03479 l -75.75588,0.0937 z"
sodipodi:nodetypes="ccccc" />
<text
xml:space="preserve"
style="font-size:9px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="154.0302"
y="161.89915"
id="text2174"><tspan
sodipodi:role="line"
id="tspan2172"
style="font-size:9px;stroke-width:0.264583"
x="154.0302"
y="161.89915">Sleep</tspan></text>
<text
xml:space="preserve"
style="font-size:9px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="438.09744"
y="161.92709"
id="text2178"><tspan
sodipodi:role="line"
id="tspan2176"
style="font-size:9px;stroke-width:0.264583"
x="438.09744"
y="161.92709">Sleep</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="25.745243"
y="156.27774"
id="text2186"><tspan
sodipodi:role="line"
id="tspan2184"
style="font-size:12px;stroke-width:0.264583"
x="25.745243"
y="156.27774">Established</tspan><tspan
sodipodi:role="line"
style="font-size:12px;stroke-width:0.264583"
x="25.745243"
y="171.27774"
id="tspan2188">timetable</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="25.745243"
y="199.00177"
id="text2194"><tspan
sodipodi:role="line"
style="font-size:12px;stroke-width:0.264583"
x="25.745243"
y="199.00177"
id="tspan2192">Rules</tspan></text>
<path
id="rect2306"
style="fill:#cd87de;stroke:none;stroke-width:0.528779;stroke-linecap:round;stroke-linejoin:round"
d="m 103.9744,191.94177 v 11.20707 h 1.79055 v -4.91908 l 110.18228,0.28486 v 4.64017 h 1.79054 v -11.20707 h -1.79054 v 5.19799 l -110.18228,-0.28486 v -4.91908 z"
sodipodi:nodetypes="ccccccccccccc" />
<path
id="path2338"
style="fill:#cd87de;stroke:none;stroke-width:0.531212;stroke-linecap:round;stroke-linejoin:round"
d="m 407.12295,191.94177 v 11.20707 H 408.93 v -4.91908 l 72.13994,0.33511 v 4.64017 h 1.80705 v -11.20707 h -1.80705 v 5.19799 L 408.93,196.86085 v -4.91908 z"
sodipodi:nodetypes="ccccccccccccc" />
<text
xml:space="preserve"
style="font-size:12px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="157.85608"
y="195.06633"
id="text2497"><tspan
sodipodi:role="line"
id="tspan2495"
style="font-size:12px;stroke-width:0.264583"
x="157.85608"
y="195.06633">1</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="441.99997"
y="195.06633"
id="text2501"><tspan
sodipodi:role="line"
id="tspan2499"
style="font-size:12px;stroke-width:0.264583"
x="441.99997"
y="195.06633">1</tspan></text>
<path
id="path2507"
style="fill:#ffe680;fill-opacity:1;stroke:none;stroke-width:0.531212;stroke-linecap:round;stroke-linejoin:round"
d="m 482.87699,191.99797 v 11.20707 h 1.80705 v -4.91908 l 72.0466,-0.042 v 4.64017 h 1.80705 v -11.20707 h -1.80705 v 5.19799 l -72.0466,0.042 v -4.91908 z"
sodipodi:nodetypes="ccccccccccccc" />
<text
xml:space="preserve"
style="font-size:12px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="517.69531"
y="195.09633"
id="text2925"><tspan
sodipodi:role="line"
id="tspan2923"
style="font-size:12px;stroke-width:0.264583"
x="517.69531"
y="195.09633">2</tspan></text>
<path
id="path2927"
style="fill:#80b3ff;fill-opacity:1;stroke:none;stroke-width:0.528779;stroke-linecap:round;stroke-linejoin:round"
d="m 217.73777,191.94177 v 11.20707 h 1.79054 v -4.91908 l 185.8041,0.31772 v 4.64017 h 1.79054 v -11.20707 h -1.79054 v 5.19799 l -185.8041,-0.31772 v -4.91908 z"
sodipodi:nodetypes="ccccccccccccc" />
<text
xml:space="preserve"
style="font-size:8px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="319.86777"
y="214.58556"
id="text3069"><tspan
sodipodi:role="line"
id="tspan3067"
style="font-size:8px;stroke-width:0.264583"
x="319.86777"
y="214.58556" /></text>
<path
id="path3071"
style="fill:#4d4d4d;stroke:none;stroke-width:0.528779;stroke-linecap:round;stroke-linejoin:round"
d="m 103.9744,205.79469 v 11.20707 h 1.79055 v -4.91908 l 450.9822,0.27891 v 4.64017 h 1.79054 v -11.20707 h -1.79054 v 5.19799 l -450.9822,-0.27891 v -4.91908 z"
sodipodi:nodetypes="ccccccccccccc" />
<text
xml:space="preserve"
style="font-size:12px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="328.23804"
y="209.30025"
id="text3075"><tspan
sodipodi:role="line"
id="tspan3073"
style="font-size:12px;stroke-width:0.264583"
x="328.23804"
y="209.30025">3</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="309.46637"
y="195.10233"
id="text3097"><tspan
sodipodi:role="line"
id="tspan3095"
style="font-size:12px;stroke-width:0.264583"
x="309.46637"
y="195.10233">4</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="25.745243"
y="105.08312"
id="text3244"><tspan
sodipodi:role="line"
style="font-size:12px;stroke-width:0.264583"
x="25.745243"
y="105.08312"
id="tspan3242">Time</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="101.04498"
y="126.33556"
id="text590"><tspan
sodipodi:role="line"
id="tspan588"
style="font-size:14px;stroke-width:0.0794137"
x="101.04498"
y="126.33556">0</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="25.745243"
y="126.0227"
id="text614"><tspan
sodipodi:role="line"
style="font-size:12px;stroke-width:0.264583"
x="25.745243"
y="126.0227"
id="tspan612">Compressed</tspan><tspan
sodipodi:role="line"
style="font-size:12px;stroke-width:0.264583"
x="25.745243"
y="141.02271"
id="tspan775">Time</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="555.52734"
y="126.41959"
id="text421"><tspan
sodipodi:role="line"
id="tspan419"
style="font-size:14px;stroke-width:0.0794137"
x="555.52734"
y="126.41959">4</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="214.53951"
y="126.38358"
id="text425"><tspan
sodipodi:role="line"
id="tspan423"
style="font-size:14px;stroke-width:0.0794137"
x="214.53951"
y="126.38358">1</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="327.96201"
y="126.4136"
id="text429"><tspan
sodipodi:role="line"
id="tspan427"
style="font-size:14px;stroke-width:0.0794137"
x="327.96201"
y="126.4136">2</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;line-height:1.25;font-family:'STIX Two Text';-inkscape-font-specification:'STIX Two Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.0794137"
x="441.58859"
y="126.33556"
id="text433"><tspan
sodipodi:role="line"
id="tspan431"
style="font-size:14px;stroke-width:0.0794137"
x="441.58859"
y="126.33556">3</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -1,796 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="833.70642" height="228.584765" viewBox="0 0 833.70642 228.584765">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 1.265625 -6.796875 C 1.265625 -8.878906 1.988281 -10.570312 3.4375 -11.875 C 4.894531 -13.175781 6.820312 -13.828125 9.21875 -13.828125 C 10.6875 -13.828125 11.992188 -13.378906 13.140625 -12.484375 L 14.453125 -13.65625 C 14.578125 -13.769531 14.703125 -13.828125 14.828125 -13.828125 C 14.984375 -13.828125 15.082031 -13.789062 15.125 -13.71875 C 15.164062 -13.644531 15.1875 -13.5 15.1875 -13.28125 L 15.1875 -9.015625 C 15.1875 -8.742188 15.15625 -8.582031 15.09375 -8.53125 C 15.039062 -8.476562 14.890625 -8.453125 14.640625 -8.453125 C 14.410156 -8.453125 14.269531 -8.472656 14.21875 -8.515625 C 14.164062 -8.554688 14.128906 -8.671875 14.109375 -8.859375 C 13.890625 -10.085938 13.363281 -11.066406 12.53125 -11.796875 C 11.695312 -12.523438 10.738281 -12.890625 9.65625 -12.890625 C 8.738281 -12.890625 7.910156 -12.734375 7.171875 -12.421875 C 6.429688 -12.109375 5.851562 -11.691406 5.4375 -11.171875 C 4.675781 -10.171875 4.296875 -8.722656 4.296875 -6.828125 C 4.296875 -4.910156 4.671875 -3.472656 5.421875 -2.515625 C 5.878906 -1.921875 6.5 -1.472656 7.28125 -1.171875 C 8.070312 -0.867188 8.914062 -0.71875 9.8125 -0.71875 C 10.519531 -0.71875 11.113281 -0.859375 11.59375 -1.140625 C 12.101562 -1.441406 12.359375 -1.90625 12.359375 -2.53125 L 12.359375 -4.546875 L 9.5 -4.546875 L 9.5 -5.46875 C 10.21875 -5.4375 11.578125 -5.421875 13.578125 -5.421875 C 15.242188 -5.421875 16.304688 -5.4375 16.765625 -5.46875 L 16.765625 -4.546875 L 15.1875 -4.546875 L 15.1875 -0.546875 C 15.1875 -0.179688 15.09375 0 14.90625 0 C 14.8125 0 14.53125 -0.113281 14.0625 -0.34375 C 13.601562 -0.582031 13.234375 -0.820312 12.953125 -1.0625 C 12.265625 -0.207031 11.035156 0.21875 9.265625 0.21875 C 6.773438 0.21875 4.816406 -0.441406 3.390625 -1.765625 C 1.972656 -3.085938 1.265625 -4.765625 1.265625 -6.796875 Z M 1.265625 -6.796875 "/>
</g>
<g id="glyph-0-1">
<path d="M 0.734375 0 L 0.734375 -0.9375 L 2.109375 -0.9375 L 2.109375 -7.0625 C 2.109375 -7.425781 2.035156 -7.644531 1.890625 -7.71875 C 1.753906 -7.800781 1.367188 -7.84375 0.734375 -7.84375 L 0.734375 -8.765625 L 4.03125 -8.9375 L 4.03125 -6.6875 C 4.570312 -8.175781 5.453125 -8.925781 6.671875 -8.9375 C 7.222656 -8.9375 7.707031 -8.785156 8.125 -8.484375 C 8.550781 -8.191406 8.765625 -7.800781 8.765625 -7.3125 C 8.765625 -6.9375 8.640625 -6.640625 8.390625 -6.421875 C 8.148438 -6.203125 7.867188 -6.09375 7.546875 -6.09375 C 7.234375 -6.09375 6.953125 -6.195312 6.703125 -6.40625 C 6.460938 -6.613281 6.34375 -6.914062 6.34375 -7.3125 C 6.34375 -7.664062 6.46875 -7.96875 6.71875 -8.21875 C 6.257812 -8.21875 5.859375 -8.085938 5.515625 -7.828125 C 5.171875 -7.566406 4.910156 -7.226562 4.734375 -6.8125 C 4.566406 -6.394531 4.441406 -5.988281 4.359375 -5.59375 C 4.285156 -5.195312 4.25 -4.800781 4.25 -4.40625 L 4.25 -0.9375 L 5.96875 -0.9375 L 5.96875 0 C 5.488281 -0.0390625 4.578125 -0.0625 3.234375 -0.0625 C 2.953125 -0.0625 2.117188 -0.0390625 0.734375 0 Z M 0.734375 0 "/>
</g>
<g id="glyph-0-2">
<path d="M 0.640625 -4.328125 C 0.640625 -5.679688 1.082031 -6.796875 1.96875 -7.671875 C 2.863281 -8.546875 4.109375 -8.984375 5.703125 -8.984375 C 7.273438 -8.984375 8.507812 -8.546875 9.40625 -7.671875 C 10.300781 -6.796875 10.75 -5.679688 10.75 -4.328125 C 10.75 -3.035156 10.304688 -1.972656 9.421875 -1.140625 C 8.535156 -0.304688 7.289062 0.109375 5.6875 0.109375 C 4.09375 0.109375 2.851562 -0.304688 1.96875 -1.140625 C 1.082031 -1.972656 0.640625 -3.035156 0.640625 -4.328125 Z M 3.171875 -4.546875 C 3.171875 -4.148438 3.175781 -3.847656 3.1875 -3.640625 C 3.195312 -3.429688 3.222656 -3.144531 3.265625 -2.78125 C 3.304688 -2.414062 3.378906 -2.132812 3.484375 -1.9375 C 3.597656 -1.738281 3.742188 -1.523438 3.921875 -1.296875 C 4.097656 -1.078125 4.332031 -0.914062 4.625 -0.8125 C 4.925781 -0.71875 5.28125 -0.671875 5.6875 -0.671875 C 6.101562 -0.671875 6.457031 -0.71875 6.75 -0.8125 C 7.050781 -0.914062 7.289062 -1.078125 7.46875 -1.296875 C 7.644531 -1.523438 7.785156 -1.738281 7.890625 -1.9375 C 7.992188 -2.132812 8.070312 -2.414062 8.125 -2.78125 C 8.175781 -3.144531 8.203125 -3.429688 8.203125 -3.640625 C 8.210938 -3.847656 8.21875 -4.148438 8.21875 -4.546875 C 8.21875 -5.910156 8.078125 -6.816406 7.796875 -7.265625 C 7.367188 -7.941406 6.671875 -8.28125 5.703125 -8.28125 C 4.640625 -8.28125 3.90625 -7.894531 3.5 -7.125 C 3.28125 -6.675781 3.171875 -5.816406 3.171875 -4.546875 Z M 3.171875 -4.546875 "/>
</g>
<g id="glyph-0-3">
<path d="M 0.890625 -7.84375 L 0.890625 -8.765625 L 4.53125 -8.9375 L 4.53125 -2.15625 C 4.53125 -1.550781 4.613281 -1.140625 4.78125 -0.921875 C 4.945312 -0.703125 5.390625 -0.59375 6.109375 -0.59375 C 6.835938 -0.59375 7.429688 -0.835938 7.890625 -1.328125 C 8.347656 -1.816406 8.578125 -2.46875 8.578125 -3.28125 L 8.578125 -7.0625 C 8.578125 -7.425781 8.503906 -7.644531 8.359375 -7.71875 C 8.222656 -7.800781 7.835938 -7.84375 7.203125 -7.84375 L 7.203125 -8.765625 L 10.828125 -8.9375 L 10.828125 -1.703125 C 10.828125 -1.335938 10.894531 -1.117188 11.03125 -1.046875 C 11.175781 -0.972656 11.566406 -0.9375 12.203125 -0.9375 L 12.203125 0 L 8.6875 0.109375 L 8.6875 -1.421875 C 8.09375 -0.398438 7.148438 0.109375 5.859375 0.109375 C 5.847656 0.109375 5.835938 0.109375 5.828125 0.109375 C 4.703125 0.109375 3.820312 -0.0664062 3.1875 -0.421875 C 2.5625 -0.785156 2.25 -1.457031 2.25 -2.4375 L 2.25 -7.0625 C 2.25 -7.425781 2.179688 -7.644531 2.046875 -7.71875 C 1.910156 -7.800781 1.523438 -7.84375 0.890625 -7.84375 Z M 0.890625 -7.84375 "/>
</g>
<g id="glyph-0-4">
<path d="M 0.890625 0 L 0.890625 -0.9375 L 2.25 -0.9375 L 2.25 -7.0625 C 2.25 -7.425781 2.179688 -7.644531 2.046875 -7.71875 C 1.910156 -7.800781 1.523438 -7.84375 0.890625 -7.84375 L 0.890625 -8.765625 L 4.296875 -8.9375 L 4.296875 -6.78125 C 5.023438 -8.207031 6.1875 -8.925781 7.78125 -8.9375 C 8.800781 -8.9375 9.5625 -8.710938 10.0625 -8.265625 C 10.570312 -7.816406 10.828125 -7.085938 10.828125 -6.078125 L 10.828125 -0.9375 L 12.203125 -0.9375 L 12.203125 0 C 11.097656 -0.0390625 10.265625 -0.0625 9.703125 -0.0625 C 9.140625 -0.0625 8.304688 -0.0390625 7.203125 0 L 7.203125 -0.9375 L 8.578125 -0.9375 L 8.578125 -6.28125 C 8.578125 -7 8.484375 -7.5 8.296875 -7.78125 C 8.109375 -8.070312 7.835938 -8.21875 7.484375 -8.21875 C 6.753906 -8.21875 6.078125 -7.941406 5.453125 -7.390625 C 4.835938 -6.835938 4.53125 -6.066406 4.53125 -5.078125 L 4.53125 -0.9375 L 5.890625 -0.9375 L 5.890625 0 C 4.773438 -0.0390625 3.941406 -0.0625 3.390625 -0.0625 C 2.835938 -0.0625 2.003906 -0.0390625 0.890625 0 Z M 0.890625 0 "/>
</g>
<g id="glyph-0-5">
<path d="M 0.75 -4.390625 C 0.75 -5.765625 1.210938 -6.863281 2.140625 -7.6875 C 3.066406 -8.519531 4.265625 -8.9375 5.734375 -8.9375 C 6.753906 -8.9375 7.644531 -8.632812 8.40625 -8.03125 L 8.40625 -11.90625 C 8.40625 -12.269531 8.335938 -12.488281 8.203125 -12.5625 C 8.066406 -12.644531 7.679688 -12.6875 7.046875 -12.6875 L 7.046875 -13.609375 L 10.5625 -13.765625 L 10.5625 -1.703125 C 10.5625 -1.335938 10.628906 -1.117188 10.765625 -1.046875 C 10.910156 -0.972656 11.296875 -0.9375 11.921875 -0.9375 L 11.921875 0 L 8.296875 0.109375 L 8.296875 -0.859375 C 7.484375 -0.210938 6.554688 0.109375 5.515625 0.109375 C 4.054688 0.109375 2.894531 -0.304688 2.03125 -1.140625 C 1.175781 -1.984375 0.75 -3.066406 0.75 -4.390625 Z M 3.296875 -4.390625 C 3.296875 -4.054688 3.296875 -3.789062 3.296875 -3.59375 C 3.304688 -3.40625 3.332031 -3.140625 3.375 -2.796875 C 3.414062 -2.453125 3.488281 -2.171875 3.59375 -1.953125 C 3.695312 -1.734375 3.832031 -1.507812 4 -1.28125 C 4.175781 -1.050781 4.410156 -0.878906 4.703125 -0.765625 C 4.992188 -0.648438 5.332031 -0.59375 5.71875 -0.59375 C 6.738281 -0.59375 7.597656 -1.078125 8.296875 -2.046875 L 8.296875 -7 C 7.691406 -7.8125 6.90625 -8.21875 5.9375 -8.21875 C 5 -8.21875 4.289062 -7.875 3.8125 -7.1875 C 3.46875 -6.675781 3.296875 -5.742188 3.296875 -4.390625 Z M 3.296875 -4.390625 "/>
</g>
<g id="glyph-0-6">
</g>
<g id="glyph-0-7">
<path d="M 0.828125 -8.609375 L 1.25 -13.390625 L 14.609375 -13.390625 L 15.015625 -8.609375 L 14.09375 -8.609375 C 14.039062 -9.171875 13.992188 -9.597656 13.953125 -9.890625 C 13.910156 -10.191406 13.820312 -10.535156 13.6875 -10.921875 C 13.550781 -11.316406 13.375 -11.601562 13.15625 -11.78125 C 12.945312 -11.96875 12.648438 -12.125 12.265625 -12.25 C 11.878906 -12.382812 11.410156 -12.453125 10.859375 -12.453125 L 9.34375 -12.453125 L 9.34375 -0.9375 L 12.390625 -0.9375 L 12.390625 0 C 11.671875 -0.0390625 10.1875 -0.0625 7.9375 -0.0625 C 5.6875 -0.0625 4.203125 -0.0390625 3.484375 0 L 3.484375 -0.9375 L 6.53125 -0.9375 L 6.53125 -12.453125 L 5 -12.453125 C 4.445312 -12.453125 3.972656 -12.382812 3.578125 -12.25 C 3.191406 -12.113281 2.890625 -11.953125 2.671875 -11.765625 C 2.460938 -11.578125 2.289062 -11.289062 2.15625 -10.90625 C 2.03125 -10.53125 1.941406 -10.191406 1.890625 -9.890625 C 1.847656 -9.597656 1.804688 -9.171875 1.765625 -8.609375 Z M 0.828125 -8.609375 "/>
</g>
<g id="glyph-0-8">
<path d="M 0.421875 -7.875 L 0.421875 -8.59375 C 1.335938 -8.625 2.054688 -9.03125 2.578125 -9.8125 C 3.097656 -10.601562 3.363281 -11.53125 3.375 -12.59375 L 4.296875 -12.59375 L 4.296875 -8.8125 L 7.203125 -8.8125 L 7.203125 -7.875 L 4.296875 -7.875 L 4.296875 -2.40625 C 4.296875 -1.25 4.679688 -0.671875 5.453125 -0.671875 C 5.773438 -0.671875 6.050781 -0.816406 6.28125 -1.109375 C 6.519531 -1.410156 6.640625 -1.875 6.640625 -2.5 L 6.640625 -3.5 L 7.578125 -3.5 L 7.578125 -2.46875 C 7.578125 -1.71875 7.359375 -1.097656 6.921875 -0.609375 C 6.492188 -0.128906 5.914062 0.109375 5.1875 0.109375 C 3.09375 0.109375 2.046875 -0.738281 2.046875 -2.4375 L 2.046875 -7.875 Z M 0.421875 -7.875 "/>
</g>
<g id="glyph-0-9">
<path d="M 0.890625 0 L 0.890625 -0.9375 L 2.25 -0.9375 L 2.25 -11.90625 C 2.25 -12.269531 2.179688 -12.488281 2.046875 -12.5625 C 1.910156 -12.644531 1.523438 -12.6875 0.890625 -12.6875 L 0.890625 -13.609375 L 4.40625 -13.765625 L 4.40625 -7.03125 L 4.421875 -7.03125 C 5.171875 -8.300781 6.289062 -8.9375 7.78125 -8.9375 C 8.800781 -8.9375 9.5625 -8.710938 10.0625 -8.265625 C 10.570312 -7.816406 10.828125 -7.085938 10.828125 -6.078125 L 10.828125 -0.9375 L 12.203125 -0.9375 L 12.203125 0 C 11.097656 -0.0390625 10.265625 -0.0625 9.703125 -0.0625 C 9.140625 -0.0625 8.304688 -0.0390625 7.203125 0 L 7.203125 -0.9375 L 8.578125 -0.9375 L 8.578125 -6.28125 C 8.578125 -7 8.484375 -7.5 8.296875 -7.78125 C 8.109375 -8.070312 7.835938 -8.21875 7.484375 -8.21875 C 6.753906 -8.21875 6.078125 -7.941406 5.453125 -7.390625 C 4.835938 -6.835938 4.53125 -6.066406 4.53125 -5.078125 L 4.53125 -0.9375 L 5.890625 -0.9375 L 5.890625 0 C 4.773438 -0.0390625 3.941406 -0.0625 3.390625 -0.0625 C 2.835938 -0.0625 2.003906 -0.0390625 0.890625 0 Z M 0.890625 0 "/>
</g>
<g id="glyph-0-10">
<path d="M 0.78125 0 L 0.78125 -0.9375 L 2.921875 -0.9375 L 2.921875 -12.5625 L 0.78125 -12.5625 L 0.78125 -13.5 L 13.09375 -13.5 L 13.703125 -8.703125 L 12.78125 -8.703125 C 12.71875 -9.253906 12.640625 -9.703125 12.546875 -10.046875 C 12.460938 -10.398438 12.328125 -10.75 12.140625 -11.09375 C 11.960938 -11.4375 11.734375 -11.707031 11.453125 -11.90625 C 11.171875 -12.101562 10.800781 -12.257812 10.34375 -12.375 C 9.894531 -12.5 9.363281 -12.5625 8.75 -12.5625 L 5.734375 -12.5625 L 5.734375 -7.453125 L 6.828125 -7.453125 C 7.710938 -7.453125 8.285156 -7.628906 8.546875 -7.984375 C 8.804688 -8.347656 8.9375 -8.945312 8.9375 -9.78125 L 9.859375 -9.78125 L 9.859375 -4.203125 L 8.9375 -4.203125 C 8.9375 -5.035156 8.804688 -5.628906 8.546875 -5.984375 C 8.285156 -6.347656 7.710938 -6.53125 6.828125 -6.53125 L 5.734375 -6.53125 L 5.734375 -0.9375 L 8.75 -0.9375 C 9.34375 -0.9375 9.867188 -0.976562 10.328125 -1.0625 C 10.785156 -1.144531 11.171875 -1.285156 11.484375 -1.484375 C 11.804688 -1.691406 12.078125 -1.910156 12.296875 -2.140625 C 12.515625 -2.378906 12.695312 -2.6875 12.84375 -3.0625 C 12.988281 -3.445312 13.097656 -3.804688 13.171875 -4.140625 C 13.253906 -4.484375 13.332031 -4.914062 13.40625 -5.4375 L 14.34375 -5.4375 L 13.421875 0 Z M 0.78125 0 "/>
</g>
<g id="glyph-0-11">
<path d="M 0.640625 -2.140625 C 0.640625 -4.035156 2.785156 -5.078125 7.078125 -5.265625 L 7.078125 -5.9375 C 7.078125 -7.5 6.351562 -8.28125 4.90625 -8.28125 C 4.382812 -8.28125 3.90625 -8.234375 3.46875 -8.140625 C 3.757812 -7.941406 3.90625 -7.613281 3.90625 -7.15625 C 3.90625 -6.757812 3.78125 -6.453125 3.53125 -6.234375 C 3.28125 -6.015625 2.988281 -5.90625 2.65625 -5.90625 C 2.351562 -5.90625 2.070312 -6.015625 1.8125 -6.234375 C 1.550781 -6.453125 1.421875 -6.757812 1.421875 -7.15625 C 1.421875 -8.375 2.609375 -8.984375 4.984375 -8.984375 C 6.410156 -8.984375 7.492188 -8.707031 8.234375 -8.15625 C 8.972656 -7.601562 9.34375 -6.863281 9.34375 -5.9375 L 9.34375 -1.671875 C 9.34375 -1.484375 9.351562 -1.347656 9.375 -1.265625 C 9.40625 -1.191406 9.515625 -1.117188 9.703125 -1.046875 C 9.890625 -0.972656 10.175781 -0.9375 10.5625 -0.9375 C 10.675781 -0.9375 10.757812 -0.925781 10.8125 -0.90625 C 10.863281 -0.894531 10.921875 -0.859375 10.984375 -0.796875 C 11.046875 -0.734375 11.078125 -0.625 11.078125 -0.46875 C 11.078125 -0.257812 11.03125 -0.128906 10.9375 -0.078125 C 10.84375 -0.0234375 10.675781 0 10.4375 0 L 9.484375 0 C 8.992188 0 8.597656 -0.046875 8.296875 -0.140625 C 7.992188 -0.234375 7.785156 -0.367188 7.671875 -0.546875 C 7.554688 -0.734375 7.484375 -0.890625 7.453125 -1.015625 C 7.429688 -1.148438 7.421875 -1.320312 7.421875 -1.53125 C 6.847656 -0.4375 5.863281 0.109375 4.46875 0.109375 C 4.070312 0.109375 3.671875 0.078125 3.265625 0.015625 C 2.867188 -0.0351562 2.457031 -0.132812 2.03125 -0.28125 C 1.613281 -0.4375 1.273438 -0.671875 1.015625 -0.984375 C 0.765625 -1.304688 0.640625 -1.691406 0.640625 -2.140625 Z M 2.953125 -2.15625 C 2.953125 -1.71875 3.128906 -1.347656 3.484375 -1.046875 C 3.835938 -0.742188 4.265625 -0.59375 4.765625 -0.59375 C 4.941406 -0.59375 5.132812 -0.617188 5.34375 -0.671875 C 5.5625 -0.722656 5.8125 -0.816406 6.09375 -0.953125 C 6.382812 -1.085938 6.617188 -1.3125 6.796875 -1.625 C 6.984375 -1.945312 7.078125 -2.328125 7.078125 -2.765625 L 7.078125 -4.640625 C 6.785156 -4.628906 6.507812 -4.609375 6.25 -4.578125 C 6 -4.546875 5.65625 -4.472656 5.21875 -4.359375 C 4.78125 -4.242188 4.410156 -4.109375 4.109375 -3.953125 C 3.804688 -3.796875 3.535156 -3.554688 3.296875 -3.234375 C 3.066406 -2.921875 2.953125 -2.5625 2.953125 -2.15625 Z M 2.953125 -2.15625 "/>
</g>
<g id="glyph-0-12">
<path d="M 0.75 -0.4375 L 0.75 -2.59375 C 0.75 -2.84375 0.769531 -3 0.8125 -3.0625 C 0.863281 -3.132812 1.003906 -3.171875 1.234375 -3.171875 C 1.390625 -3.171875 1.492188 -3.15625 1.546875 -3.125 C 1.609375 -3.101562 1.660156 -3.023438 1.703125 -2.890625 C 1.785156 -2.617188 1.875 -2.375 1.96875 -2.15625 C 2.070312 -1.945312 2.222656 -1.707031 2.421875 -1.4375 C 2.628906 -1.164062 2.914062 -0.957031 3.28125 -0.8125 C 3.644531 -0.664062 4.070312 -0.59375 4.5625 -0.59375 C 6.070312 -0.59375 6.828125 -1.085938 6.828125 -2.078125 C 6.828125 -2.359375 6.753906 -2.597656 6.609375 -2.796875 C 6.460938 -2.992188 6.25 -3.148438 5.96875 -3.265625 C 5.6875 -3.378906 5.457031 -3.457031 5.28125 -3.5 C 5.101562 -3.550781 4.882812 -3.597656 4.625 -3.640625 C 3.976562 -3.753906 3.523438 -3.835938 3.265625 -3.890625 C 3.015625 -3.941406 2.726562 -4.035156 2.40625 -4.171875 C 2.082031 -4.316406 1.796875 -4.5 1.546875 -4.71875 C 1.015625 -5.164062 0.75 -5.722656 0.75 -6.390625 C 0.75 -6.796875 0.820312 -7.15625 0.96875 -7.46875 C 1.113281 -7.789062 1.316406 -8.039062 1.578125 -8.21875 C 1.835938 -8.40625 2.09375 -8.550781 2.34375 -8.65625 C 2.59375 -8.769531 2.878906 -8.847656 3.203125 -8.890625 C 3.523438 -8.929688 3.757812 -8.957031 3.90625 -8.96875 C 4.0625 -8.976562 4.226562 -8.984375 4.40625 -8.984375 C 5.238281 -8.984375 5.910156 -8.859375 6.421875 -8.609375 C 6.929688 -8.859375 7.226562 -8.984375 7.3125 -8.984375 C 7.46875 -8.984375 7.566406 -8.945312 7.609375 -8.875 C 7.648438 -8.800781 7.671875 -8.65625 7.671875 -8.4375 L 7.671875 -6.84375 C 7.671875 -6.59375 7.644531 -6.4375 7.59375 -6.375 C 7.539062 -6.3125 7.40625 -6.28125 7.1875 -6.28125 C 6.976562 -6.28125 6.851562 -6.304688 6.8125 -6.359375 C 6.769531 -6.421875 6.738281 -6.53125 6.71875 -6.6875 C 6.613281 -7.800781 5.835938 -8.359375 4.390625 -8.359375 C 2.910156 -8.359375 2.164062 -7.945312 2.15625 -7.125 C 2.15625 -6.894531 2.21875 -6.703125 2.34375 -6.546875 C 2.46875 -6.390625 2.660156 -6.265625 2.921875 -6.171875 C 3.179688 -6.078125 3.382812 -6.007812 3.53125 -5.96875 C 3.675781 -5.925781 3.894531 -5.878906 4.1875 -5.828125 C 5.039062 -5.679688 5.65625 -5.550781 6.03125 -5.4375 C 6.414062 -5.332031 6.785156 -5.148438 7.140625 -4.890625 C 7.867188 -4.304688 8.234375 -3.601562 8.234375 -2.78125 C 8.234375 -2.3125 8.160156 -1.898438 8.015625 -1.546875 C 7.867188 -1.203125 7.664062 -0.929688 7.40625 -0.734375 C 7.15625 -0.535156 6.898438 -0.375 6.640625 -0.25 C 6.390625 -0.125 6.097656 -0.0390625 5.765625 0 C 5.441406 0.0507812 5.207031 0.0820312 5.0625 0.09375 C 4.914062 0.101562 4.75 0.109375 4.5625 0.109375 C 3.613281 0.109375 2.832031 -0.0976562 2.21875 -0.515625 L 1.703125 -0.171875 C 1.429688 0.015625 1.238281 0.109375 1.125 0.109375 C 1.125 0.109375 1.117188 0.109375 1.109375 0.109375 C 0.953125 0.109375 0.851562 0.0703125 0.8125 0 C 0.769531 -0.0703125 0.75 -0.21875 0.75 -0.4375 Z M 0.75 -0.4375 "/>
</g>
<g id="glyph-0-13">
<path d="M 0.9375 0 L 0.9375 -0.9375 L 2.3125 -0.9375 L 2.3125 -7.0625 C 2.3125 -7.425781 2.242188 -7.644531 2.109375 -7.71875 C 1.972656 -7.800781 1.597656 -7.84375 0.984375 -7.84375 L 0.984375 -8.765625 L 4.453125 -8.9375 L 4.453125 -0.9375 L 5.671875 -0.9375 L 5.671875 0 C 4.242188 -0.0390625 3.472656 -0.0625 3.359375 -0.0625 C 2.960938 -0.0625 2.15625 -0.0390625 0.9375 0 Z M 1.984375 -11.15625 C 1.691406 -11.457031 1.546875 -11.816406 1.546875 -12.234375 C 1.546875 -12.660156 1.691406 -13.023438 1.984375 -13.328125 C 2.285156 -13.628906 2.65625 -13.78125 3.09375 -13.78125 C 3.519531 -13.78125 3.882812 -13.628906 4.1875 -13.328125 C 4.5 -13.023438 4.65625 -12.660156 4.65625 -12.234375 C 4.65625 -11.816406 4.5 -11.457031 4.1875 -11.15625 C 3.882812 -10.851562 3.519531 -10.703125 3.09375 -10.703125 C 2.65625 -10.703125 2.285156 -10.851562 1.984375 -11.15625 Z M 1.984375 -11.15625 "/>
</g>
<g id="glyph-0-14">
<path d="M 0.640625 1.484375 C 0.640625 1.203125 0.710938 0.941406 0.859375 0.703125 C 1.003906 0.472656 1.1875 0.296875 1.40625 0.171875 C 1.632812 0.046875 1.816406 -0.0390625 1.953125 -0.09375 C 2.085938 -0.15625 2.21875 -0.207031 2.34375 -0.25 C 1.757812 -0.707031 1.46875 -1.335938 1.46875 -2.140625 C 1.46875 -2.742188 1.691406 -3.332031 2.140625 -3.90625 C 1.828125 -4.132812 1.578125 -4.4375 1.390625 -4.8125 C 1.203125 -5.1875 1.109375 -5.578125 1.109375 -5.984375 C 1.109375 -6.785156 1.4375 -7.476562 2.09375 -8.0625 C 2.75 -8.644531 3.738281 -8.9375 5.0625 -8.9375 C 6.1875 -8.9375 7.070312 -8.71875 7.71875 -8.28125 C 8.351562 -8.78125 9.054688 -9.03125 9.828125 -9.03125 C 10.234375 -9.03125 10.539062 -8.90625 10.75 -8.65625 C 10.96875 -8.414062 11.078125 -8.15625 11.078125 -7.875 C 11.078125 -7.632812 10.992188 -7.429688 10.828125 -7.265625 C 10.671875 -7.109375 10.46875 -7.03125 10.21875 -7.03125 C 9.96875 -7.03125 9.765625 -7.109375 9.609375 -7.265625 C 9.453125 -7.421875 9.375 -7.625 9.375 -7.875 C 9.375 -8.007812 9.398438 -8.144531 9.453125 -8.28125 C 9.023438 -8.238281 8.613281 -8.109375 8.21875 -7.890625 C 8.75 -7.328125 9.015625 -6.691406 9.015625 -5.984375 C 9.015625 -5.191406 8.6875 -4.503906 8.03125 -3.921875 C 7.375 -3.335938 6.382812 -3.046875 5.0625 -3.046875 C 4.113281 -3.046875 3.304688 -3.222656 2.640625 -3.578125 C 2.503906 -3.398438 2.4375 -3.179688 2.4375 -2.921875 C 2.4375 -2.660156 2.519531 -2.398438 2.6875 -2.140625 C 2.863281 -1.890625 3.144531 -1.734375 3.53125 -1.671875 C 3.601562 -1.648438 4.113281 -1.640625 5.0625 -1.640625 C 5.851562 -1.640625 6.429688 -1.632812 6.796875 -1.625 C 7.171875 -1.613281 7.585938 -1.5625 8.046875 -1.46875 C 8.503906 -1.382812 8.910156 -1.257812 9.265625 -1.09375 C 10.253906 -0.59375 10.75 0.242188 10.75 1.421875 C 10.75 2.160156 10.320312 2.769531 9.46875 3.25 C 8.625 3.738281 7.367188 3.984375 5.703125 3.984375 C 3.910156 3.984375 2.617188 3.722656 1.828125 3.203125 C 1.035156 2.691406 0.640625 2.117188 0.640625 1.484375 Z M 2.34375 1.453125 C 2.34375 1.953125 2.625 2.378906 3.1875 2.734375 C 3.75 3.097656 4.585938 3.28125 5.703125 3.28125 C 6.859375 3.28125 7.703125 3.09375 8.234375 2.71875 C 8.773438 2.34375 9.046875 1.929688 9.046875 1.484375 C 9.046875 0.671875 8.09375 0.265625 6.1875 0.265625 L 3.859375 0.265625 C 2.847656 0.265625 2.34375 0.660156 2.34375 1.453125 Z M 3.3125 -6.5625 C 3.3125 -6.425781 3.3125 -6.234375 3.3125 -5.984375 C 3.3125 -5.742188 3.3125 -5.550781 3.3125 -5.40625 C 3.320312 -5.269531 3.351562 -5.082031 3.40625 -4.84375 C 3.46875 -4.601562 3.554688 -4.414062 3.671875 -4.28125 C 3.796875 -4.15625 3.972656 -4.035156 4.203125 -3.921875 C 4.441406 -3.816406 4.722656 -3.765625 5.046875 -3.765625 C 5.378906 -3.765625 5.660156 -3.816406 5.890625 -3.921875 C 6.128906 -4.035156 6.304688 -4.15625 6.421875 -4.28125 C 6.546875 -4.414062 6.632812 -4.601562 6.6875 -4.84375 C 6.75 -5.082031 6.78125 -5.269531 6.78125 -5.40625 C 6.789062 -5.550781 6.796875 -5.742188 6.796875 -5.984375 C 6.796875 -6.234375 6.789062 -6.425781 6.78125 -6.5625 C 6.78125 -6.707031 6.75 -6.898438 6.6875 -7.140625 C 6.632812 -7.378906 6.546875 -7.5625 6.421875 -7.6875 C 6.304688 -7.820312 6.128906 -7.941406 5.890625 -8.046875 C 5.660156 -8.160156 5.378906 -8.21875 5.046875 -8.21875 C 4.722656 -8.21875 4.441406 -8.160156 4.203125 -8.046875 C 3.972656 -7.941406 3.796875 -7.820312 3.671875 -7.6875 C 3.554688 -7.5625 3.46875 -7.378906 3.40625 -7.140625 C 3.351562 -6.898438 3.320312 -6.707031 3.3125 -6.5625 Z M 3.3125 -6.5625 "/>
</g>
<g id="glyph-0-15">
<path d="M 0.640625 -4.46875 C 0.640625 -5.769531 1.070312 -6.847656 1.9375 -7.703125 C 2.800781 -8.554688 4 -8.984375 5.53125 -8.984375 C 6.894531 -8.984375 7.945312 -8.628906 8.6875 -7.921875 C 9.4375 -7.171875 9.8125 -6.148438 9.8125 -4.859375 C 9.8125 -4.609375 9.765625 -4.457031 9.671875 -4.40625 C 9.585938 -4.351562 9.421875 -4.328125 9.171875 -4.328125 L 3.171875 -4.328125 C 3.171875 -1.890625 4.101562 -0.671875 5.96875 -0.671875 C 5.976562 -0.671875 5.984375 -0.671875 5.984375 -0.671875 C 6.628906 -0.671875 7.210938 -0.816406 7.734375 -1.109375 C 8.253906 -1.398438 8.617188 -1.78125 8.828125 -2.25 C 8.890625 -2.425781 8.945312 -2.539062 9 -2.59375 C 9.0625 -2.644531 9.171875 -2.671875 9.328125 -2.671875 C 9.648438 -2.671875 9.8125 -2.554688 9.8125 -2.328125 C 9.8125 -2.234375 9.769531 -2.101562 9.6875 -1.9375 C 9.613281 -1.769531 9.484375 -1.5625 9.296875 -1.3125 C 9.109375 -1.070312 8.867188 -0.84375 8.578125 -0.625 C 8.296875 -0.414062 7.910156 -0.238281 7.421875 -0.09375 C 6.941406 0.0390625 6.40625 0.109375 5.8125 0.109375 C 4.238281 0.109375 2.984375 -0.3125 2.046875 -1.15625 C 1.109375 -2.007812 0.640625 -3.113281 0.640625 -4.46875 Z M 3.171875 -4.984375 L 7.921875 -4.984375 C 7.847656 -7.179688 7.050781 -8.28125 5.53125 -8.28125 C 4.726562 -8.28125 4.101562 -7.9375 3.65625 -7.25 C 3.382812 -6.832031 3.222656 -6.078125 3.171875 -4.984375 Z M 3.171875 -4.984375 "/>
</g>
<g id="glyph-0-16">
<path d="M 0.8125 0 L 0.8125 -0.9375 L 1.234375 -0.9375 C 1.910156 -0.9375 2.34375 -0.96875 2.53125 -1.03125 C 2.71875 -1.101562 2.847656 -1.222656 2.921875 -1.390625 L 7.84375 -13.328125 C 7.894531 -13.484375 7.9375 -13.585938 7.96875 -13.640625 C 8.007812 -13.703125 8.078125 -13.753906 8.171875 -13.796875 C 8.273438 -13.835938 8.421875 -13.859375 8.609375 -13.859375 C 8.765625 -13.859375 8.875 -13.847656 8.9375 -13.828125 C 9 -13.816406 9.078125 -13.769531 9.171875 -13.6875 C 9.265625 -13.613281 9.34375 -13.492188 9.40625 -13.328125 L 14.484375 -0.9375 L 16.40625 -0.9375 L 16.40625 0 C 15.945312 -0.0390625 14.867188 -0.0625 13.171875 -0.0625 C 11.347656 -0.0625 10.179688 -0.0390625 9.671875 0 L 9.671875 -0.9375 L 11.5625 -0.9375 L 10.375 -3.828125 L 5.0625 -3.828125 L 4.0625 -1.421875 C 4.007812 -1.367188 3.984375 -1.289062 3.984375 -1.1875 C 3.984375 -1.019531 4.570312 -0.9375 5.75 -0.9375 L 5.75 0 C 5.257812 -0.0390625 4.390625 -0.0625 3.140625 -0.0625 C 3.097656 -0.0625 2.320312 -0.0390625 0.8125 0 Z M 5.453125 -4.765625 L 9.984375 -4.765625 L 7.71875 -10.28125 Z M 5.453125 -4.765625 "/>
</g>
<g id="glyph-0-17">
<path d="M 0.75 -4.40625 C 0.75 -5.675781 1.171875 -6.753906 2.015625 -7.640625 C 2.859375 -8.535156 4.113281 -8.984375 5.78125 -8.984375 C 8.070312 -8.984375 9.21875 -8.375 9.21875 -7.15625 C 9.21875 -6.757812 9.09375 -6.453125 8.84375 -6.234375 C 8.59375 -6.015625 8.300781 -5.90625 7.96875 -5.90625 C 7.664062 -5.90625 7.382812 -6.015625 7.125 -6.234375 C 6.875 -6.453125 6.75 -6.757812 6.75 -7.15625 C 6.75 -7.53125 6.878906 -7.835938 7.140625 -8.078125 C 6.796875 -8.160156 6.367188 -8.203125 5.859375 -8.203125 C 5.359375 -8.203125 4.9375 -8.097656 4.59375 -7.890625 C 4.257812 -7.691406 4.007812 -7.472656 3.84375 -7.234375 C 3.675781 -6.992188 3.546875 -6.671875 3.453125 -6.265625 C 3.367188 -5.859375 3.320312 -5.546875 3.3125 -5.328125 C 3.300781 -5.109375 3.296875 -4.832031 3.296875 -4.5 C 3.296875 -1.945312 4.21875 -0.671875 6.0625 -0.671875 C 7.257812 -0.671875 8.082031 -1.21875 8.53125 -2.3125 C 8.582031 -2.4375 8.628906 -2.515625 8.671875 -2.546875 C 8.722656 -2.578125 8.835938 -2.59375 9.015625 -2.59375 C 9.328125 -2.59375 9.484375 -2.503906 9.484375 -2.328125 C 9.484375 -2.273438 9.457031 -2.171875 9.40625 -2.015625 C 9.351562 -1.859375 9.238281 -1.65625 9.0625 -1.40625 C 8.894531 -1.15625 8.675781 -0.921875 8.40625 -0.703125 C 8.144531 -0.484375 7.769531 -0.289062 7.28125 -0.125 C 6.800781 0.03125 6.265625 0.109375 5.671875 0.109375 C 4.171875 0.109375 2.972656 -0.304688 2.078125 -1.140625 C 1.191406 -1.984375 0.75 -3.070312 0.75 -4.40625 Z M 0.75 -4.40625 "/>
</g>
<g id="glyph-0-18">
<path d="M 0.4375 2.140625 C 0.4375 1.773438 0.546875 1.488281 0.765625 1.28125 C 0.992188 1.082031 1.257812 0.984375 1.5625 0.984375 C 1.894531 0.984375 2.171875 1.085938 2.390625 1.296875 C 2.609375 1.515625 2.71875 1.789062 2.71875 2.125 C 2.71875 2.632812 2.503906 2.984375 2.078125 3.171875 C 2.234375 3.222656 2.394531 3.25 2.5625 3.25 C 2.882812 3.25 3.179688 3.179688 3.453125 3.046875 C 3.722656 2.910156 3.960938 2.707031 4.171875 2.4375 C 4.378906 2.164062 4.539062 1.929688 4.65625 1.734375 C 4.769531 1.546875 4.894531 1.285156 5.03125 0.953125 L 5.5 0 L 1.78125 -7.875 L 0.515625 -7.875 L 0.515625 -8.8125 C 0.640625 -8.8125 0.992188 -8.800781 1.578125 -8.78125 C 2.171875 -8.757812 2.570312 -8.75 2.78125 -8.75 C 3.757812 -8.75 4.578125 -8.769531 5.234375 -8.8125 L 5.234375 -7.875 L 4.171875 -7.875 L 6.6875 -2.515625 L 8.96875 -7.40625 C 9.03125 -7.46875 9.0625 -7.546875 9.0625 -7.640625 C 9.0625 -7.796875 8.753906 -7.875 8.140625 -7.875 L 8.140625 -8.8125 C 8.972656 -8.769531 9.570312 -8.75 9.9375 -8.75 C 10.507812 -8.75 11.035156 -8.769531 11.515625 -8.8125 L 11.515625 -7.875 C 11.109375 -7.875 10.800781 -7.859375 10.59375 -7.828125 C 10.382812 -7.796875 10.25 -7.753906 10.1875 -7.703125 C 10.132812 -7.660156 10.082031 -7.578125 10.03125 -7.453125 L 5.78125 1.609375 C 5.46875 2.253906 5.023438 2.804688 4.453125 3.265625 C 3.890625 3.734375 3.257812 3.96875 2.5625 3.96875 C 1.96875 3.96875 1.460938 3.785156 1.046875 3.421875 C 0.640625 3.066406 0.4375 2.640625 0.4375 2.140625 Z M 0.4375 2.140625 "/>
</g>
<g id="glyph-0-19">
<path d="M 0.78125 0 L 0.78125 -0.9375 L 2.921875 -0.9375 L 2.921875 -12.6875 L 0.78125 -12.6875 L 0.78125 -13.609375 C 1.28125 -13.578125 2.488281 -13.5625 4.40625 -13.5625 C 6.5 -13.5625 7.832031 -13.578125 8.40625 -13.609375 L 8.40625 -12.6875 L 5.734375 -12.6875 L 5.734375 -0.9375 L 7.78125 -0.9375 C 8.269531 -0.9375 8.71875 -1 9.125 -1.125 C 9.53125 -1.25 9.859375 -1.398438 10.109375 -1.578125 C 10.367188 -1.753906 10.601562 -1.988281 10.8125 -2.28125 C 11.03125 -2.582031 11.191406 -2.84375 11.296875 -3.0625 C 11.398438 -3.289062 11.492188 -3.582031 11.578125 -3.9375 C 11.660156 -4.300781 11.710938 -4.566406 11.734375 -4.734375 C 11.753906 -4.910156 11.785156 -5.144531 11.828125 -5.4375 L 12.765625 -5.4375 L 12.140625 0 Z M 0.78125 0 "/>
</g>
<g id="glyph-0-20">
<path d="M 0.515625 -7.875 L 0.515625 -8.8125 C 0.640625 -8.8125 0.992188 -8.800781 1.578125 -8.78125 C 2.171875 -8.757812 2.570312 -8.75 2.78125 -8.75 C 3.757812 -8.75 4.578125 -8.769531 5.234375 -8.8125 L 5.234375 -7.875 L 4.171875 -7.875 L 6.6875 -2.46875 L 8.984375 -7.421875 C 9.054688 -7.546875 9.09375 -7.628906 9.09375 -7.671875 C 9.09375 -7.804688 8.800781 -7.875 8.21875 -7.875 C 8.1875 -7.875 8.160156 -7.875 8.140625 -7.875 L 8.140625 -8.8125 C 8.972656 -8.769531 9.570312 -8.75 9.9375 -8.75 C 10.476562 -8.75 11.003906 -8.769531 11.515625 -8.8125 L 11.515625 -7.875 C 10.929688 -7.875 10.554688 -7.84375 10.390625 -7.78125 C 10.222656 -7.726562 10.101562 -7.617188 10.03125 -7.453125 L 6.75 -0.390625 C 6.59375 -0.078125 6.34375 0.078125 6 0.078125 C 5.664062 0.078125 5.421875 -0.0859375 5.265625 -0.421875 L 1.78125 -7.875 Z M 0.515625 -7.875 "/>
</g>
<g id="glyph-0-21">
<path d="M 0.78125 0 L 0.78125 -0.9375 L 2.921875 -0.9375 L 2.921875 -12.6875 L 0.78125 -12.6875 L 0.78125 -13.609375 L 9.3125 -13.609375 C 11.320312 -13.609375 12.972656 -12.988281 14.265625 -11.75 C 15.554688 -10.507812 16.203125 -8.820312 16.203125 -6.6875 C 16.203125 -4.601562 15.554688 -2.96875 14.265625 -1.78125 C 12.984375 -0.59375 11.335938 0 9.328125 0 Z M 5.625 -0.9375 L 8.515625 -0.9375 C 10.347656 -0.9375 11.648438 -1.488281 12.421875 -2.59375 C 12.734375 -3.050781 12.957031 -3.582031 13.09375 -4.1875 C 13.226562 -4.789062 13.296875 -5.628906 13.296875 -6.703125 C 13.296875 -8.671875 13.007812 -10.070312 12.4375 -10.90625 C 11.613281 -12.082031 10.304688 -12.675781 8.515625 -12.6875 L 5.625 -12.6875 Z M 5.625 -0.9375 "/>
</g>
<g id="glyph-0-22">
<path d="M 0.890625 -5.328125 C 0.890625 -5.597656 0.890625 -5.929688 0.890625 -6.328125 C 0.890625 -6.722656 0.890625 -7.050781 0.890625 -7.3125 C 0.898438 -7.582031 0.9375 -7.972656 1 -8.484375 C 1.070312 -8.992188 1.164062 -9.425781 1.28125 -9.78125 C 1.394531 -10.132812 1.566406 -10.53125 1.796875 -10.96875 C 2.035156 -11.40625 2.316406 -11.757812 2.640625 -12.03125 C 2.972656 -12.300781 3.398438 -12.53125 3.921875 -12.71875 C 4.441406 -12.90625 5.03125 -13 5.6875 -13 C 6.351562 -13 6.945312 -12.898438 7.46875 -12.703125 C 7.988281 -12.515625 8.410156 -12.285156 8.734375 -12.015625 C 9.054688 -11.753906 9.335938 -11.398438 9.578125 -10.953125 C 9.816406 -10.515625 9.992188 -10.117188 10.109375 -9.765625 C 10.222656 -9.421875 10.3125 -8.992188 10.375 -8.484375 C 10.4375 -7.972656 10.472656 -7.582031 10.484375 -7.3125 C 10.492188 -7.050781 10.5 -6.722656 10.5 -6.328125 C 10.5 -5.929688 10.492188 -5.597656 10.484375 -5.328125 C 10.472656 -5.054688 10.4375 -4.671875 10.375 -4.171875 C 10.3125 -3.679688 10.222656 -3.257812 10.109375 -2.90625 C 9.992188 -2.5625 9.816406 -2.175781 9.578125 -1.75 C 9.335938 -1.320312 9.050781 -0.972656 8.71875 -0.703125 C 8.394531 -0.441406 7.972656 -0.222656 7.453125 -0.046875 C 6.929688 0.128906 6.347656 0.21875 5.703125 0.21875 C 5.035156 0.21875 4.441406 0.125 3.921875 -0.0625 C 3.398438 -0.25 2.972656 -0.46875 2.640625 -0.71875 C 2.316406 -0.976562 2.035156 -1.320312 1.796875 -1.75 C 1.566406 -2.1875 1.394531 -2.578125 1.28125 -2.921875 C 1.164062 -3.265625 1.070312 -3.6875 1 -4.1875 C 0.9375 -4.6875 0.898438 -5.066406 0.890625 -5.328125 Z M 3.4375 -6.5625 C 3.4375 -4.457031 3.492188 -3.066406 3.609375 -2.390625 C 3.722656 -1.742188 3.988281 -1.265625 4.40625 -0.953125 C 4.820312 -0.648438 5.253906 -0.5 5.703125 -0.5 C 5.960938 -0.5 6.21875 -0.539062 6.46875 -0.625 C 6.71875 -0.707031 6.984375 -0.914062 7.265625 -1.25 C 7.554688 -1.59375 7.738281 -2.046875 7.8125 -2.609375 C 7.90625 -3.296875 7.953125 -4.613281 7.953125 -6.5625 C 7.953125 -9.050781 7.835938 -10.539062 7.609375 -11.03125 C 7.441406 -11.4375 7.175781 -11.742188 6.8125 -11.953125 C 6.457031 -12.171875 6.085938 -12.28125 5.703125 -12.28125 C 5.460938 -12.28125 5.21875 -12.242188 4.96875 -12.171875 C 4.726562 -12.109375 4.453125 -11.914062 4.140625 -11.59375 C 3.835938 -11.269531 3.65625 -10.84375 3.59375 -10.3125 C 3.488281 -9.632812 3.4375 -8.382812 3.4375 -6.5625 Z M 3.4375 -6.5625 "/>
</g>
<g id="glyph-0-23">
<path d="M 1.609375 -1.546875 C 1.609375 -2.003906 1.765625 -2.375 2.078125 -2.65625 C 2.398438 -2.945312 2.757812 -3.09375 3.15625 -3.09375 C 3.5625 -3.09375 3.921875 -2.941406 4.234375 -2.640625 C 4.546875 -2.347656 4.703125 -1.984375 4.703125 -1.546875 C 4.703125 -1.148438 4.550781 -0.789062 4.25 -0.46875 C 3.957031 -0.15625 3.59375 0 3.15625 0 C 2.75 0 2.390625 -0.144531 2.078125 -0.4375 C 1.765625 -0.738281 1.609375 -1.109375 1.609375 -1.546875 Z M 1.609375 -1.546875 "/>
</g>
<g id="glyph-0-24">
<path d="M 1.140625 -3.15625 C 1.140625 -3.53125 1.234375 -3.828125 1.421875 -4.046875 C 1.609375 -4.273438 1.789062 -4.414062 1.96875 -4.46875 C 2.144531 -4.519531 2.3125 -4.546875 2.46875 -4.546875 C 2.78125 -4.546875 3.078125 -4.4375 3.359375 -4.21875 C 3.640625 -4 3.78125 -3.660156 3.78125 -3.203125 C 3.78125 -2.804688 3.65625 -2.488281 3.40625 -2.25 C 3.164062 -2.019531 2.863281 -1.894531 2.5 -1.875 C 3.101562 -1.050781 3.957031 -0.640625 5.0625 -0.640625 C 5.382812 -0.640625 5.675781 -0.675781 5.9375 -0.75 C 6.195312 -0.832031 6.410156 -0.929688 6.578125 -1.046875 C 6.742188 -1.171875 6.878906 -1.332031 6.984375 -1.53125 C 7.097656 -1.738281 7.1875 -1.925781 7.25 -2.09375 C 7.3125 -2.257812 7.351562 -2.476562 7.375 -2.75 C 7.40625 -3.03125 7.421875 -3.25 7.421875 -3.40625 C 7.429688 -3.570312 7.4375 -3.789062 7.4375 -4.0625 C 7.4375 -4.488281 7.429688 -4.8125 7.421875 -5.03125 C 7.421875 -5.257812 7.390625 -5.550781 7.328125 -5.90625 C 7.273438 -6.257812 7.1875 -6.523438 7.0625 -6.703125 C 6.945312 -6.878906 6.769531 -7.039062 6.53125 -7.1875 C 6.300781 -7.332031 6.015625 -7.40625 5.671875 -7.40625 C 4.523438 -7.40625 3.640625 -7.03125 3.015625 -6.28125 C 2.878906 -6.125 2.734375 -6.050781 2.578125 -6.0625 C 2.453125 -6.0625 2.351562 -6.085938 2.28125 -6.140625 C 2.21875 -6.203125 2.175781 -6.269531 2.15625 -6.34375 C 2.144531 -6.414062 2.140625 -6.523438 2.140625 -6.671875 L 2.140625 -12.453125 C 2.140625 -12.585938 2.140625 -12.6875 2.140625 -12.75 C 2.148438 -12.8125 2.175781 -12.867188 2.21875 -12.921875 C 2.257812 -12.972656 2.328125 -13 2.421875 -13 C 2.429688 -13 2.515625 -12.972656 2.671875 -12.921875 C 3.742188 -12.546875 4.769531 -12.359375 5.75 -12.359375 C 6.8125 -12.359375 7.820312 -12.546875 8.78125 -12.921875 C 8.9375 -12.972656 9.039062 -13 9.09375 -13 C 9.28125 -13 9.375 -12.878906 9.375 -12.640625 C 9.375 -12.492188 9.253906 -12.273438 9.015625 -11.984375 C 8.785156 -11.703125 8.476562 -11.40625 8.09375 -11.09375 C 7.707031 -10.78125 7.203125 -10.503906 6.578125 -10.265625 C 5.960938 -10.023438 5.316406 -9.90625 4.640625 -9.90625 C 4.191406 -9.90625 3.710938 -9.945312 3.203125 -10.03125 L 3.203125 -7.421875 C 3.867188 -7.890625 4.71875 -8.125 5.75 -8.125 C 7.164062 -8.125 8.269531 -7.734375 9.0625 -6.953125 C 9.863281 -6.171875 10.265625 -5.179688 10.265625 -3.984375 C 10.265625 -2.765625 9.800781 -1.757812 8.875 -0.96875 C 7.945312 -0.175781 6.703125 0.21875 5.140625 0.21875 C 3.960938 0.21875 3 -0.117188 2.25 -0.796875 C 1.507812 -1.484375 1.140625 -2.269531 1.140625 -3.15625 Z M 1.140625 -3.15625 "/>
</g>
<g id="glyph-0-25">
<path d="M 0.953125 -8.734375 C 0.953125 -10.046875 1.390625 -11.082031 2.265625 -11.84375 C 3.148438 -12.613281 4.304688 -13 5.734375 -13 C 6.378906 -13 6.957031 -12.898438 7.46875 -12.703125 C 7.988281 -12.503906 8.40625 -12.257812 8.71875 -11.96875 C 9.039062 -11.675781 9.316406 -11.304688 9.546875 -10.859375 C 9.785156 -10.410156 9.957031 -10.003906 10.0625 -9.640625 C 10.175781 -9.285156 10.265625 -8.867188 10.328125 -8.390625 C 10.390625 -7.910156 10.421875 -7.554688 10.421875 -7.328125 C 10.429688 -7.097656 10.4375 -6.832031 10.4375 -6.53125 C 10.4375 -5.3125 10.265625 -4.25 9.921875 -3.34375 C 9.578125 -2.4375 9.117188 -1.734375 8.546875 -1.234375 C 7.972656 -0.742188 7.367188 -0.378906 6.734375 -0.140625 C 6.097656 0.0976562 5.429688 0.21875 4.734375 0.21875 C 3.691406 0.21875 2.894531 -0.015625 2.34375 -0.484375 C 1.800781 -0.953125 1.53125 -1.539062 1.53125 -2.25 C 1.53125 -2.632812 1.640625 -2.941406 1.859375 -3.171875 C 2.085938 -3.410156 2.394531 -3.53125 2.78125 -3.53125 C 3.144531 -3.53125 3.441406 -3.410156 3.671875 -3.171875 C 3.898438 -2.929688 4.015625 -2.644531 4.015625 -2.3125 C 4.015625 -2.039062 3.941406 -1.804688 3.796875 -1.609375 C 3.660156 -1.410156 3.53125 -1.273438 3.40625 -1.203125 C 3.28125 -1.140625 3.15625 -1.097656 3.03125 -1.078125 C 3.46875 -0.785156 4.023438 -0.640625 4.703125 -0.640625 C 5.316406 -0.640625 5.847656 -0.800781 6.296875 -1.125 C 6.742188 -1.457031 7.066406 -1.851562 7.265625 -2.3125 C 7.578125 -3.019531 7.734375 -4.113281 7.734375 -5.59375 L 7.734375 -6.03125 C 7.179688 -5.007812 6.390625 -4.5 5.359375 -4.5 C 4.085938 -4.5 3.035156 -4.875 2.203125 -5.625 C 1.367188 -6.375 0.953125 -7.410156 0.953125 -8.734375 Z M 3.65625 -8.6875 C 3.65625 -8.175781 3.65625 -7.796875 3.65625 -7.546875 C 3.664062 -7.304688 3.703125 -7.003906 3.765625 -6.640625 C 3.828125 -6.273438 3.921875 -6.007812 4.046875 -5.84375 C 4.179688 -5.675781 4.367188 -5.53125 4.609375 -5.40625 C 4.859375 -5.28125 5.164062 -5.21875 5.53125 -5.21875 C 6.050781 -5.21875 6.484375 -5.410156 6.828125 -5.796875 C 7.179688 -6.191406 7.414062 -6.617188 7.53125 -7.078125 C 7.65625 -7.546875 7.71875 -8.019531 7.71875 -8.5 C 7.71875 -9.707031 7.640625 -10.535156 7.484375 -10.984375 C 7.429688 -11.128906 7.359375 -11.269531 7.265625 -11.40625 C 7.179688 -11.550781 7 -11.722656 6.71875 -11.921875 C 6.445312 -12.128906 6.132812 -12.234375 5.78125 -12.234375 C 5.375 -12.234375 5.03125 -12.164062 4.75 -12.03125 C 4.46875 -11.894531 4.253906 -11.738281 4.109375 -11.5625 C 3.960938 -11.394531 3.851562 -11.125 3.78125 -10.75 C 3.71875 -10.382812 3.679688 -10.078125 3.671875 -9.828125 C 3.660156 -9.578125 3.65625 -9.195312 3.65625 -8.6875 Z M 3.65625 -8.6875 "/>
</g>
<g id="glyph-0-26">
<path d="M 1.6875 -10.796875 L 1.6875 -11.71875 L 2.078125 -11.71875 C 3.722656 -11.71875 5.054688 -12.097656 6.078125 -12.859375 C 6.191406 -12.953125 6.335938 -13 6.515625 -13 C 6.753906 -13 6.898438 -12.953125 6.953125 -12.859375 C 7.003906 -12.773438 7.03125 -12.609375 7.03125 -12.359375 L 7.03125 -0.9375 L 9.8125 -0.9375 L 9.8125 0 C 9.226562 -0.0390625 7.910156 -0.0625 5.859375 -0.0625 C 3.804688 -0.0625 2.488281 -0.0390625 1.90625 0 L 1.90625 -0.9375 L 4.65625 -0.9375 L 4.65625 -11.1875 C 3.84375 -10.925781 2.984375 -10.796875 2.078125 -10.796875 Z M 1.6875 -10.796875 "/>
</g>
<g id="glyph-1-0">
<path d="M 0.515625 0 L 0.515625 -0.609375 L 1.921875 -0.609375 L 1.921875 -8.359375 L 0.515625 -8.359375 L 0.515625 -8.96875 L 5.484375 -8.96875 C 6.671875 -8.96875 7.613281 -8.738281 8.3125 -8.28125 C 9.019531 -7.820312 9.375 -7.242188 9.375 -6.546875 C 9.375 -6.085938 9.191406 -5.664062 8.828125 -5.28125 C 8.460938 -4.90625 7.914062 -4.625 7.1875 -4.4375 C 8.03125 -4.125 8.519531 -3.617188 8.65625 -2.921875 C 8.65625 -2.898438 8.675781 -2.722656 8.71875 -2.390625 C 8.757812 -2.054688 8.785156 -1.863281 8.796875 -1.8125 C 8.828125 -1.613281 8.851562 -1.453125 8.875 -1.328125 C 8.90625 -1.203125 8.953125 -1.046875 9.015625 -0.859375 C 9.078125 -0.679688 9.171875 -0.546875 9.296875 -0.453125 C 9.429688 -0.367188 9.585938 -0.328125 9.765625 -0.328125 C 9.972656 -0.328125 10.15625 -0.40625 10.3125 -0.5625 C 10.476562 -0.71875 10.578125 -0.941406 10.609375 -1.234375 C 10.617188 -1.296875 10.625 -1.34375 10.625 -1.375 C 10.632812 -1.414062 10.660156 -1.453125 10.703125 -1.484375 C 10.753906 -1.515625 10.820312 -1.53125 10.90625 -1.53125 C 11.113281 -1.53125 11.21875 -1.4375 11.21875 -1.25 C 11.21875 -1.1875 11.207031 -1.109375 11.1875 -1.015625 C 11.175781 -0.921875 11.132812 -0.800781 11.0625 -0.65625 C 11 -0.519531 10.914062 -0.394531 10.8125 -0.28125 C 10.707031 -0.164062 10.550781 -0.0664062 10.34375 0.015625 C 10.144531 0.0976562 9.914062 0.140625 9.65625 0.140625 C 8.820312 0.140625 8.179688 0.0234375 7.734375 -0.203125 C 7.515625 -0.304688 7.335938 -0.421875 7.203125 -0.546875 C 7.078125 -0.679688 6.988281 -0.84375 6.9375 -1.03125 C 6.882812 -1.226562 6.847656 -1.390625 6.828125 -1.515625 C 6.816406 -1.648438 6.8125 -1.859375 6.8125 -2.140625 C 6.8125 -2.671875 6.789062 -3.023438 6.75 -3.203125 C 6.71875 -3.390625 6.597656 -3.59375 6.390625 -3.8125 C 6.117188 -4.101562 5.734375 -4.25 5.234375 -4.25 L 3.703125 -4.25 L 3.703125 -0.609375 L 5.109375 -0.609375 L 5.109375 0 C 4.796875 -0.0195312 4.03125 -0.03125 2.8125 -0.03125 C 1.59375 -0.03125 0.828125 -0.0195312 0.515625 0 Z M 3.703125 -4.71875 L 5.21875 -4.71875 C 5.625 -4.71875 5.972656 -4.757812 6.265625 -4.84375 C 6.554688 -4.9375 6.769531 -5.035156 6.90625 -5.140625 C 7.050781 -5.242188 7.160156 -5.394531 7.234375 -5.59375 C 7.304688 -5.789062 7.347656 -5.945312 7.359375 -6.0625 C 7.367188 -6.175781 7.375 -6.335938 7.375 -6.546875 C 7.375 -6.753906 7.367188 -6.921875 7.359375 -7.046875 C 7.347656 -7.171875 7.300781 -7.328125 7.21875 -7.515625 C 7.144531 -7.703125 7.039062 -7.847656 6.90625 -7.953125 C 6.769531 -8.054688 6.554688 -8.148438 6.265625 -8.234375 C 5.984375 -8.316406 5.644531 -8.359375 5.25 -8.359375 L 3.703125 -8.359375 Z M 3.703125 -4.71875 "/>
</g>
<g id="glyph-1-1">
<path d="M 0.421875 -2.9375 C 0.421875 -3.800781 0.707031 -4.515625 1.28125 -5.078125 C 1.851562 -5.640625 2.640625 -5.921875 3.640625 -5.921875 C 4.546875 -5.921875 5.242188 -5.6875 5.734375 -5.21875 C 6.222656 -4.726562 6.46875 -4.054688 6.46875 -3.203125 C 6.46875 -3.035156 6.4375 -2.929688 6.375 -2.890625 C 6.320312 -2.859375 6.210938 -2.84375 6.046875 -2.84375 L 2.09375 -2.84375 C 2.09375 -1.25 2.707031 -0.453125 3.9375 -0.453125 C 3.9375 -0.453125 3.941406 -0.453125 3.953125 -0.453125 C 4.367188 -0.453125 4.75 -0.546875 5.09375 -0.734375 C 5.4375 -0.921875 5.675781 -1.171875 5.8125 -1.484375 C 5.851562 -1.597656 5.890625 -1.671875 5.921875 -1.703125 C 5.960938 -1.742188 6.039062 -1.765625 6.15625 -1.765625 C 6.363281 -1.765625 6.46875 -1.6875 6.46875 -1.53125 C 6.46875 -1.46875 6.441406 -1.378906 6.390625 -1.265625 C 6.335938 -1.160156 6.25 -1.023438 6.125 -0.859375 C 6 -0.703125 5.84375 -0.550781 5.65625 -0.40625 C 5.46875 -0.269531 5.210938 -0.15625 4.890625 -0.0625 C 4.578125 0.03125 4.222656 0.078125 3.828125 0.078125 C 2.785156 0.078125 1.957031 -0.203125 1.34375 -0.765625 C 0.726562 -1.328125 0.421875 -2.050781 0.421875 -2.9375 Z M 2.09375 -3.28125 L 5.21875 -3.28125 C 5.175781 -4.726562 4.648438 -5.453125 3.640625 -5.453125 C 3.109375 -5.453125 2.695312 -5.226562 2.40625 -4.78125 C 2.226562 -4.507812 2.125 -4.007812 2.09375 -3.28125 Z M 2.09375 -3.28125 "/>
</g>
<g id="glyph-1-2">
<path d="M 0.5 -2.890625 C 0.5 -3.796875 0.800781 -4.519531 1.40625 -5.0625 C 2.019531 -5.613281 2.8125 -5.890625 3.78125 -5.890625 C 4.457031 -5.890625 5.046875 -5.691406 5.546875 -5.296875 L 5.546875 -7.84375 C 5.546875 -8.09375 5.5 -8.238281 5.40625 -8.28125 C 5.3125 -8.332031 5.054688 -8.359375 4.640625 -8.359375 L 4.640625 -8.96875 L 6.953125 -9.078125 L 6.953125 -1.125 C 6.953125 -0.882812 7 -0.738281 7.09375 -0.6875 C 7.1875 -0.632812 7.441406 -0.609375 7.859375 -0.609375 L 7.859375 0 L 5.46875 0.078125 L 5.46875 -0.5625 C 4.9375 -0.132812 4.328125 0.078125 3.640625 0.078125 C 2.679688 0.078125 1.914062 -0.195312 1.34375 -0.75 C 0.78125 -1.300781 0.5 -2.015625 0.5 -2.890625 Z M 2.171875 -2.890625 C 2.171875 -2.671875 2.171875 -2.5 2.171875 -2.375 C 2.179688 -2.25 2.195312 -2.070312 2.21875 -1.84375 C 2.25 -1.613281 2.296875 -1.425781 2.359375 -1.28125 C 2.429688 -1.144531 2.523438 -1 2.640625 -0.84375 C 2.753906 -0.6875 2.90625 -0.570312 3.09375 -0.5 C 3.289062 -0.425781 3.515625 -0.390625 3.765625 -0.390625 C 4.441406 -0.390625 5.007812 -0.707031 5.46875 -1.34375 L 5.46875 -4.609375 C 5.0625 -5.148438 4.539062 -5.421875 3.90625 -5.421875 C 3.289062 -5.421875 2.828125 -5.191406 2.515625 -4.734375 C 2.285156 -4.398438 2.171875 -3.785156 2.171875 -2.890625 Z M 2.171875 -2.890625 "/>
</g>
<g id="glyph-1-3">
<path d="M 0.59375 -5.171875 L 0.59375 -5.78125 L 2.984375 -5.890625 L 2.984375 -1.421875 C 2.984375 -1.023438 3.039062 -0.753906 3.15625 -0.609375 C 3.269531 -0.460938 3.5625 -0.390625 4.03125 -0.390625 C 4.507812 -0.390625 4.898438 -0.550781 5.203125 -0.875 C 5.503906 -1.195312 5.65625 -1.625 5.65625 -2.15625 L 5.65625 -4.65625 C 5.65625 -4.894531 5.609375 -5.039062 5.515625 -5.09375 C 5.421875 -5.144531 5.164062 -5.171875 4.75 -5.171875 L 4.75 -5.78125 L 7.140625 -5.890625 L 7.140625 -1.125 C 7.140625 -0.882812 7.179688 -0.738281 7.265625 -0.6875 C 7.359375 -0.632812 7.617188 -0.609375 8.046875 -0.609375 L 8.046875 0 L 5.734375 0.078125 L 5.734375 -0.9375 C 5.335938 -0.257812 4.710938 0.078125 3.859375 0.078125 C 3.847656 0.078125 3.84375 0.078125 3.84375 0.078125 C 3.101562 0.078125 2.523438 -0.0390625 2.109375 -0.28125 C 1.691406 -0.519531 1.484375 -0.960938 1.484375 -1.609375 L 1.484375 -4.65625 C 1.484375 -4.894531 1.4375 -5.039062 1.34375 -5.09375 C 1.257812 -5.144531 1.007812 -5.171875 0.59375 -5.171875 Z M 0.59375 -5.171875 "/>
</g>
<g id="glyph-1-4">
<path d="M 0.5 -2.90625 C 0.5 -3.738281 0.773438 -4.445312 1.328125 -5.03125 C 1.878906 -5.625 2.707031 -5.921875 3.8125 -5.921875 C 5.320312 -5.921875 6.078125 -5.519531 6.078125 -4.71875 C 6.078125 -4.457031 5.992188 -4.253906 5.828125 -4.109375 C 5.660156 -3.960938 5.46875 -3.890625 5.25 -3.890625 C 5.050781 -3.890625 4.863281 -3.960938 4.6875 -4.109375 C 4.519531 -4.253906 4.4375 -4.457031 4.4375 -4.71875 C 4.4375 -4.957031 4.523438 -5.160156 4.703125 -5.328125 C 4.484375 -5.378906 4.203125 -5.40625 3.859375 -5.40625 C 3.535156 -5.40625 3.257812 -5.335938 3.03125 -5.203125 C 2.800781 -5.066406 2.632812 -4.921875 2.53125 -4.765625 C 2.425781 -4.609375 2.34375 -4.394531 2.28125 -4.125 C 2.226562 -3.863281 2.195312 -3.660156 2.1875 -3.515625 C 2.175781 -3.367188 2.171875 -3.1875 2.171875 -2.96875 C 2.171875 -1.289062 2.773438 -0.453125 3.984375 -0.453125 C 4.773438 -0.453125 5.320312 -0.804688 5.625 -1.515625 C 5.65625 -1.597656 5.6875 -1.648438 5.71875 -1.671875 C 5.75 -1.703125 5.820312 -1.71875 5.9375 -1.71875 C 6.144531 -1.71875 6.25 -1.65625 6.25 -1.53125 C 6.25 -1.5 6.234375 -1.429688 6.203125 -1.328125 C 6.171875 -1.222656 6.097656 -1.085938 5.984375 -0.921875 C 5.867188 -0.753906 5.722656 -0.597656 5.546875 -0.453125 C 5.367188 -0.316406 5.117188 -0.191406 4.796875 -0.078125 C 4.484375 0.0234375 4.128906 0.078125 3.734375 0.078125 C 2.742188 0.078125 1.957031 -0.195312 1.375 -0.75 C 0.789062 -1.300781 0.5 -2.019531 0.5 -2.90625 Z M 0.5 -2.90625 "/>
</g>
<g id="glyph-1-5">
<path d="M 0.28125 -5.1875 L 0.28125 -5.671875 C 0.882812 -5.679688 1.351562 -5.945312 1.6875 -6.46875 C 2.03125 -6.988281 2.207031 -7.597656 2.21875 -8.296875 L 2.828125 -8.296875 L 2.828125 -5.8125 L 4.75 -5.8125 L 4.75 -5.1875 L 2.828125 -5.1875 L 2.828125 -1.578125 C 2.828125 -0.828125 3.082031 -0.453125 3.59375 -0.453125 C 3.800781 -0.453125 3.984375 -0.546875 4.140625 -0.734375 C 4.296875 -0.929688 4.375 -1.234375 4.375 -1.640625 L 4.375 -2.3125 L 5 -2.3125 L 5 -1.625 C 5 -1.132812 4.851562 -0.726562 4.5625 -0.40625 C 4.28125 -0.0820312 3.898438 0.078125 3.421875 0.078125 C 2.035156 0.078125 1.34375 -0.484375 1.34375 -1.609375 L 1.34375 -5.1875 Z M 0.28125 -5.1875 "/>
</g>
<g id="glyph-1-6">
<path d="M 0.609375 0 L 0.609375 -0.609375 L 1.515625 -0.609375 L 1.515625 -4.65625 C 1.515625 -4.894531 1.472656 -5.039062 1.390625 -5.09375 C 1.304688 -5.144531 1.0625 -5.171875 0.65625 -5.171875 L 0.65625 -5.78125 L 2.9375 -5.890625 L 2.9375 -0.609375 L 3.734375 -0.609375 L 3.734375 0 C 2.796875 -0.0195312 2.285156 -0.03125 2.203125 -0.03125 C 1.953125 -0.03125 1.421875 -0.0195312 0.609375 0 Z M 1.3125 -7.34375 C 1.113281 -7.550781 1.015625 -7.789062 1.015625 -8.0625 C 1.015625 -8.34375 1.113281 -8.582031 1.3125 -8.78125 C 1.507812 -8.988281 1.753906 -9.09375 2.046875 -9.09375 C 2.328125 -9.09375 2.566406 -8.988281 2.765625 -8.78125 C 2.960938 -8.582031 3.0625 -8.34375 3.0625 -8.0625 C 3.0625 -7.789062 2.957031 -7.550781 2.75 -7.34375 C 2.550781 -7.144531 2.316406 -7.046875 2.046875 -7.046875 C 1.753906 -7.046875 1.507812 -7.144531 1.3125 -7.34375 Z M 1.3125 -7.34375 "/>
</g>
<g id="glyph-1-7">
<path d="M 0.421875 -2.84375 C 0.421875 -3.75 0.710938 -4.488281 1.296875 -5.0625 C 1.890625 -5.632812 2.707031 -5.921875 3.75 -5.921875 C 4.789062 -5.921875 5.609375 -5.632812 6.203125 -5.0625 C 6.796875 -4.488281 7.09375 -3.75 7.09375 -2.84375 C 7.09375 -2 6.800781 -1.300781 6.21875 -0.75 C 5.632812 -0.195312 4.8125 0.078125 3.75 0.078125 C 2.695312 0.078125 1.878906 -0.195312 1.296875 -0.75 C 0.710938 -1.300781 0.421875 -2 0.421875 -2.84375 Z M 2.09375 -3 C 2.09375 -2.738281 2.09375 -2.539062 2.09375 -2.40625 C 2.101562 -2.269531 2.125 -2.078125 2.15625 -1.828125 C 2.1875 -1.585938 2.234375 -1.398438 2.296875 -1.265625 C 2.367188 -1.140625 2.460938 -1.003906 2.578125 -0.859375 C 2.703125 -0.710938 2.859375 -0.609375 3.046875 -0.546875 C 3.242188 -0.484375 3.476562 -0.453125 3.75 -0.453125 C 4.019531 -0.453125 4.253906 -0.484375 4.453125 -0.546875 C 4.648438 -0.609375 4.804688 -0.710938 4.921875 -0.859375 C 5.046875 -1.003906 5.140625 -1.140625 5.203125 -1.265625 C 5.273438 -1.398438 5.328125 -1.585938 5.359375 -1.828125 C 5.390625 -2.078125 5.40625 -2.269531 5.40625 -2.40625 C 5.414062 -2.539062 5.421875 -2.738281 5.421875 -3 C 5.421875 -3.894531 5.328125 -4.492188 5.140625 -4.796875 C 4.859375 -5.234375 4.394531 -5.453125 3.75 -5.453125 C 3.050781 -5.453125 2.570312 -5.195312 2.3125 -4.6875 C 2.164062 -4.394531 2.09375 -3.832031 2.09375 -3 Z M 2.09375 -3 "/>
</g>
<g id="glyph-1-8">
<path d="M 0.59375 0 L 0.59375 -0.609375 L 1.484375 -0.609375 L 1.484375 -4.65625 C 1.484375 -4.894531 1.4375 -5.039062 1.34375 -5.09375 C 1.257812 -5.144531 1.007812 -5.171875 0.59375 -5.171875 L 0.59375 -5.78125 L 2.828125 -5.890625 L 2.828125 -4.46875 C 3.316406 -5.40625 4.082031 -5.878906 5.125 -5.890625 C 5.800781 -5.890625 6.304688 -5.738281 6.640625 -5.4375 C 6.972656 -5.144531 7.140625 -4.664062 7.140625 -4 L 7.140625 -0.609375 L 8.046875 -0.609375 L 8.046875 0 C 7.316406 -0.0195312 6.765625 -0.03125 6.390625 -0.03125 C 6.023438 -0.03125 5.476562 -0.0195312 4.75 0 L 4.75 -0.609375 L 5.65625 -0.609375 L 5.65625 -4.140625 C 5.65625 -4.617188 5.59375 -4.953125 5.46875 -5.140625 C 5.34375 -5.328125 5.164062 -5.421875 4.9375 -5.421875 C 4.445312 -5.421875 4 -5.238281 3.59375 -4.875 C 3.1875 -4.507812 2.984375 -4 2.984375 -3.34375 L 2.984375 -0.609375 L 3.875 -0.609375 L 3.875 0 C 3.144531 -0.0195312 2.597656 -0.03125 2.234375 -0.03125 C 1.867188 -0.03125 1.320312 -0.0195312 0.59375 0 Z M 0.59375 0 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 145.300781 35.574219 L 167.410156 35.574219 L 167.410156 57.679688 L 145.300781 57.679688 Z M 145.300781 35.574219 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-2">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-5" clip-path="url(#clip-2)">
<g clip-path="url(#clip-1)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-0" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, 1.827654, 230.440355)">
<use xlink:href="#source-5"/>
</pattern>
<clipPath id="clip-3">
<path clip-rule="nonzero" d="M 167.410156 35.574219 L 189.519531 35.574219 L 189.519531 57.679688 L 167.410156 57.679688 Z M 167.410156 35.574219 "/>
</clipPath>
<clipPath id="clip-4">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-5">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-8" clip-path="url(#clip-5)">
<g clip-path="url(#clip-4)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-1" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, 2.282166, 230.049575)">
<use xlink:href="#source-8"/>
</pattern>
<clipPath id="clip-6">
<path clip-rule="nonzero" d="M 189.519531 35.574219 L 211.625 35.574219 L 211.625 57.679688 L 189.519531 57.679688 Z M 189.519531 35.574219 "/>
</clipPath>
<clipPath id="clip-7">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-8">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-11" clip-path="url(#clip-8)">
<g clip-path="url(#clip-7)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-2" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, 2.73669, 229.658795)">
<use xlink:href="#source-11"/>
</pattern>
<clipPath id="clip-9">
<path clip-rule="nonzero" d="M 211.625 35.574219 L 233.734375 35.574219 L 233.734375 57.679688 L 211.625 57.679688 Z M 211.625 35.574219 "/>
</clipPath>
<clipPath id="clip-10">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-11">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-14" clip-path="url(#clip-11)">
<g clip-path="url(#clip-10)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-3" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, 1.003113, 231.394555)">
<use xlink:href="#source-14"/>
</pattern>
<clipPath id="clip-12">
<path clip-rule="nonzero" d="M 233.734375 35.574219 L 255.84375 35.574219 L 255.84375 57.679688 L 233.734375 57.679688 Z M 233.734375 35.574219 "/>
</clipPath>
<clipPath id="clip-13">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-14">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-17" clip-path="url(#clip-14)">
<g clip-path="url(#clip-13)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-4" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, 1.457625, 231.003775)">
<use xlink:href="#source-17"/>
</pattern>
<clipPath id="clip-15">
<path clip-rule="nonzero" d="M 255.84375 35.574219 L 277.953125 35.574219 L 277.953125 57.679688 L 255.84375 57.679688 Z M 255.84375 35.574219 "/>
</clipPath>
<clipPath id="clip-16">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-17">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-20" clip-path="url(#clip-17)">
<g clip-path="url(#clip-16)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-5" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, 1.912138, 230.612995)">
<use xlink:href="#source-20"/>
</pattern>
<clipPath id="clip-18">
<path clip-rule="nonzero" d="M 145.300781 106.246094 L 167.410156 106.246094 L 167.410156 128.355469 L 145.300781 128.355469 Z M 145.300781 106.246094 "/>
</clipPath>
<clipPath id="clip-19">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-20">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-23" clip-path="url(#clip-20)">
<g clip-path="url(#clip-19)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-6" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -0.659806, 228.507224)">
<use xlink:href="#source-23"/>
</pattern>
<clipPath id="clip-21">
<path clip-rule="nonzero" d="M 167.410156 106.246094 L 189.519531 106.246094 L 189.519531 128.355469 L 167.410156 128.355469 Z M 167.410156 106.246094 "/>
</clipPath>
<clipPath id="clip-22">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-23">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-26" clip-path="url(#clip-23)">
<g clip-path="url(#clip-22)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-7" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -0.205294, 228.116444)">
<use xlink:href="#source-26"/>
</pattern>
<clipPath id="clip-24">
<path clip-rule="nonzero" d="M 189.519531 106.246094 L 211.625 106.246094 L 211.625 128.355469 L 189.519531 128.355469 Z M 189.519531 106.246094 "/>
</clipPath>
<clipPath id="clip-25">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-26">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-29" clip-path="url(#clip-26)">
<g clip-path="url(#clip-25)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-8" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, 0.24923, 227.725664)">
<use xlink:href="#source-29"/>
</pattern>
<clipPath id="clip-27">
<path clip-rule="nonzero" d="M 211.625 106.246094 L 233.734375 106.246094 L 233.734375 128.355469 L 211.625 128.355469 Z M 211.625 106.246094 "/>
</clipPath>
<clipPath id="clip-28">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-29">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-32" clip-path="url(#clip-29)">
<g clip-path="url(#clip-28)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-9" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, 0.703743, 227.334884)">
<use xlink:href="#source-32"/>
</pattern>
<clipPath id="clip-30">
<path clip-rule="nonzero" d="M 233.734375 106.246094 L 255.84375 106.246094 L 255.84375 128.355469 L 233.734375 128.355469 Z M 233.734375 106.246094 "/>
</clipPath>
<clipPath id="clip-31">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-32">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-35" clip-path="url(#clip-32)">
<g clip-path="url(#clip-31)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-10" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -1.029835, 229.070644)">
<use xlink:href="#source-35"/>
</pattern>
<clipPath id="clip-33">
<path clip-rule="nonzero" d="M 255.84375 106.246094 L 277.953125 106.246094 L 277.953125 128.355469 L 255.84375 128.355469 Z M 255.84375 106.246094 "/>
</clipPath>
<clipPath id="clip-34">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-35">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-38" clip-path="url(#clip-35)">
<g clip-path="url(#clip-34)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-11" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -0.575322, 228.679864)">
<use xlink:href="#source-38"/>
</pattern>
<clipPath id="clip-36">
<path clip-rule="nonzero" d="M 145.300781 176.921875 L 167.410156 176.921875 L 167.410156 199.027344 L 145.300781 199.027344 Z M 145.300781 176.921875 "/>
</clipPath>
<clipPath id="clip-37">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-38">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-41" clip-path="url(#clip-38)">
<g clip-path="url(#clip-37)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-12" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -3.147266, 226.574093)">
<use xlink:href="#source-41"/>
</pattern>
<clipPath id="clip-39">
<path clip-rule="nonzero" d="M 167.410156 176.921875 L 189.519531 176.921875 L 189.519531 199.027344 L 167.410156 199.027344 Z M 167.410156 176.921875 "/>
</clipPath>
<clipPath id="clip-40">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-41">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-44" clip-path="url(#clip-41)">
<g clip-path="url(#clip-40)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-13" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -2.692754, 226.183313)">
<use xlink:href="#source-44"/>
</pattern>
<clipPath id="clip-42">
<path clip-rule="nonzero" d="M 189.519531 176.921875 L 211.625 176.921875 L 211.625 199.027344 L 189.519531 199.027344 Z M 189.519531 176.921875 "/>
</clipPath>
<clipPath id="clip-43">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-44">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-47" clip-path="url(#clip-44)">
<g clip-path="url(#clip-43)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-14" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -2.23823, 225.792533)">
<use xlink:href="#source-47"/>
</pattern>
<clipPath id="clip-45">
<path clip-rule="nonzero" d="M 211.625 176.921875 L 233.734375 176.921875 L 233.734375 199.027344 L 211.625 199.027344 Z M 211.625 176.921875 "/>
</clipPath>
<clipPath id="clip-46">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-47">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-50" clip-path="url(#clip-47)">
<g clip-path="url(#clip-46)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-15" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -1.783717, 225.401753)">
<use xlink:href="#source-50"/>
</pattern>
<clipPath id="clip-48">
<path clip-rule="nonzero" d="M 233.734375 176.921875 L 255.84375 176.921875 L 255.84375 199.027344 L 233.734375 199.027344 Z M 233.734375 176.921875 "/>
</clipPath>
<clipPath id="clip-49">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-50">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-53" clip-path="url(#clip-50)">
<g clip-path="url(#clip-49)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-16" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -3.517295, 227.137513)">
<use xlink:href="#source-53"/>
</pattern>
<clipPath id="clip-51">
<path clip-rule="nonzero" d="M 255.84375 176.921875 L 277.953125 176.921875 L 277.953125 199.027344 L 255.84375 199.027344 Z M 255.84375 176.921875 "/>
</clipPath>
<clipPath id="clip-52">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-53">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-56" clip-path="url(#clip-53)">
<g clip-path="url(#clip-52)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-17" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -3.062782, 226.746733)">
<use xlink:href="#source-56"/>
</pattern>
<clipPath id="clip-54">
<path clip-rule="nonzero" d="M 277.953125 106.246094 L 300.058594 106.246094 L 300.058594 128.355469 L 277.953125 128.355469 Z M 277.953125 106.246094 "/>
</clipPath>
<clipPath id="clip-55">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-56">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-59" clip-path="url(#clip-56)">
<g clip-path="url(#clip-55)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-18" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -0.120838, 228.289084)">
<use xlink:href="#source-59"/>
</pattern>
<clipPath id="clip-57">
<path clip-rule="nonzero" d="M 344.277344 176.921875 L 366.386719 176.921875 L 366.386719 199.027344 L 344.277344 199.027344 Z M 344.277344 176.921875 "/>
</clipPath>
<clipPath id="clip-58">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-59">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-62" clip-path="url(#clip-59)">
<g clip-path="url(#clip-58)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-19" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -1.244735, 225.18361)">
<use xlink:href="#source-62"/>
</pattern>
<clipPath id="clip-60">
<path clip-rule="nonzero" d="M 520.015625 176.921875 L 542.125 176.921875 L 542.125 199.027344 L 520.015625 199.027344 Z M 520.015625 176.921875 "/>
</clipPath>
<clipPath id="clip-61">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-62">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-65" clip-path="url(#clip-62)">
<g clip-path="url(#clip-61)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-20" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -3.110946, 226.31045)">
<use xlink:href="#source-65"/>
</pattern>
<clipPath id="clip-63">
<path clip-rule="nonzero" d="M 564.234375 176.921875 L 586.34375 176.921875 L 586.34375 199.027344 L 564.234375 199.027344 Z M 564.234375 176.921875 "/>
</clipPath>
<clipPath id="clip-64">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-65">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-68" clip-path="url(#clip-65)">
<g clip-path="url(#clip-64)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-21" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -2.201887, 225.52889)">
<use xlink:href="#source-68"/>
</pattern>
<clipPath id="clip-66">
<path clip-rule="nonzero" d="M 520.015625 106.246094 L 542.125 106.246094 L 542.125 128.355469 L 520.015625 128.355469 Z M 520.015625 106.246094 "/>
</clipPath>
<clipPath id="clip-67">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-68">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-71" clip-path="url(#clip-68)">
<g clip-path="url(#clip-67)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-22" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, -0.623486, 228.243584)">
<use xlink:href="#source-71"/>
</pattern>
<clipPath id="clip-69">
<path clip-rule="nonzero" d="M 520.015625 35.574219 L 542.125 35.574219 L 542.125 57.679688 L 520.015625 57.679688 Z M 520.015625 35.574219 "/>
</clipPath>
<clipPath id="clip-70">
<path clip-rule="nonzero" d="M 0 0 L 4 0 L 4 4 L 0 4 Z M 0 0 "/>
</clipPath>
<clipPath id="clip-71">
<rect x="0" y="0" width="8" height="4"/>
</clipPath>
<g id="source-74" clip-path="url(#clip-71)">
<g clip-path="url(#clip-70)">
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 0 -2 L 4 -2 L 4 6 L 0 6 Z M 0 -2 "/>
</g>
</g>
<pattern id="pattern-23" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="4" viewBox="0 0 8 4" patternTransform="matrix(0.669588, 0.688968, -0.547023, 0.531635, 1.863974, 230.176718)">
<use xlink:href="#source-74"/>
</pattern>
</defs>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 145.300781 35.574219 L 167.410156 35.574219 L 167.410156 57.679688 L 145.300781 57.679688 Z M 145.300781 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 167.410156 35.574219 L 189.519531 35.574219 L 189.519531 57.679688 L 167.410156 57.679688 Z M 167.410156 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 189.519531 35.574219 L 211.625 35.574219 L 211.625 57.679688 L 189.519531 57.679688 Z M 189.519531 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 211.625 35.574219 L 233.734375 35.574219 L 233.734375 57.679688 L 211.625 57.679688 Z M 211.625 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 233.734375 35.574219 L 255.84375 35.574219 L 255.84375 57.679688 L 233.734375 57.679688 Z M 233.734375 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 255.84375 35.574219 L 277.953125 35.574219 L 277.953125 57.679688 L 255.84375 57.679688 Z M 255.84375 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 277.953125 35.574219 L 300.058594 35.574219 L 300.058594 57.679688 L 277.953125 57.679688 Z M 277.953125 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 300.058594 35.574219 L 322.167969 35.574219 L 322.167969 57.679688 L 300.058594 57.679688 Z M 300.058594 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 322.167969 35.574219 L 344.277344 35.574219 L 344.277344 57.679688 L 322.167969 57.679688 Z M 322.167969 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 344.277344 35.574219 L 366.386719 35.574219 L 366.386719 57.679688 L 344.277344 57.679688 Z M 344.277344 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 366.386719 35.574219 L 388.492188 35.574219 L 388.492188 57.679688 L 366.386719 57.679688 Z M 366.386719 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 388.492188 35.574219 L 410.601562 35.574219 L 410.601562 57.679688 L 388.492188 57.679688 Z M 388.492188 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 145.300781 106.246094 L 167.410156 106.246094 L 167.410156 128.355469 L 145.300781 128.355469 Z M 145.300781 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 167.410156 106.246094 L 189.519531 106.246094 L 189.519531 128.355469 L 167.410156 128.355469 Z M 167.410156 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 189.519531 106.246094 L 211.625 106.246094 L 211.625 128.355469 L 189.519531 128.355469 Z M 189.519531 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 211.625 106.246094 L 233.734375 106.246094 L 233.734375 128.355469 L 211.625 128.355469 Z M 211.625 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 233.734375 106.246094 L 255.84375 106.246094 L 255.84375 128.355469 L 233.734375 128.355469 Z M 233.734375 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 255.84375 106.246094 L 277.953125 106.246094 L 277.953125 128.355469 L 255.84375 128.355469 Z M 255.84375 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 277.953125 106.246094 L 300.058594 106.246094 L 300.058594 128.355469 L 277.953125 128.355469 Z M 277.953125 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 300.058594 106.246094 L 322.167969 106.246094 L 322.167969 128.355469 L 300.058594 128.355469 Z M 300.058594 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 322.167969 106.246094 L 344.277344 106.246094 L 344.277344 128.355469 L 322.167969 128.355469 Z M 322.167969 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 344.277344 106.246094 L 366.386719 106.246094 L 366.386719 128.355469 L 344.277344 128.355469 Z M 344.277344 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 366.386719 106.246094 L 388.492188 106.246094 L 388.492188 128.355469 L 366.386719 128.355469 Z M 366.386719 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 388.492188 106.246094 L 410.601562 106.246094 L 410.601562 128.355469 L 388.492188 128.355469 Z M 388.492188 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 145.300781 176.921875 L 167.410156 176.921875 L 167.410156 199.027344 L 145.300781 199.027344 Z M 145.300781 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 167.410156 176.921875 L 189.519531 176.921875 L 189.519531 199.027344 L 167.410156 199.027344 Z M 167.410156 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 189.519531 176.921875 L 211.625 176.921875 L 211.625 199.027344 L 189.519531 199.027344 Z M 189.519531 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 211.625 176.921875 L 233.734375 176.921875 L 233.734375 199.027344 L 211.625 199.027344 Z M 211.625 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 233.734375 176.921875 L 255.84375 176.921875 L 255.84375 199.027344 L 233.734375 199.027344 Z M 233.734375 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 255.84375 176.921875 L 277.953125 176.921875 L 277.953125 199.027344 L 255.84375 199.027344 Z M 255.84375 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 277.953125 176.921875 L 300.058594 176.921875 L 300.058594 199.027344 L 277.953125 199.027344 Z M 277.953125 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 300.058594 176.921875 L 322.167969 176.921875 L 322.167969 199.027344 L 300.058594 199.027344 Z M 300.058594 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 322.167969 176.921875 L 344.277344 176.921875 L 344.277344 199.027344 L 322.167969 199.027344 Z M 322.167969 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 344.277344 176.921875 L 366.386719 176.921875 L 366.386719 199.027344 L 344.277344 199.027344 Z M 344.277344 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 366.386719 176.921875 L 388.492188 176.921875 L 388.492188 199.027344 L 366.386719 199.027344 Z M 366.386719 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 388.492188 176.921875 L 410.601562 176.921875 L 410.601562 199.027344 L 388.492188 199.027344 Z M 388.492188 176.921875 "/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="206.64726" y="26.959917"/>
<use xlink:href="#glyph-0-1" x="224.5811" y="26.959917"/>
<use xlink:href="#glyph-0-2" x="233.959791" y="26.959917"/>
<use xlink:href="#glyph-0-3" x="245.363427" y="26.959917"/>
<use xlink:href="#glyph-0-4" x="258.016909" y="26.959917"/>
<use xlink:href="#glyph-0-5" x="270.670391" y="26.959917"/>
<use xlink:href="#glyph-0-6" x="283.323873" y="26.959917"/>
<use xlink:href="#glyph-0-7" x="290.919838" y="26.959917"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="304.885096" y="26.959917"/>
<use xlink:href="#glyph-0-3" x="314.263787" y="26.959917"/>
<use xlink:href="#glyph-0-8" x="326.917269" y="26.959917"/>
<use xlink:href="#glyph-0-9" x="335.782458" y="26.959917"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-10" x="184.687761" y="97.529581"/>
<use xlink:href="#glyph-0-1" x="199.666539" y="97.529581"/>
<use xlink:href="#glyph-0-1" x="209.04523" y="97.529581"/>
<use xlink:href="#glyph-0-2" x="218.423921" y="97.529581"/>
<use xlink:href="#glyph-0-1" x="229.827557" y="97.529581"/>
<use xlink:href="#glyph-0-6" x="239.206248" y="97.529581"/>
<use xlink:href="#glyph-0-11" x="246.802212" y="97.529581"/>
<use xlink:href="#glyph-0-8" x="257.88612" y="97.529581"/>
<use xlink:href="#glyph-0-6" x="266.751308" y="97.529581"/>
<use xlink:href="#glyph-0-8" x="274.347273" y="97.529581"/>
<use xlink:href="#glyph-0-1" x="283.212462" y="97.529581"/>
<use xlink:href="#glyph-0-11" x="292.591153" y="97.529581"/>
<use xlink:href="#glyph-0-4" x="303.67506" y="97.529581"/>
<use xlink:href="#glyph-0-12" x="316.328542" y="97.529581"/>
<use xlink:href="#glyph-0-13" x="325.309995" y="97.529581"/>
<use xlink:href="#glyph-0-8" x="331.636736" y="97.529581"/>
<use xlink:href="#glyph-0-13" x="340.501925" y="97.529581"/>
<use xlink:href="#glyph-0-2" x="346.828666" y="97.529581"/>
<use xlink:href="#glyph-0-4" x="358.232302" y="97.529581"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-10" x="186.056598" y="167.007054"/>
<use xlink:href="#glyph-0-1" x="201.035375" y="167.007054"/>
<use xlink:href="#glyph-0-1" x="210.414066" y="167.007054"/>
<use xlink:href="#glyph-0-2" x="219.792757" y="167.007054"/>
<use xlink:href="#glyph-0-1" x="231.196393" y="167.007054"/>
<use xlink:href="#glyph-0-6" x="240.575084" y="167.007054"/>
<use xlink:href="#glyph-0-5" x="248.171049" y="167.007054"/>
<use xlink:href="#glyph-0-3" x="260.824531" y="167.007054"/>
<use xlink:href="#glyph-0-1" x="273.478013" y="167.007054"/>
<use xlink:href="#glyph-0-13" x="282.856704" y="167.007054"/>
<use xlink:href="#glyph-0-4" x="289.183445" y="167.007054"/>
<use xlink:href="#glyph-0-14" x="301.836927" y="167.007054"/>
<use xlink:href="#glyph-0-6" x="313.240562" y="167.007054"/>
<use xlink:href="#glyph-0-12" x="320.836527" y="167.007054"/>
<use xlink:href="#glyph-0-8" x="329.81798" y="167.007054"/>
<use xlink:href="#glyph-0-11" x="338.683169" y="167.007054"/>
<use xlink:href="#glyph-0-8" x="349.767076" y="167.007054"/>
<use xlink:href="#glyph-0-15" x="358.632265" y="167.007054"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-16" x="16.24953" y="95.635434"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-17" x="32.850821" y="95.635434"/>
<use xlink:href="#glyph-0-17" x="42.985233" y="95.635434"/>
<use xlink:href="#glyph-0-3" x="53.119645" y="95.635434"/>
<use xlink:href="#glyph-0-1" x="65.773127" y="95.635434"/>
<use xlink:href="#glyph-0-11" x="75.151818" y="95.635434"/>
<use xlink:href="#glyph-0-17" x="86.235726" y="95.635434"/>
<use xlink:href="#glyph-0-18" x="96.370138" y="95.635434"/>
<use xlink:href="#glyph-0-6" x="108.393852" y="95.635434"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 520.015625 106.246094 L 542.125 106.246094 L 542.125 128.355469 L 520.015625 128.355469 Z M 520.015625 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 542.125 106.246094 L 564.234375 106.246094 L 564.234375 128.355469 L 542.125 128.355469 Z M 542.125 106.246094 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 520.015625 176.921875 L 542.125 176.921875 L 542.125 199.027344 L 520.015625 199.027344 Z M 520.015625 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 542.125 176.921875 L 564.234375 176.921875 L 564.234375 199.027344 L 542.125 199.027344 Z M 542.125 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 564.234375 176.921875 L 586.34375 176.921875 L 586.34375 199.027344 L 564.234375 199.027344 Z M 564.234375 176.921875 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 586.34375 176.921875 L 608.449219 176.921875 L 608.449219 199.027344 L 586.34375 199.027344 Z M 586.34375 176.921875 "/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-19" x="609.848919" y="97.582868"/>
<use xlink:href="#glyph-0-15" x="623.558473" y="97.582868"/>
<use xlink:href="#glyph-0-20" x="634.012613" y="97.582868"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-15" x="645.401367" y="97.582868"/>
<use xlink:href="#glyph-0-4" x="655.855507" y="97.582868"/>
<use xlink:href="#glyph-0-12" x="668.508989" y="97.582868"/>
<use xlink:href="#glyph-0-9" x="677.490442" y="97.582868"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-8" x="689.508963" y="97.582868"/>
<use xlink:href="#glyph-0-15" x="698.374152" y="97.582868"/>
<use xlink:href="#glyph-0-13" x="708.828292" y="97.582868"/>
<use xlink:href="#glyph-0-4" x="715.155033" y="97.582868"/>
<use xlink:href="#glyph-0-6" x="727.808515" y="97.582868"/>
<use xlink:href="#glyph-0-21" x="735.40448" y="97.582868"/>
<use xlink:href="#glyph-0-13" x="752.882949" y="97.582868"/>
<use xlink:href="#glyph-0-12" x="759.20969" y="97.582868"/>
<use xlink:href="#glyph-0-8" x="768.191143" y="97.582868"/>
<use xlink:href="#glyph-0-11" x="777.056332" y="97.582868"/>
<use xlink:href="#glyph-0-4" x="788.140239" y="97.582868"/>
<use xlink:href="#glyph-0-17" x="800.793721" y="97.582868"/>
<use xlink:href="#glyph-0-15" x="810.928134" y="97.582868"/>
<use xlink:href="#glyph-0-6" x="821.382274" y="97.582868"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 100%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 520.015625 35.574219 L 542.125 35.574219 L 542.125 57.679688 L 520.015625 57.679688 Z M 520.015625 35.574219 "/>
<path fill-rule="nonzero" fill="rgb(100%, 0%, 0%)" fill-opacity="1" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 542.125 35.574219 L 564.234375 35.574219 L 564.234375 57.679688 L 542.125 57.679688 Z M 542.125 35.574219 "/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-22" x="700.985961" y="194.359032"/>
<use xlink:href="#glyph-0-23" x="712.389597" y="194.359032"/>
<use xlink:href="#glyph-0-24" x="718.716338" y="194.359032"/>
<use xlink:href="#glyph-0-6" x="730.119974" y="194.359032"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-22" x="709.851143" y="123.685333"/>
<use xlink:href="#glyph-0-6" x="721.254778" y="123.685333"/>
</g>
<path fill="none" stroke-width="2.834646" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 432 117.300781 L 488.550781 117.300781 "/>
<path fill-rule="evenodd" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1.889764" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 496.730469 117.300781 L 484.46875 124.386719 L 484.46875 110.214844 Z M 496.730469 117.300781 "/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-22" x="42.01185" y="194.359032"/>
<use xlink:href="#glyph-0-23" x="53.415486" y="194.359032"/>
<use xlink:href="#glyph-0-25" x="59.742227" y="194.359032"/>
<use xlink:href="#glyph-0-26" x="71.145863" y="194.359032"/>
<use xlink:href="#glyph-0-6" x="82.549498" y="194.359032"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-22" x="42.01185" y="123.685333"/>
<use xlink:href="#glyph-0-23" x="53.415486" y="123.685333"/>
<use xlink:href="#glyph-0-25" x="59.742227" y="123.685333"/>
<use xlink:href="#glyph-0-26" x="71.145863" y="123.685333"/>
<use xlink:href="#glyph-0-6" x="82.549498" y="123.685333"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="431.49025" y="102.118015"/>
<use xlink:href="#glyph-1-1" x="442.766514" y="102.118015"/>
<use xlink:href="#glyph-1-2" x="449.660048" y="102.118015"/>
<use xlink:href="#glyph-1-3" x="458.003844" y="102.118015"/>
<use xlink:href="#glyph-1-4" x="466.34764" y="102.118015"/>
<use xlink:href="#glyph-1-5" x="473.030344" y="102.118015"/>
<use xlink:href="#glyph-1-6" x="478.876112" y="102.118015"/>
<use xlink:href="#glyph-1-7" x="483.04801" y="102.118015"/>
<use xlink:href="#glyph-1-8" x="490.567649" y="102.118015"/>
</g>
<g clip-path="url(#clip-0)">
<path fill-rule="nonzero" fill="url(#pattern-0)" d="M 145.300781 35.574219 L 167.410156 35.574219 L 167.410156 57.679688 L 145.300781 57.679688 Z M 145.300781 35.574219 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 145.300781 35.574219 L 167.410156 35.574219 L 167.410156 57.679688 L 145.300781 57.679688 Z M 145.300781 35.574219 "/>
<g clip-path="url(#clip-3)">
<path fill-rule="nonzero" fill="url(#pattern-1)" d="M 167.410156 35.574219 L 189.519531 35.574219 L 189.519531 57.679688 L 167.410156 57.679688 Z M 167.410156 35.574219 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 167.410156 35.574219 L 189.519531 35.574219 L 189.519531 57.679688 L 167.410156 57.679688 Z M 167.410156 35.574219 "/>
<g clip-path="url(#clip-6)">
<path fill-rule="nonzero" fill="url(#pattern-2)" d="M 189.519531 35.574219 L 211.625 35.574219 L 211.625 57.679688 L 189.519531 57.679688 Z M 189.519531 35.574219 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 189.519531 35.574219 L 211.625 35.574219 L 211.625 57.679688 L 189.519531 57.679688 Z M 189.519531 35.574219 "/>
<g clip-path="url(#clip-9)">
<path fill-rule="nonzero" fill="url(#pattern-3)" d="M 211.625 35.574219 L 233.734375 35.574219 L 233.734375 57.679688 L 211.625 57.679688 Z M 211.625 35.574219 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 211.625 35.574219 L 233.734375 35.574219 L 233.734375 57.679688 L 211.625 57.679688 Z M 211.625 35.574219 "/>
<g clip-path="url(#clip-12)">
<path fill-rule="nonzero" fill="url(#pattern-4)" d="M 233.734375 35.574219 L 255.84375 35.574219 L 255.84375 57.679688 L 233.734375 57.679688 Z M 233.734375 35.574219 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 233.734375 35.574219 L 255.84375 35.574219 L 255.84375 57.679688 L 233.734375 57.679688 Z M 233.734375 35.574219 "/>
<g clip-path="url(#clip-15)">
<path fill-rule="nonzero" fill="url(#pattern-5)" d="M 255.84375 35.574219 L 277.953125 35.574219 L 277.953125 57.679688 L 255.84375 57.679688 Z M 255.84375 35.574219 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 255.84375 35.574219 L 277.953125 35.574219 L 277.953125 57.679688 L 255.84375 57.679688 Z M 255.84375 35.574219 "/>
<g clip-path="url(#clip-18)">
<path fill-rule="nonzero" fill="url(#pattern-6)" d="M 145.300781 106.246094 L 167.410156 106.246094 L 167.410156 128.355469 L 145.300781 128.355469 Z M 145.300781 106.246094 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 145.300781 106.246094 L 167.410156 106.246094 L 167.410156 128.355469 L 145.300781 128.355469 Z M 145.300781 106.246094 "/>
<g clip-path="url(#clip-21)">
<path fill-rule="nonzero" fill="url(#pattern-7)" d="M 167.410156 106.246094 L 189.519531 106.246094 L 189.519531 128.355469 L 167.410156 128.355469 Z M 167.410156 106.246094 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 167.410156 106.246094 L 189.519531 106.246094 L 189.519531 128.355469 L 167.410156 128.355469 Z M 167.410156 106.246094 "/>
<g clip-path="url(#clip-24)">
<path fill-rule="nonzero" fill="url(#pattern-8)" d="M 189.519531 106.246094 L 211.625 106.246094 L 211.625 128.355469 L 189.519531 128.355469 Z M 189.519531 106.246094 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 189.519531 106.246094 L 211.625 106.246094 L 211.625 128.355469 L 189.519531 128.355469 Z M 189.519531 106.246094 "/>
<g clip-path="url(#clip-27)">
<path fill-rule="nonzero" fill="url(#pattern-9)" d="M 211.625 106.246094 L 233.734375 106.246094 L 233.734375 128.355469 L 211.625 128.355469 Z M 211.625 106.246094 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 211.625 106.246094 L 233.734375 106.246094 L 233.734375 128.355469 L 211.625 128.355469 Z M 211.625 106.246094 "/>
<g clip-path="url(#clip-30)">
<path fill-rule="nonzero" fill="url(#pattern-10)" d="M 233.734375 106.246094 L 255.84375 106.246094 L 255.84375 128.355469 L 233.734375 128.355469 Z M 233.734375 106.246094 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 233.734375 106.246094 L 255.84375 106.246094 L 255.84375 128.355469 L 233.734375 128.355469 Z M 233.734375 106.246094 "/>
<g clip-path="url(#clip-33)">
<path fill-rule="nonzero" fill="url(#pattern-11)" d="M 255.84375 106.246094 L 277.953125 106.246094 L 277.953125 128.355469 L 255.84375 128.355469 Z M 255.84375 106.246094 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 255.84375 106.246094 L 277.953125 106.246094 L 277.953125 128.355469 L 255.84375 128.355469 Z M 255.84375 106.246094 "/>
<g clip-path="url(#clip-36)">
<path fill-rule="nonzero" fill="url(#pattern-12)" d="M 145.300781 176.921875 L 167.410156 176.921875 L 167.410156 199.027344 L 145.300781 199.027344 Z M 145.300781 176.921875 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 145.300781 176.921875 L 167.410156 176.921875 L 167.410156 199.027344 L 145.300781 199.027344 Z M 145.300781 176.921875 "/>
<g clip-path="url(#clip-39)">
<path fill-rule="nonzero" fill="url(#pattern-13)" d="M 167.410156 176.921875 L 189.519531 176.921875 L 189.519531 199.027344 L 167.410156 199.027344 Z M 167.410156 176.921875 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 167.410156 176.921875 L 189.519531 176.921875 L 189.519531 199.027344 L 167.410156 199.027344 Z M 167.410156 176.921875 "/>
<g clip-path="url(#clip-42)">
<path fill-rule="nonzero" fill="url(#pattern-14)" d="M 189.519531 176.921875 L 211.625 176.921875 L 211.625 199.027344 L 189.519531 199.027344 Z M 189.519531 176.921875 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 189.519531 176.921875 L 211.625 176.921875 L 211.625 199.027344 L 189.519531 199.027344 Z M 189.519531 176.921875 "/>
<g clip-path="url(#clip-45)">
<path fill-rule="nonzero" fill="url(#pattern-15)" d="M 211.625 176.921875 L 233.734375 176.921875 L 233.734375 199.027344 L 211.625 199.027344 Z M 211.625 176.921875 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 211.625 176.921875 L 233.734375 176.921875 L 233.734375 199.027344 L 211.625 199.027344 Z M 211.625 176.921875 "/>
<g clip-path="url(#clip-48)">
<path fill-rule="nonzero" fill="url(#pattern-16)" d="M 233.734375 176.921875 L 255.84375 176.921875 L 255.84375 199.027344 L 233.734375 199.027344 Z M 233.734375 176.921875 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 233.734375 176.921875 L 255.84375 176.921875 L 255.84375 199.027344 L 233.734375 199.027344 Z M 233.734375 176.921875 "/>
<g clip-path="url(#clip-51)">
<path fill-rule="nonzero" fill="url(#pattern-17)" d="M 255.84375 176.921875 L 277.953125 176.921875 L 277.953125 199.027344 L 255.84375 199.027344 Z M 255.84375 176.921875 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 255.84375 176.921875 L 277.953125 176.921875 L 277.953125 199.027344 L 255.84375 199.027344 Z M 255.84375 176.921875 "/>
<g clip-path="url(#clip-54)">
<path fill-rule="nonzero" fill="url(#pattern-18)" d="M 277.953125 106.246094 L 300.058594 106.246094 L 300.058594 128.355469 L 277.953125 128.355469 Z M 277.953125 106.246094 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 277.953125 106.246094 L 300.058594 106.246094 L 300.058594 128.355469 L 277.953125 128.355469 Z M 277.953125 106.246094 "/>
<g clip-path="url(#clip-57)">
<path fill-rule="nonzero" fill="url(#pattern-19)" d="M 344.277344 176.921875 L 366.386719 176.921875 L 366.386719 199.027344 L 344.277344 199.027344 Z M 344.277344 176.921875 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 344.277344 176.921875 L 366.386719 176.921875 L 366.386719 199.027344 L 344.277344 199.027344 Z M 344.277344 176.921875 "/>
<g clip-path="url(#clip-60)">
<path fill-rule="nonzero" fill="url(#pattern-20)" d="M 520.015625 176.921875 L 542.125 176.921875 L 542.125 199.027344 L 520.015625 199.027344 Z M 520.015625 176.921875 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 520.015625 176.921875 L 542.125 176.921875 L 542.125 199.027344 L 520.015625 199.027344 Z M 520.015625 176.921875 "/>
<g clip-path="url(#clip-63)">
<path fill-rule="nonzero" fill="url(#pattern-21)" d="M 564.234375 176.921875 L 586.34375 176.921875 L 586.34375 199.027344 L 564.234375 199.027344 Z M 564.234375 176.921875 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 564.234375 176.921875 L 586.34375 176.921875 L 586.34375 199.027344 L 564.234375 199.027344 Z M 564.234375 176.921875 "/>
<g clip-path="url(#clip-66)">
<path fill-rule="nonzero" fill="url(#pattern-22)" d="M 520.015625 106.246094 L 542.125 106.246094 L 542.125 128.355469 L 520.015625 128.355469 Z M 520.015625 106.246094 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 520.015625 106.246094 L 542.125 106.246094 L 542.125 128.355469 L 520.015625 128.355469 Z M 520.015625 106.246094 "/>
<g clip-path="url(#clip-69)">
<path fill-rule="nonzero" fill="url(#pattern-23)" d="M 520.015625 35.574219 L 542.125 35.574219 L 542.125 57.679688 L 520.015625 57.679688 Z M 520.015625 35.574219 "/>
</g>
<path fill="none" stroke-width="1.41732" stroke-linecap="round" stroke-linejoin="round" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="4" d="M 520.015625 35.574219 L 542.125 35.574219 L 542.125 57.679688 L 520.015625 57.679688 Z M 520.015625 35.574219 "/>
</svg>

Before

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Binary file not shown.

View file

@ -1,936 +0,0 @@
%% This is file `sample-manuscript.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% samples.dtx (with options: `manuscript')
%%
%% IMPORTANT NOTICE:
%%
%% For the copyright see the source file.
%%
%% Any modified versions of this file must be renamed
%% with new filenames distinct from sample-manuscript.tex.
%%
%% For distribution of the original source see the terms
%% for copying and modification in the file samples.dtx.
%%
%% This generated file may be distributed as long as the
%% original source files, as listed above, are part of the
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%%
%% Commands for TeXCount
%TC:macro \cite [option:text,text]
%TC:macro \citep [option:text,text]
%TC:macro \citet [option:text,text]
%TC:envir table 0 1
%TC:envir table* 0 1
%TC:envir tabular [ignore] word
%TC:envir displaymath 0 word
%TC:envir math 0 word
%TC:envir comment 0 0
%%
%%
%% The first command in your LaTeX source must be the \documentclass command. This is the generic manuscript mode required for submission and peer review.
\documentclass[manuscript,screen,review]{acmart}
%% To ensure 100% compatibility, please check the white list of
%% approved LaTeX packages to be used with the Master Article Template at
%% https://www.acm.org/publications/taps/whitelist-of-latex-packages
%% before creating your document. The white list page provides
%% information on how to submit additional LaTeX packages for
%% review and adoption.
%% Fonts used in the template cannot be substituted; margin
%% adjustments are not allowed.
\usepackage{graphicx}
\usepackage{multirow}
\usepackage{xcolor}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{algpseudocodex}
\usepackage{algorithm}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}
\newtheorem{problem-statement}{Problem Statement}
\usepackage[toc,acronym,abbreviations,nonumberlist,nogroupskip]{glossaries-extra}
\input{acronyms}
%%
%% \BibTeX command to typeset BibTeX logo in the docs
\AtBeginDocument{%
\providecommand\BibTeX{{%
\normalfont B\kern-0.5em{\scshape i\kern-0.25em b}\kern-0.8em\TeX}}}
%% Rights management information. This information is sent to you
%% when you complete the rights form. These commands have SAMPLE
%% values in them; it is your responsibility as an author to replace
%% the commands and values with those provided to you when you
%% complete the rights form.
\setcopyright{acmlicensed}
\copyrightyear{2018}
\acmYear{2018}
\acmDOI{XXXXXXX.XXXXXXX}
%% These commands are for a PROCEEDINGS abstract or paper.
% \acmConference[Conference acronym 'XX]{Make sure to enter the correct
% conference title from your rights confirmation emai}{June 03--05,
% 2018}{Woodstock, NY}
%
% Uncomment \acmBooktitle if th title of the proceedings is different
% from ``Proceedings of ...''!
%
%\acmBooktitle{Woodstock '18: ACM Symposium on Neural Gaze Detection,
% June 03--05, 2018, Woodstock, NY}
%% These commands are for a JOURNAL article.
\acmJournal{JACM}
\acmVolume{37}
\acmNumber{4}
\acmArticle{111}
\acmMonth{8}
\acmISBN{978-1-4503-XXXX-X/18/06}
%%
%% Submission ID.
%% Use this when submitting an article to a sponsored event. You'll
%% receive a unique submission ID from the organizers
%% of the event, and this ID should be used as the parameter to this command.
%%\acmSubmissionID{123-A56-BU3}
%%
%% For managing citations, it is recommended to use bibliography
%% files in BibTeX format.
%%
%% You can then either use BibTeX with the ACM-Reference-Format style,
%% or BibLaTeX with the acmnumeric or acmauthoryear sytles, that include
%% support for advanced citation of software artefact from the
%% biblatex-software package, also separately available on CTAN.
%%
%% Look at the sample-*-biblatex.tex files for templates showcasing
%% the biblatex styles.
%%
%%
%% The majority of ACM publications use numbered citations and
%% references. The command \citestyle{authoryear} switches to the
%% "author year" style.
%%
%% If you are preparing content for an event
%% sponsored by ACM SIGGRAPH, you must use the "author year" style of
%% citations and references.
%% Uncommenting
%% the next command will enable that style.
%%\citestyle{acmauthoryear}
%%
%% end of the preamble, start of the body of the document source.
\begin{document}
%%
%% The "title" command has an optional parameter,
%% allowing the author to define a "short title" to be used in page headers.
\title{This name needs to change to be different from the conference version}
%%
%% The "author" command and its associated commands are used to define
%% the authors and their affiliations.
%% Of note is the shared affiliation of the first two authors, and the
%% "authornote" and "authornotemark" commands
%% used to denote shared contribution to the research.
\author{Arthur Grisel-Davy}
\email{agriseld@uwaterloo.ca}
\affiliation{%
\institution{University of Waterloo}
\city{Waterloo}
\state{Ontario}
\country{Canada}
}
\author{Sebastian Fischmeister}
\email{sfischme@uwaterloo.ca}
\affiliation{%
\institution{University of Waterloo}
\city{Waterloo}
\state{Ontario}
\country{Canada}
}
%%
%% By default, the full list of authors will be used in the page
%% headers. Often, this list is too long, and will overlap
%% other information printed in the page headers. This command allows
%% the author to define a more concise list
%% of authors' names for this purpose.
\renewcommand{\shortauthors}{Grisel-Davy and Fischmeister}
%%
%% The abstract is a short summary of the work to be presented in the
%% article.
\begin{abstract}
Side channel analysis offers several advantages over traditional machine monitoring methods.
The low intrusiveness, independence with the host, data reliability and difficulty to bypass are compelling arguments for using involuntary emissions as input for enforcing security policies.
However, side-channel information often comes in the form of unlabeled time series of a proxy variable of the activity.
Enabling the definition and enforcement of high-level security policies requires extracting the state or activity of the system from the input data.
We present in this paper a novel time series, one-shot pattern locator and classifier called Machine Activity Detector (MAD) specifically designed and evaluated for side-channel analysis.
We evaluate MAD in two case studies on a variety of machines and datasets where it outperforms other traditional state detection solutions and presents formidable performances for security rules enforcement.
Results of state detection with MAD enable the definition and verification of high-level security rules to detect various attacks without any interaction with the monitored machine.
\end{abstract}
%%
%% The code below is generated by the tool at http://dl.acm.org/ccs.cfm.
%% Please copy and paste the code instead of the example below.
%%
\begin{CCSXML}
<ccs2012>
<concept>
<concept_id>10010583.10010662</concept_id>
<concept_desc>Hardware~Power and energy</concept_desc>
<concept_significance>500</concept_significance>
</concept>
<concept>
<concept_id>10002978.10002997.10002999</concept_id>
<concept_desc>Security and privacy~Intrusion detection systems</concept_desc>
<concept_significance>500</concept_significance>
</concept>
<concept>
<concept_id>10010147.10010257.10010321</concept_id>
<concept_desc>Computing methodologies~Machine learning algorithms</concept_desc>
<concept_significance>500</concept_significance>
</concept>
</ccs2012>
\end{CCSXML}
\ccsdesc[500]{Hardware~Power and energy}
\ccsdesc[500]{Security and privacy~Intrusion detection systems}
\ccsdesc[500]{Computing methodologies~Machine learning algorithms}
%%
%% Keywords. The author(s) should pick words that accurately describe
%% the work being presented. Separate the keywords with commas.
\keywords{Intrusion Detection, Power Analysis, Embedded Systems, Time Series Analysis}
%\received{20 February 2007}
%\received[revised]{12 March 2009}
%\received[accepted]{5 June 2009}
%%
%% This command processes the author and affiliation and title
%% information and builds the first part of the formatted document.
\maketitle
\section{Introduction}
\gls{ids}s leverage different types of data to detect intrusions.
On one side, most solutions use labeled and actionable data, often provided by the system to protect.
This data can be the resource usage \cite{1702202}, program source code \cite{9491765} or network traffic \cite{10.1145/2940343.2940348} leveraged by an \gls{hids} or \gls{nids}.
On the other side, some methods consider only information that the system did not intentionally provide.
The system emits these activity by-products through physical mediums called side channels.
Common side-channel information for an embedded system includes power consumption \cite{yang2016power} or electromagnetic fields \cite{chawla2021machine}.
Side-channel information offers compelling advantages over agent-collected information.
First, the information is difficult to forge.
Because the monitored system is not involved in the data retrieval process, there is no risk that an attacker that compromised the system could easily send forged information.
For example, if an attacker performs any computation on the system, it will unavoidably affect a variety of different side channels.
There are studies focusing on altering the power consumption profile of software, but their goal is to mask the consumption pattern to avoid leaking side-channel information.
These solutions \cite{1253591,6918465} do not offer to change the pattern to an arbitrary target but to make all activities indistinguishable.
These methods still induce changes in the consumption pattern that makes them identifiable by the detection system.
Second, the side-channel information retrieval process is often non-intrusive and non-disruptive for the monitored system.
Measuring the power consumption of a computer does not involve the cooperation or modification of the system \cite{10.1145/2976749.2978353}.
This host independence property is crucial for safety-critical or high-availability applications as the failure of one of the two --- monitored or monitoring --- systems does not affect the other.
These two properties --- reliable data and host independence --- set physics-based monitoring solutions apart with distinct advantages and use cases.
It is interesting to notice that leveraging side-channel analysis to detect malfunction is not limited to software.
For production machines with high availability requirements, many side-channels provide useful information about the state of the machine.
Common sources of information are vibrations \cite{zhang2019numerical}, the chemical composition of various fluids \cite{4393062}, the shape of a gear \cite{wang2015measurement} or performance metrics like the throughput of a pump \cite{gupta2021novel}.
This is important to keep in mind that other domains outside of software can also benefit from side-channel analysis tools tailored for security enforcement.
However, using side-channel data introduces new challenges.
One obstacle to overcome when designing a physics-based solution is the interpretation of the data.
Because the data collection consists of measuring a physical phenomenon, the input data is often a discrete time series.
The values in these time series are not directly actionable.
In some cases, a threshold value is enough to assess the integrity of the system.
In such a case, comparing each value of the time series to the threshold is possible \cite{jelali2013statistical}.
However, whenever a simple threshold is not a reliable factor for the decision, a more advanced analysis of the time series is required to make it actionable.
The state of a machine is often represented by a specific pattern.
This pattern could be, for example, a succession of specific amplitudes or a frequency/average pair for periodic processes.
These patterns are impossible to reliably detect with a simple threshold method.
Identifying the occurrence and position of these patterns makes the data actionable and enables higher-level --- i.e., that work at a higher level of abstraction \cite{tongaonkar2007inferring} --- security and monitoring policies.
For example, a computer starting at night or rebooting multiple times in a row should raise an alert for a possible intrusion or malfunction.
Rule-based \gls{ids}s using side-channel information require an accurate and practical pattern detection solution.
Many data-mining algorithms assume that training data is cheap, meaning that acquiring large --- labeled --- datasets is achievable without significant expense.
Unfortunately, collecting labeled data requires following a procedure and induces downtime for the machine, which can be expensive.
Collecting many training samples during normal operations of the machine is more time-consuming as the machine's activity cannot be controlled.
A more convenient data requirement would be a single sample of each pattern to detect.
Collecting a sample is immediately possible after the installation of the measurement equipment during normal operations of the machine.
This paper presents \gls{mad}, a distance-based, one-shot pattern detection method for time series.
\gls{mad} focuses on providing pre-defined state detection from only one training sample per class.
This approach enables the analysis of side-channel information in contexts where the collection of large datasets is impractical.
A window selection algorithm lies at the core of \gls{mad} and yields a stable classification of individual samples, essential for the robustness of high-level security rules.
In experiments, \gls{mad} outperforms other approaches in accuracy and the reduced Levenshtein distance on various simulated, lab-captured, and public times-series datasets.
We will present the current related work on physics-based security and time series pattern detection in Section~\ref{sec:related}.
Then we will introduce the formal and practical definitions of the solution in Section~\ref{sec:statement} and~\ref{sec:solution}.
The two case studies presented in Section~\ref{sec:cs1} and~\ref{sec:cs2} illustrate the performances of the solution in various situations.
Finally, we will discuss some important aspects of the proposed solution in Section~\ref{sec:discussion}.
\section{Related Work}\label{sec:related}
Side-channel analysis focuses on extracting information from the involuntary emissions of a system.
This topic traces back to the seminal work of Paul C. Kocher.
He introduced power side-channel analysis to extract secrets from several cryptographic protocols \cite{kocher1996timing}.
This led to the new field of side-channel analysis \cite{randolph2020power}.
However, the potential of leveraging side-channel information for defense and security purposes remains mostly untapped.
The information leakage through involuntary emissions through different channels provides insights into the activities of a machine.
Acoustic emissions \cite{belikovetsky2018digital}, heat pattern signature \cite{al2016forensics} or power consumption \cite{10.1145/3571288, gatlin2019detecting, CHOU2014400}, can --- among other side-channels --- reveal information about a machine's activity.
Side-channel information collection generally results in time series objects to analyze.
There exists a variety of methods for analyzing time series.
For signature-based solutions, a specific extract of the data is compared to known-good references to assess the integrity of the host \cite{9934955, articlemlcs}.
This signature comparison enables the verification of expected and specific sections and requires that the sections of interest can be extracted and synchronized.
Another solution for detecting intrusions is the definition of security policies.
Security policies are sets of rules that describe wanted or unwanted behavior.
These rules are built on input data accessible to the \gls{ids} such as user activity \cite{ilgun1995state} or network traffic \cite{5563714, kumar2020integrated}.
However, the input data requirements must have labels to apply a rule.
This illustrates the gap between the side-channel analysis methods and the rule-based intrusion detection methods.
To apply security policies to side-channel information, it is necessary to first label the data.
The problem of identifying pre-defined patterns in unlabeled time series is referenced under various names in the literature.
The terms \textit{activity segmentation} or \textit{activity detection} are the most relevant for the problem we are interested in.
The state-of-the-art methods in this domain focus on human activities and leverage various sensors such as smartphones \cite{wannenburg2016physical}, cameras \cite{bodor2003vision} or wearable sensors \cite{uddin2018activity}.
These methods rely on large labeled datasets to train classification models and detect activities \cite{micucci2017unimib}.
For real-life applications, access to large labeled datasets may not be possible.
Another approach, more general than activity detection, uses \gls{cpd}.
\gls{cpd} is a sub-topic of time series analysis that focuses on detecting abrupt changes in a time series \cite{truong2020selective}.
It is assumed in many cases that these change points are representative of state transitions from the observed system.
However, \gls{cpd} is only the first step in state detection as classification of the detected segments remains necessary \cite{aminikhanghahi2017survey}.
Moreover, not all state transitions trigger abrupt changes in time series statistics, and some states include abrupt changes.
Overall, \gls{cpd} only fits a specific type of problem with stable states and abrupt transitions.
Neural networks raised in popularity for time series analysis with \gls{rnn}.
Large \gls{cnn} can perform pattern extraction in long time series, for example, in the context of \gls{nilm} \cite{8598355}.
\gls{nilm} focuses on the problem of signal disaggregation.
In this problem, the signal comprises an aggregate of multiple signals, each with their own patterns \cite{angelis2022nilm}.
This problem shares many terms and core techniques as this paper but the nature of the input data makes \gls{nilm} a distinct area of research.
The specific problem of classification with only one example of each class is called one-shot --- or few-shot --- classification.
This topic focuses on pre-extracted time series classification with few training samples, often using multi-level neural networks \cite{10.1145/3371158.3371162, 9647357}.
However, in the context of side-channel analysis, a time series contains many patterns that are not extracted.
Moreover, neural-based approaches lack interpretability, which can cause issues in the case of unforeseen time series patterns.
Simpler approaches with novelty detection capabilities are required when the output serves as input for rule-based processing.
Finally, Duin et. al. investigate the problem of distance-based few-shot classification \cite{duin1997experiments}.
They present an approach based on the similarity between new objects and a dissimilarity matrix between items of the training set.
The similarities are evaluated with Nearest-Neighbor rules or \gls{svm}.
Their approach bears some interesting similarities with the one presented in this paper.
However, they evaluate their work on the recognition of handwritten numerals, which is far from the use case we are interested in.
\section{Problem Statement}\label{sec:statement}
%\gls{mad} focuses on detecting the state of a time series at any point in time.
We consider the problem from the point of view of a multi-class, mono-label classification problem \cite{aly2005survey} for every sample in a time series.
The problem is multi-class because multiple states can occur in one-time series, and therefore any sample is assigned one of multiple states.
The problem is mono-label because only one state is assigned to each sample.
The classification is a mapping from the sample space to the state space.
\begin{problem-statement}[\gls{mad}]
Given a discretized time series $t$ and a set of patterns $P=\{P_1,\dots, P_n\}$, identify a mapping $m:\mathbb{N}\longrightarrow P\cup \lambda$ such that every sample $t[i]$
maps to a pattern in $P\cup \lambda$ with the condition that the sample matches an occurrence of the pattern in $t$.
\end{problem-statement}
The time series $t: \mathbb{N} \longrightarrow \mathbb{R}$ is a finite, discretized, mono-variate, real-valued time series.
The patterns (also called training samples) $P_j \in P$ are of the same type as $t$.
Each pattern $P_j$ can take any length denoted $N_j$.
A sample $t[i]$ \textit{matches} a pattern $P_j \in P$ if there exists a substring of $t$, the length of $P_j$, that includes the sample, such that a similarity measure between this substring and $P_j$ is below a pre-defined threshold.
The pattern $\lambda$ is the \textit{unknown} pattern assigned to the samples in $t$ that do not match any of the patterns in $P$.
\begin{figure}
\centering
\includegraphics[width=0.45\textwidth]{images/overview.pdf}
\caption{Illustration of the sample distance from one sample to each training example in a 2D space.}
\label{fig:overview}
\end{figure}
\section{Proposed Solution: MAD}\label{sec:solution}
\gls{mad}'s core idea separates it from other traditional sliding window algorithms.
In \gls{mad}, the sample window around the sample to classify dynamically adapts for optimal context selection.
This principle influences the design of the detector and requires the definition of new distance metrics.
Because the lengths of the patterns may differ, our approach requires distance metrics robust to length variations.
%For the following explanation, the pattern set $P$ refers to the provided patterns only $\{P\setminus \lambda\}$ --- unless specified otherwise.
We first define the fundamental distance metric as the normalized Euclidean distance between two-time series $a$ and $b$ of the same length $N_a=N_b$
\begin{equation}
nd(a,b) = \dfrac{EuclideanDist(a,b)}{N_a}
\end{equation}
Using this normalized distance $nd$, we define the distance from a sample $t[i]$ to a pattern $P_j \in P$.
This is the sample distance $sd$ defined as
\begin{equation}\label{eq:sd}
sd(i,P_j) = \min_{k\in [i-N_j,i+N_j])}(nd(t[i-k:i+k],P_j))
\end{equation}
%with $P_j$ the training sample corresponding to the state $j$, and $t$ the complete time series.
Computing the distance $sd(i,P_j)$ requires to: (1) select every substring of $t$ of length $N_j$ that contains the sample $t[i]$, (2) evaluate their normalized distance to the pattern $P_j$, and (3) consider $sd(i,P_j)$ as the smallest of these distances.
For simplicity, Equation~\ref{eq:sd} omits the border conditions for the range of $k$.
When the sample position $i$ is less than $N_j$ or greater than $N_t-N_j$, the range adapts to only consider valid substrings.
Our approach uses a threshold-based method to decide what label to assign to a sample.
For each sample in $t$, the algorithm compares the distance $sd(i,P_j)$ to the threshold $T_j$.
The sample receives the label $j$ associated with the pattern $P_j$ that results in the smallest distance $sd(i,P_j)$ with $sd(i,P_j)<T_j$.
The minimum distance from the pattern $P_j$ to all other patterns $P_l$ with $l\neq i$ --- denoted $ID_j$ --- forms the basis of the threshold $T_j$.
Intuitively, the patterns in $P$ represent most of the patterns expected in the trace.
Thus, to decide that a substring matches a pattern $P_j$, it must match $P_j$ better than any other pattern $P_l$ with $l\neq i$ does.
Otherwise, the algorithm would assign the substring to $P_j$ when the training pattern of another class matches $P_j$ better, which is counter-intuitive.
The inter-distance between $P_j$ to $P_l$, defined as
\begin{equation}
ID(P_j,P_l) = \min_{i\in[0,N_l-N_j]} nd(P_j,P_l[i:i+N_j])
\end{equation}
represents the smallest distance between $P_j$ and any substring of length $N_j$ from $P_l$ --- with $N_l>N_j$.
If $N_l<N_j$, then $ID(P_j,P_l) = ID(P_l,P_j)$.
When computing the inter-distance between two patterns, we slide the short pattern along the length of the long one and compute the normalized distance at every position to finally consider only the smallest of these distances as the inter-distance.
To fully define the threshold $T_j$, we introduce the shrinkage coefficient $\alpha$.
This coefficient, multiplied with the smallest inter-distance $ID_j$, forms the threshold $T_j$.
\begin{equation}
T_j = \alpha\times ID_j = \alpha \min_{l\in[1;k];l\neq j} \{ID(e_j,e_l)\}
\end{equation}
The shrinkage coefficient $\alpha$ provides some control over the confidence of the detector.
A small value shrinks the range of capture of each label more and will leave more samples classified as \textit{unknown}.
A large value leaves less area for the \textit{unknown} state and forces the detector to choose a label, even for samples unlike any pattern.
The \textit{unknown} label enables the detector to carry over the information of novelty to the output.
In cases where a substring does not resemble any pattern --- for example, in cases of anomalies or unforeseen activities ---, the ability to inform of novel patterns enables a more granular definition of security policies.
Finally, we assign to each sample the label of the closest pattern with a distance lower than its threshold.
\begin{equation}
s_i = \underset{j\in[1,k]}{\arg\min}(sd(i,e_j) \textrm{ with } sd(i,e_j)<T_j)
\end{equation}
In the case where no distance is below the threshold, the sample defaults to the \textit{unknown} state.
\subsection{Algorithm}
The algorithm for \gls{mad} follows three steps:
\begin{enumerate}
\item Compute the inter-distances and threshold values for the pattern set. The algorithm can reuse the result from this step for all following detection with the same pattern set.
\item For each sample $t[i]$, compute the sample distance to each pattern $\{sd(i,p) \forall p\in P\}$.
\item Select the label by comparing the sample distances to the threshold.
\end{enumerate}
However, directly implementing this suite of operations is not optimal as it requires computing the distance from any substring to any pattern multiple times --- exactly once per sample in the substring.
A more efficient solution considers each substring only once.
Iterating over the patterns rather than the samples is more efficient as it replaces distance computations with comparison operations.
The efficient implementation follows the operations:
\begin{enumerate}
\item Compute the inter-distances and threshold values for the pattern set --- no optimization at this step.
\item For every pattern $P_j$ of length $N_j$ in $P$, consider every substring of length $N_j$ in $t$ and compute the normalized distance $nd(t[i:i+N_j],P_j)$.
\item For every sample in the substring, store the minimum of the previously stored and newly computed normalized distance as the sample distance.
\item Select the label by comparing the sample distances to the thresholds.
\end{enumerate}
This results in the same final value for the sample distance $sd(i,P_j)$ with fewer computations of the normalized distance --- at the expense of cheaper comparison operations.
Algorithm~\ref{alg:code} presents the implementation's pseudo-code.
\begin{algorithm}
\caption{Pseudo code for state detection.}
\label{alg:code}
\begin{algorithmic}[1]
\Require $t$ the time series of length $N_t$, $P$ the set $n$ of patterns, $\alpha$ the shrinkage coefficient.
\BeginBox
\LComment{First part: computation of the thresholds.}
\State $interDistances \gets nilMatrix(n,n)$
\State $thresholds \gets nilList(n)$
\For{$i \in [0,n-1]$}
\For{$j \in [0,n-1]$}
\If{$i\neq j$ and $interDistance[i,j] \neq Nil$}
\State $dist \gets ID(P[i],P[j]$
\State $interDistances[i,j] \gets dist$
\State $interDistances[j,i] \gets dist$
\EndIf
\EndFor
\State $thresholds[i] \gets min(interDistances[i,:])$
\EndFor
\EndBox
\BeginBox
\LComment{Second part: computation of the distances.}
\State $distances \gets nilMatrix(n,N_t)$
\State $labels \gets nilList(N_t)$
\For{$i \in [0,n-1]$}
\For{$k \in [0,N_t-1]$}
\State $dist \gets nd(t[k:k+N_{P_i}], P_i)$
\For{$l\in [0,N_t-1]$}
\State $distances[i,k] \gets min(distances[i,k], dist)$
\EndFor
\EndFor
\EndFor
\EndBox
\BeginBox
\LComment{Third part: selection of the label based on the distances.}
\For{$k \in [0,N_t-1]$}
\State $rowMin \gets Nil$
\State $distanceMin \gets \infty$
\For{$i \in [0,n-1]$}
\If{$distances[i,k] \leq thresholds[i]$}
\State $rowMin \gets i$
\State $distanceMin \gets distances[i,k]$
\EndIf
\EndFor
\State $labels[k] \gets rowMin$
\EndFor
\EndBox
\State \Return $labels$
\end{algorithmic}
\end{algorithm}
\subsection{Analysis}
\textbf{Time-Efficiency:}
The time efficiency of the algorithm is expressed as a function of the number of normalized distance computations and the number of comparison operations.
Each part of the algorithm has its own time-efficiency expression, with Algorithm~\ref{alg:code} showing each of the three parts.
The first part, dedicated to the threshold computation, is polynomial in the number of patterns and linear in the length of each pattern.
The second part, in charge of computing the distances, is linear in the number of patterns, the length of the time series, and the length of each pattern.
Finally, the third part, focusing on the final label selection, is linear in both the length of the time series and the number of patterns.
Overall, the actual detection computation --- second and third parts --- is linear in all input sizes.
Adding an additional value to the time series triggers the computation of one more distance value per pattern, hence the linear relationship.
Similarly, lengthening a pattern by one triggers one more comparison operation for each substring of the time series, hence the linear relationship.
Concluding from the analysis, the additional operations introduced by \gls{mad} over the traditional \gls{1nn} do not significantly impact the time efficiency of the detection that remains linear.
\textbf{Termination:}
Every part of the algorithm terminates.
The first part iterates on the patterns with two nested loops over the samples of two patterns.
No instruction modifies the patterns that are all of finite lengths.
Thus the loops always terminate.
The second part iterates over the patterns and the time series with two nested loops.
Similarly to the first part, the time series is finite and never altered.
Thus the second part also terminates.
Finally, the third part uses the same loops as the second and also terminates.
Overall, \gls{mad} always terminates for any finite time series and finite set of finite patterns.
\textbf{Influence of $\alpha$: }
The shrink coefficient $\alpha$ is the only hyperparameter of the detector.
Its default value is one.
$\alpha$ controls the threshold of similarity that a substring should cross to get qualified as a match to a pattern.
$\alpha$ takes its value in $\mathbb{R}_*^+$.
This value follows the intuitive reasoning presented in Section~\ref{sec:solution}.
To better understand the influence of the shrink coefficient, the algorithm can be perceived as a 2D area segmentation problem.
Let us consider the 2D plane where each pattern has a position based on its shape (see Figure~\ref{fig:overview}).
A substring to classify also has a position in the plane and a distance to each pattern.
During classification, the substring takes the label of the closest pattern.
For any pattern $P_j$, the set of positions in the plane that is assigned to $P_j$ --- i.e., the set of positions for which $P_j$ is the closest pattern --- is called the area of attraction of $P_j$.
In a classic \gls{1nn} context, every point in the plane is in the area of attraction of one pattern.
This infinite area of attraction is not a desirable feature in this context.
Let us now consider a time series exhibiting anomalous or unforeseen behavior.
Some substrings in this time series do not resemble any of the provided patterns.
In an infinite area of attraction context, the anomalous points are assigned to a pattern, even if they poorly match it.
As a result, the behavior of the security rule can become unpredictable as anomalous points can receive a seemingly random label.
A more desirable behavior of the state detection system is to inform of the presence of unpredicted behavior.
This behavior naturally emerges when the areas of attraction of the patterns are limited to a finite size.
The shrink coefficient $\alpha$ --- through the modification of the threshold $T_j$ --- provides control over the shrink of the areas of attraction.
The lower the value of $\alpha$, the smaller the areas of attraction around each sample.
Applying a coefficient to the thresholds produces a reduction of the radius of the area of attraction, not an homothety of the initial areas.
The shrinkage does not preserve the shape of the area.
For a value $\alpha < 0.5$, all areas become disks --- in the 2D representation --- and all shape information is lost.
Figure~\ref{fig:areas} illustrates the areas of capture around the patterns for different values of $\alpha$.
\begin{figure}
\centering
\includegraphics[width=0.49\textwidth]{images/areas.pdf}
\caption{2D visualization of the areas of capture around each pattern as $\alpha$ changes. When $\alpha \ggg 2$, the areas of capture tend to equal these of a classic \gls{1nn}.}
\label{fig:areas}
\end{figure}
The influence of the $\alpha$ coefficient on the classification is monotonic and predictable.
Because $\alpha$ influences the thresholds, changing $\alpha$ results in moving the transitions in the detected labels.
A lower value of $\alpha$ expands the unknown segments while a higher value shrinks them until they disappear.
Figure~\ref{fig:alpha_impact} illustrates the influence that $\alpha$ has on the width of unknown segments.
The impact of $\alpha$ on the number of unknown samples is also monotonic.
\begin{proof}
We prove the monotony of the number of unknown samples as a function of $\alpha$ by induction.
The base case is $\alpha=0$.
In this case, the threshold for every pattern $P_j\in P$ is $T_j = \alpha\times ID_j = 0$.
With every $T_j=0$, no sample can have a distance below the threshold and every sample is labeled as \textit{unknown}.
For the induction case, let us consider $\alpha$ increasing from the value $\alpha_0$ to $\alpha_1 = \alpha_0 + \delta$ with $\delta \in \mathbb{R}_*^+$.
The increasing of $\alpha$ induces the increase of every threshold $T$ from the value $T_0$ to $T_1$
\begin{equation}
\alpha_0 <\alpha_1 \rightarrow T_0 < T_1
\end{equation}
For every value of every threshold $T$ we can define a set of all samples below the threshold as $S_T$.
When a threshold increases from $T_0$ to $T_1$, all the samples in $S_{T_0}$ also belong in $S_{T_1}$ by the transitivity of order in $\mathbb{R}_*^+$.
It is also possible for samples to belong to $S_{T_1}$ but not to $S_{T_0}$ if their distance falls between $T_0$ and $T_1$.
Hence, $S_{T_0}$ is a subset of $S_{T_1}$ and the cardinality of $S_T$ as a function of $T$ is monotonically non-decreasing.
We conclude that the number of unknown samples as a function of $\alpha$ is monotonically non-increasing.
\end{proof}
Figure~\ref{fig:alpha} presents the number of unknown samples in the classification of the NUCPC-1 time series based on the value of $\alpha$.
\begin{figure}
\centering
\includegraphics[width=0.49\textwidth]{images/alpha.pdf}
\caption{Evolution of the number of unknown samples based on the value of the shrink coefficient $\alpha$.}
\label{fig:alpha}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=0.49\textwidth]{images/alpha_impact.pdf}
\caption{Behavior of the classifier with different values of $\alpha$. A lower value of $\alpha$ expands the unknown sections (orange sections).}
\label{fig:alpha_impact}
\end{figure}
\section{Case Study 1: Comparison with Other Methods}\label{sec:cs1}
The first evaluation of \gls{mad} consists in the detection of the states for time series from various machines.
We evaluate the performances of the proposed solution against other traditional methods to illustrate the capabilities and advantages of \gls{mad}.
\subsection{Performance Metrics}
We considered two metrics to illustrate the performance of \gls{mad}.
Performance evaluations of labeling systems traditionally use the accuracy \cite{grandini2020metrics}.
Accuracy is defined as the number of correctly classified samples divided by the total number of samples.
However, accuracy only illustrates a part of the performances.
In the context of state detection, we are interested in taking actions depending on the state of a system.
Detecting the start and stop times of each state is not as important as detecting the correct list of occurrences of states.
We are interested in making sure that the state is detected, even at the cost of some time inaccuracy.
The Levenshtein distance~\cite{4160958} illustrates the classifier's performance at detecting the correct list of states from a time series.
The Levenshtein distance is defined as the number of single-character edits --- insertions, deletions or substitutions --- between two strings.
The Levenshtein distance could use the raw detected labels list as input.
However, the raw label list embeds state detection time information, which the Levenshtein distance is very sensitive to.
We first reduce the ground truth and the detected labels by removing immediate duplicate of labels.
This reduction removes timing information yet conserves the global order of state occurrences.
The Levenshtein distance between the ground truth and the detected labels is low if every state occurrence is correctly detected.
Similarly, the metric is high if occurrences are missed, added, or miss-detected.
To remove length bias and make the metric comparable across datasets, we normalize the raw Levenshtein distance and define it as
\begin{equation}
levacc = \dfrac{Levenshtein(rgtruth,rlabels)}{max(rN_t,rN_l)}
\end{equation}
with $rgtruth$ and $rlabels$ respectively the reduced ground truth and reduced labels and $rN_t$ and $rN_l$ their length.
The Levenshtein distance provides complementary insights on the quality of the detection in this specific use case.
Figure~\ref{fig:metrics} illustrates the impact of an error on both metrics.
It is important to notice that zero represents the best Levenshtein distance and one the worst --- contrary to the accuracy.
\begin{figure}
\centering
\includegraphics[width=0.49\textwidth]{images/metric.pdf}
\caption{Accuracy or Levenshtein distance alone are unable to illustrate all types of error. We consider both to provide a better evaluation of the performances.}
\label{fig:metrics}
\end{figure}
\subsection{Dataset}\label{sec:dataset}
We evaluate the performances of \gls{mad} against eight time series.
One is a simulated signal composed of sine waves of varying frequency and average.
Four were captured in a lab environment on consumer-available machines (two NUC PCs and two wireless routers).
Finally, two were extracted from the REFIT dataset \cite{278e1df91d22494f9be2adfca2559f92} and correspond to home appliances during real-life use.
Table~\ref{tab:dataset} presents the times series and their characteristics.
\begin{table}
\centering
\caption{Characteristics of the machines in the evaluation dataset.}
\begin{tabular}{lcc}
Name & Length & Number of states\\
\toprule
NUCPC-0 & 22700 & 11\\
NUCPC-1 & 7307 & 8\\
GENERATED & 15540 & 18\\
WAP-ASUS & 26880 & 18\\
WAP-LINKSYS & 22604 & 18\\
REFIT-H4A4 & 5366 & 17\\
REFIT-H4A1 & 100000 & 142\\
\bottomrule
\end{tabular}
\label{tab:dataset}
\end{table}
The dataset aims to provide diverse machine and state patterns to evaluate the performances.
For each time series, we generated the ground truth by manually labeling all sections of the time series using a custom-made range selection tool based on a Matplotlib \cite{Hunter:2007} application.
The dataset is publicly available \cite{zenodo}.
\textbf{Lab Captures:}
NUCPC-0, NUCPC-1, WAP-ASUS and WAP-LINKSYS correspond to lab-captured machine activity power consumption.
A commercial solution \cite{palitronica}, placed in series with the main power cable, measures the global power consumption of the machine.
We considered two types of machines.
The NUCPC-* are small form factor general-purpose computers.
The WAP-* are wireless access points from two different brands.
The states to detect on these computing machines are \textit{powered off}, \textit{boot sequence}, and \textit{on}.
With these states, it is possible to set up many security rules such as: \textit{"machine on after office hours"}, \textit{"X reboots in a row"} or \textit{"Coincident shutdown of Y machines within Z minutes"}.
\textbf{GENERATED:}
An algorithm generated the GENERATED time series following three steps.
First, the algorithm randomly selects multiple frequency/average pairs.
Second, the algorithm generates 18 segments by selecting a pair and a random length.
Finally, the algorithm concatenates the segments to form the complete time series.
The patterns correspond to a minimal length example of each pair.
This time series illustrates the capabilities of the proposed solution in a case where a simple threshold would fail.
\textbf{REFIT:}
In 215, D. Murray et al. \cite{278e1df91d22494f9be2adfca2559f92} created the REFIT dataset for \gls{nilm} research.
This dataset is now widely used in this research area.
REFIT is composed of the global consumption of 20 houses, along with the specific consumption of nine appliances per house.
The global house consumption does not fit the problem statement of this paper as multiple patterns overlap.
However, the individual consumption of some appliances fit the problem statement, and two were selected.
The REFIT-H4A1 is the first appliance of the fourth house and corresponds to a fridge.
The REFIT-H4A4 is the fourth appliance of the fourth house and corresponds to a washing machine.
The activity in this second time series was sparse with long periods without consumption.
The no-consumption sections are not challenging --- i.e., all detectors perform well on this type of pattern ---, and make the manual labeling more difficult, and level all results up.
For this reason, we removed large sections of inactivity between active segments to make the time series more challenging without tampering with the order of detector performances.
\subsection{Alternative Methods}
We implemented three alternative methods to compare with \gls{mad}.
The alternative methods are chosen to be well-established and of comparable complexity.
The methods are: a \gls{1nn} detector, an \gls{svm} classifier, and an \gls{mlp} classifier.
More complex solutions like \gls{rnn} or \gls{cnn} show good performances on time series analysis but require too much data to be applicable to one-shot classification.
All alternative methods rely on a sliding window to extract substring to classify.
The window is centred around the sample.
This choice --- or any other placement of the window --- implies that some samples corresponding to the length of the longest pattern remain unclassified toward the ends.
The stride of the window is a single sample to consider every possible window.
Each extracted window is sent to the classifier, and the result is applied to the sample at the center of the window.
The alternative detectors are not meant to handle variable-size time series as input.
For the \gls{svm} and \gls{mlp} detectors, the window size is shorter than the shortest pattern.
The training sample extraction algorithm slides the window along all patterns to extract all possible substrings.
These substrings constitute the training dataset with multiple samples per pattern.
The \gls{mlp} is implemented using Keras~\cite{keras} and composed of a single layer with 100 neurones.
The number of neurones was chosen after evaluating the accuracy of the \gls{mlp} on one of the dataset (NUCPC\_1) with varying numbers of neurones.
Similarly, the \gls{svm} detector is implemented using scikit-learn~\cite{sklearn} with the default parameters.
The \gls{1nn} considers one window per pattern length around each sample.
Every window is compared to its pattern, and the normalized Euclidean distance is considered for the decision.
Overall, it is possible to adapt the methods to work with variable length patterns, but \gls{mad} is the only pattern-length-agnostic method by design.
\subsection{Results}\label{sec:results}
The benchmark consists in detecting the label of every sample for each time series with each method and computing the performance metrics.
The detectors that require training (\gls{svm} and \gls{mlp}) were re-trained for every evaluation.
Figure~\ref{fig:res} presents the results.
\gls{mad} is consistently as or more accurate than the alternative method.
The Levenshtein distance illustrates how \gls{mad} provides smoother and less noisy labeling.
This stability introduces fewer state detection errors that could falsely trigger security rules.
With both performances metrics combined, \gls{mad} outperforms the other methods.
\begin{figure*}
\centering
\includegraphics[width=\textwidth]{images/dsd_acc.pdf}
\caption{Performances of the different methods on all the datasets.}
\label{fig:res}
\end{figure*}
\section{Case Study 2: Attack Scenarios}\label{sec:cs2}
The second case study focuses on a realistic production scenario.
This case study aims to illustrate how \gls{mad} enables high abstraction level rules applications by converting the low-level power consumption signal into labeled and actionable states sequence.
\subsection{Overview}
This second case study aims at illustrating the performances of the \gls{mad} detector on more realistic data.
To this extent, a machine was set up to perform tasks on a typical office work schedule composed of work hours, sleep hours, and maintenance hours.
The scenario comprises four phases:
\begin{itemize}
\item 1 Night Sleep: During the night and until the worker begins the day, the machine is asleep in S3 sleep state\cite{sleep_states}. Any other state than sleep is considered anomalous during this time.
\item 2 Work Hours: During work hours, little restriction is applied to the activity. Only a long period with the machine asleep is considered anomalous.
\item 3 Maintenance: During the night, the machine wakes up as part of an automated maintenance schedule. During maintenance, updates are fetched, and a reboot is performed.
\item 4 No Long High Load: At no point should there be a sustained high load on the machine. Given the scenario of classic office work, having all cores of a machine maxed out is suspicious. Violations of this rule are generated by running the program xmrig for more than 30 seconds. Xmrig is a legitimate crypto-mining software, but it is commonly abused by criminals to build crypto-mining malware.
\end{itemize}
\begin{figure}
\centering
\includegraphics[width=0.49\textwidth]{images/2w_experiment.pdf}
\caption{Overview of the scenario and rules for the second case study. The rules are defined in table \ref{tab:rules}.}
\label{fig:2w_experiment}
\end{figure}
In order to reduce the experimentation and processing time, the daily scenario is compressed into 4 hours, allowing six runs per day and a processing time of only $\approx 4min$ per run.
Note that this compression of experiment time does not influence the results (the patterns are kept uncompressed) and is only for convenience and better confidence in the results.
Figure~\ref{fig:2w_experiment} illustrates the experiment scenario with both the real and compressed time.
The data capture follows the same setup as presented in the first case study.
A power measurement device is placed in series with the main power cable of the machine (a NUC micro-pc).
The measurement device captures the power consumption at 10 kilo-samples per second.
The pre-processing step downsamples the trace to 20 samples per second using a median filter.
This step greatly reduces the measurement noise and the processing time and increases the consistency of the results.
The final sampling rate of 20 samples per second was selected empirically to be around one order of magnitude higher than the typical length of the patterns to detect (around five seconds).
For each compressed day of the experiment (four hours segment, thereafter referred to as days), \gls{mad} performs state detection and returns a label vector.
This label vector associates a label to each sample of the power trace following the mapping: -~1 is UNKNOWN, 0 is SLEEP, 1 is IDLE, 2 is HIGH and 3 is REBOOT.
The training dataset comprises one sample per state, captured during the run of a benchmark script that interactively places the machine in each state to detect.
The script on the machine generates logs that serve as ground truth to verify the results of rule checking.
The traces and ground truth for each day of the experiment are available online \cite{name_hidden_for_peer_review_2023_8192914}.
Please note that day 1 was removed due to a scheduling issue that affected the scenario.
Figure~\ref{fig:preds} presents an illustration of the results.
The main graph line in the middle is the power consumption over time.
The lines colors represent the machine state predicted from the power consumption pattern.
Below the graph, two lines illustrate the labels vectors.
The top line is the predicted labels and can be interpreted as a projection of the power consumption line on the x-axis.
The bottom line is the label's ground truth, generated from the scenario logs.
We can already notice with this figure that the prediction is correct most of the time except for some noise around state transitions and uncertainty between idle and generic activities (represented as UNKNOWN).
The errors at transitions are explained by the training samples that focus on stable states and do not provide labels for transitions pattern.
A simple solution to avoid this issue would be to provide training patterns for state transitions.
The type of error foreshadows the good capabilities of this method for rules verification presented in more detail in Section~\ref{2wexp-results}.
\begin{figure}
\centering
\includegraphics[width=0.49\textwidth]{images/preds.pdf}
\caption{Labels prediction from MAD for a one (compressed) day scenrario.}
\label{fig:preds}
\end{figure}
\subsection{Security Rules}
Many rules can be imagined to describe the expected and unwanted behavior of a machine.
System administrators can define sophisticated rules to detect specific attacks or to match the typical activities of their infrastructure.
We selected 4 rules (see Table~\ref{tab:rules}) that are representative of common threats on \gls{it} infrastructures.
These rules are not exhaustive and are merely an example of the potential of converting power consumption traces to actionable data.
The rules are formally defined using the \gls{stl} syntax, which is bespoke for describing variable patterns with temporal components.
\begin{table*}
\centering
\caption{Security rules applied to the detected states of the machine. $s[t]$ represent the label at time $t$.}
\begin{tabular}{p{0.03\textwidth} | p{0.20\textwidth} | p{0.43\textwidth} | p{0.25\textwidth}}
Rule & Description & STL Formula & Threat\\
\toprule
1 & "SLEEP" state only & $R_1 := \square_{[0,1h]}(s[t]=0)$ & Machine takeover, Botnet\cite{mitre_botnet}, Rogue Employee\\
2 & No "SLEEP" for more than 8m. & $R_4 := \square_{[1h,2h40]} (s[t_0]=0 \rightarrow \lozenge_{[t_0,t_0+1h]}(s[t_0]=0))$ & System Malfunction\\
3 & Exactly one occurrence of "REBOOT" & $R_2 := \lozenge(s[t_0]=3) \cup (\neg \square_{[t_0,t_0+2h40]}(s[t]=3)$ & \gls{apt}\cite{mitre_prevent}, Backdoors\\
4 & No "HIGH" state for more than 30s. & $R_3 := \square (s[t_0]=2 \rightarrow \lozenge_{[t_0,t_0+30s]}(s[t]=2))$ & CryptoMining Malware \cite{mitre_crypto}, Ransomware\cite{mitre_ransomware}, BotNet\cite{mitre_botnet}\\
\bottomrule
\end{tabular}
\label{tab:rules}
\end{table*}
\subsection{Results}\label{2wexp-results}
The performance measure represents the ability of the complete pipeline (\gls{mad} and rule checking) to detect anomalous behavior.
The main metrics are the micro and macro $F_1$ score of the rule violation detection.
The macro-$F_1$ score is defined as the arithmetic mean over individual $F_1$ scores for a more robust evaluation of the global performance as described in \cite{opitz2021macro}.
Table~\ref{tab:rules-results} presents the performance for the detection of each rule.
The performances are perfect for this scenario without any false positive or false negative over 40 runs.
The perfect detection of more complex patterns like REBOOT illustrates the need for a system capable of matching arbitrary states.
Flat lines at varying average levels represent many common states from embedded systems.
If the only states to detect were OFF, ON and HIGH, then a simple threshold method would work wonders.
However, the REBOOT pattern is more complex.
The REBOOT resembles generic activities and crosses most of the same thresholds.
In order to consistently recognize it, the classifier must have, at its core, a pattern-matching mechanism.
This illustrates that \gls{mad} balances the tradeoff between simple, explainable and efficient on one side and capable, complete and versatile on the other.
\begin{table}
\centering
\caption{Performance of the complete rule violation detection pipeline.}
\begin{tabular}{lccc}
Rule & Violation Ratio & Micro-$F_1$ & Macro-$F_1$\\
\toprule
Night Sleep & 0.33 & 1.0 & \multirow{4}*{1.0} \\
Work Hours & 0.3 & 1.0 & \\
Reboot & 0.48 & 1.0 & \\
No Long High & 0.75 & 1.0 & \\
\bottomrule
\end{tabular}
\label{tab:rules-results}
\end{table}
\section{Discussion}\label{sec:discussion}
In this section, we highlight specific aspects of the proposed solution.
\textbf{Dynamic Window vs Fixed Windows: }
One of the core mechanisms of \gls{mad} is the ability to choose the best-fitting window to classify each sample.
This mechanism is crucial to overcome some of the shortcomings of a traditional \gls{1nn}.
It is essential to understand the advantages of this dynamic window placement to fully appreciate the performances of \gls{mad}.
Figure~\ref{fig:proof} illustrates a test case that focuses on the comparison between the two methods.
In this figure, the top graph represents the near-perfect classification of the trace into different classes by \gls{mad}.
To make the results more comparable, the $\alpha$ parameter of \gls{mad} was set to $\infty$ to avoid the distance threshold mechanism and focuses on the dynamic window placement.
The middle graph represents the classification by a \gls{1nn}, and it illustrates the three types of errors that \gls{mad} aims to overcome.
The bottom graph represents the predicted state for each sample by each method with -~1 the UNKNOWN state and $[0-4]$ the possible states of the trace.
\begin{itemize}
\item Transition Bleeding Error: Around transitions, \gls{1nn} tends to miss the exact transition timing and miss-classify samples.
This is explained by the rigidity of the window around the sample.
At the transition time, the two halves of the window are competing to match different states.
Depending on the involved states' shape, it may require more than half of the window to prefer the new state, leading to miss-classified samples around the transition.
In contrast, \gls{mad} will always choose a window that fully matches either of the states, and that is not across the transition, avoiding the transition error.
\item Out-of-phase Error: When a state is described by multiple iterations of a periodic pattern, the match between a window and the trace varies dramatically every half-period. When the window is in phase with the pattern, the match is maximal and \gls{1nn} perfectly fills its role. However, when the window and the pattern are out of phase, the match is minimal, and the nearest neighbor may be a flat pattern at the average level of the pattern. This error manifests itself through predictions switching between two values at half the period of the pattern. \gls{mad} avoids this error by moving the window by, at most, half a period to ensure a perfect match with the periodic pattern.
\item Unknown-Edges Error: Because of the fixed nature of the window of a \gls{1nn}, every sample that is less than a half window away from either end cannot be classified. This error is not so important in most cases where edge samples are less important, and many solutions are available to solve this issue. However, \gls{mad} naturally solve this issue by shifting the window only in the valid range until the edge.
\end{itemize}
There are other methods than \gls{mad} to solve these issues, like \gls{dtw} distance metric, padding, or labels post-processing.
However, this illustrates how \gls{mad} leverages at its core the dynamic window placement to dramatically improve the accuracy of the classification.
Dynamic window placement is a simple mechanism that does not involve complex and computationally expensive distance metrics like \gls{dtw} to improve matches.
This leaves the choice of the distance metric open for specific applications.
The dynamic window placement also avoids increased complexity by requiring the same number of distance computation as \gls{1nn}.
\begin{figure*}
\centering
\includegraphics[width=0.9\textwidth]{images/proof.pdf}
\caption{Classification comparison between MAD and 1-NN with examples of prediction error from 1-NN highlighted. The top graph is \gls{mad}, the middle graph is 1-NN, and the bottom graph is the prediction vector of both methods.}
\label{fig:proof}
\end{figure*}
\textbf{Limitations: }
The proposed method has some limitations that are important to acknowledge.
The current version of \gls{mad} is tailored for a specific use case.
The goal is to enable high-level security policies with a secure and reliable state detection of a machine from a time series.
The purpose of the state detection is not an anomaly or novelty detection at the time series level.
For this reason, the patterns to be detected by \gls{mad} bear some limitations.
First, the patterns must be distinct.
If two patterns share a significant portion of time series, \gls{mad} will have an issue leading to unstable results.
Second, the states must be hand selected.
The data requirement is extremely low --- only one sample per pattern --- so the selected samples must be reliable.
For now, a human expert decided on the best patterns to select.
While nothing is complicated in this selection, it is still a highly manual process that we hope to automate with future iterations.
Finally, the states must be consistent.
If a state has an unpredictable signature --- i.e., each occurrence displays a significantly different pattern ---, \gls{mad} will not be able to detect the occurrences reliably.
If a state has different patterns, it is possible to capture each variation as a distinct training sample to enable better detection.
The proposed solution is trivial to adapt for multi-shot detection, but the design decisions and implementation details are outside the scope of this paper.
\textbf{Extension to Multi-shot Classification: }
\gls{mad} is not limited to one-shot cases and can leverage more labeled data.
\gls{mad} is based on a \gls{1nn}, so the evolution to \gls{knn} is natural.
If more than one pattern is available for one state, \gls{mad} will apply the same detection method only with multiple patterns leading to the same label.
The number of training samples per class can be unbalanced, and the training samples within a class can have different lengths.
\gls{mad} preserves the versatility of a \gls{knn} solution in this regard.
\textbf{Time Efficiency: }
\gls{mad} remains time-efficient compared to a classic \gls{1nn}.
Although there are more operations to perform to evaluate all possible windows around a sample, the impact on detection time is small.
Over all the datasets considered, the time for \gls{mad} was, on average, 14\% higher than the time for the \gls{1nn}.
\gls{mad} is also slower than \gls{svm} and faster than \gls{mlp}, but comparison to other methods is less relevant as computation time is highly sensitive to implementation, and no optimization was attempted.
Finally, because \gls{mad} is distance-based and window-based, parallelization is naturally applicable and can significantly reduce the processing time.
\section{Conclusion}
We present \gls{mad} and its associated rule-verification pipeline, a novel solution to enable high-level security policy enforcement from side channel information.
Leveraging side channel information requires labeling samples to discover the state of the monitored system.
Additionally, in the use cases where side channels are leveraged, collecting large labeled datasets can be challenging.
\gls{mad} is designed around three core features: low data requirement, flexibility of the detection capabilities, and stability of the results.
Built as a variation of a traditional \gls{1nn}, \gls{mad} uses a dynamic window placement that always provides the most relevant context for sample classification.
One hyper-parameter, $\alpha$, controls the confidence of the detector and the tradeoff between un-classified and miss-classified samples.
The comparison to traditional state detection methods highlights the potential of \gls{mad} for the pre-processing of raw data for security applications.
%%
%% The next two lines define the bibliography style to be used, and
%% the bibliography file.
\bibliographystyle{ACM-Reference-Format}
\bibliography{biblio}
\end{document}
\endinput
%%
%% End of file `sample-manuscript.tex'.

View file

@ -2,6 +2,8 @@
For ACM, the title should not be the same as for the conference paper.
For ACM, fix images to take full width, not 50%.
Also fix the legends (for example figure 3).
# Explanation Additions