diff options
128 files changed, 12589 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..aa60a65 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +__pycache__ +.project +.pydevproject +*.orig +*.pyc +*.bak +logs +.DS* + @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..c5d6d75 --- /dev/null +++ b/README.txt @@ -0,0 +1,13 @@ +Copyright (C) 2026 Private Island Networks Inc. + +See the included LICENSE file and file headers for licensing information. + +The PI Explorer Project provides a Web-based interaction with the Private Island FPGA-based Project via a LAN. + +This project is currently in experimental, rough form. + +It utilizes aiohttp as the Web framework and Pyshark/Tshark for capturing traffic from the LAN. + +Many improvements are planned + + diff --git a/constants.py b/constants.py new file mode 100755 index 0000000..e83a2fb --- /dev/null +++ b/constants.py @@ -0,0 +1,164 @@ +""" + Copyright (C) 2026 Private Island Networks Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + file: constants.py + +""" + +class STATUS: + OK = 10 + FORM_OK = OK + DONE = OK + NONE = OK + FORM_ERRORS = 20 + FORM_DUPLICATE = 30 + + # pass the URL in data + REDIRECT = 100 + + UNBOUND_FORM = 0 + CSRF_DETECTED = -1 + ERROR_PROCESSING_PARAMS = -2 + ERROR_SERVER = -3 + ERROR_GENERAL = -3 + ERROR_NO_COOKIES = -4 + ERROR_TAMPER = -5 + + # DB Related + ERROR_DB_TOPIC_DOESNT_EXIST = -10 + ERROR_DB_COMMENT_DOESNT_EXIST = -11 + ERROR_DB_OBJECT_DOESNT_EXIST = -12 + + # Session Related + ERROR_SN_DATA_MISMATCH = -20 + + # Catch All View Problems + ERROR_VW_BAD_ARGS = -40 + + # Called an AJAX helper but the request wasn't AJAX + ERROR_AJAX_GETTER_CALLED_WITHOUT_AJAX = -60 + +# Betsy Uses Static IP addressing +BETSY_IP_ADDRESS = "192.168.5.100" +PC_IP_ADDRESS = "192.168.5.44" + + +MODE_IDLE = 0 +MODE_LIVE = 1 +MODE_FILE = 2 + +PORT_PHY0 = 0 +PORT_PHY1 = 1 +PORT_PHY2 = 2 +PORT_PC = 10 +PORT_UNDEFINED = -1 + + +MSG_FORMAT_BASIC = 0 +MSG_FORMAT_CONTROLLER = 1 +MSG_FORMAT_MLE = 2 + +# Controller Message Protocol: +# Type: 8-bit +# Token: 8-bit +# Address: 16-bit +# Data: 32-bit + +# Betsy Address Map +MSG_CONTROLLER_ADDR = 0x0000 +MSG_MAC_ADDR = 0x0100 +MSG_PKT_FILTER_ADDR = 0x0200 +MSG_SWITCH_ADDR = 0x0500 +MSG_MDIO_ADDR = 0x0600 +MSG_INVALID_ADDR = 0x0700 + +# Message Types +MSG_TYPE_NULL = 0 +MSG_TYPE_WRITE = 1 +MSG_TYPE_READ = 2 +MSG_TYPE_NOTIFY_SUCCESS = 3 +MSG_TYPE_NOTIFY_ERROR = 4 +MSG_TYPE_NOTIFY_NOTIFY = 5 +MSG_TYPE_NOTIFY_MLE = 16 + +MSG_TYPE_CONTROL = -1 + +MSG_TYPE_MAP = {MSG_TYPE_NULL:"NULL", + MSG_TYPE_WRITE:"WRITE", + MSG_TYPE_READ: "READ", + MSG_TYPE_NOTIFY_SUCCESS:"SUCCESS", + MSG_TYPE_NOTIFY_ERROR:"ERROR", + MSG_TYPE_NOTIFY_MLE: "MLE"} + +BETSY_ADDR_MAP = { + "0000": "FW_VER", + "0002": "FW_INC", + "0010": "FPGA_TEMP", + "0100": "PHY0_STATUS", + "0104": "PHY1_STATUS", + "0106": "PHY1_MASK", + "0108": "PHY2_STATUS", + "010A": "PHY2_MASK" + } + +DP83867_MAP = { + 0x0000: ["Basic Mode Control Register (BMCR)", "0x1140"], + 0x0001: ["Basic Mode Status Register(BMSR)", "0x796D"], + 0x0002: ["PHY Identifier Register #1(PHYIDR1)", "0x0000"], + 0x0003: ["PHY Identifier Register #2(PHYIDR2)", "0x0000"], + 0x0004: ["Auto-Negotiation Advertisement Register(ANAR)", "0x0000"], + 0x0005: ["Auto-Negotiation Link Partner Ability Register(ANLPAR)", "0x0000"], + 0x0006: ["Auto-Negotiate Expansion Register(ANER)", "0x0000"], + 0x0007: ["Auto-Negotiation Next Page Transmit Register(ANNPTR)", "0x0000"], + 0x0008: ["Auto-Negotiation Next Page Receive Register(ANNPRR)", "0x0000"], + 0x0009: ["Configuration Register 1(CFG1)", "0x0000"], + 0x000A: ["Status Register 1(STS1)", "0x0000"], + 0x000B: ["Undefined", "0x0000"], + 0x000C: ["Undefined", "0x0000"], + 0x000D: ["Register Control Register(REGCR)", "0x0000"], + 0x000E: ["Address or Data Register(ADDAR)", "0x0000"], + 0x000F: ["1000BASE-T Status Register(1KSCR)", "0x0000"], + } + +# Lattice Certus NX SGMIICDR +SGMII_CDR_MAP = { + 0x0000: ["LMMI[0]", "0x60"], + 0x0001: ["LMMI[1]", "0xA1"], + 0x0002: ["LMMI[2]", "0xD2"], + 0x0003: ["LMMI[3]", "0x17"], + 0x0004: ["LMMI[4]", "0xFF"], + 0x0005: ["LMMI[5]", "0x00"], + 0x0006: ["LMMI[6]", "0x55"], + 0x0007: ["LMMI[7]", "0x80"], + 0x0008: ["LMMI[8]", "0x20"], + 0x0009: ["LMMI[9]", "0x40"], + 0x000A: ["LMMI[A]", "0xAF"], + 0x000B: ["LMMI[B]", "0x7F"], + 0x000C: ["LMMI[C]", "0x8F"], + 0x000D: ["LMMI[D]", "0x00"], + 0x000E: ["LMMI[E]", "0x00"], + 0x000F: ["LMMI[F]", "0x00"], + } + +CONTROLLER_MAP = {} + +ML_ENGINE_MAP = {} + +FABRIC_MAP = {} + + + + + @@ -0,0 +1,479 @@ +""" + Copyright (C) 2026 Private Island Networks Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + file: main.py + +""" +import os +import sys +import argparse +import logging +import aiohttp +import asyncio +import asyncio_dgram +import pyshark +import aiohttp_jinja2 +import jinja2 +from multiprocessing import Process, Manager +from aiohttp import web +from queue import Empty +import platform +from socket import socket, AF_INET, SOCK_DGRAM +from time import sleep +import json +from websockets.asyncio.server import serve + +from constants import * + +DEBUG = True +VERSION = 0.1 +PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__)) +STATIC_PATH = PROJECT_ROOT + '/static' +TEMPLATE_PATH = PROJECT_ROOT + '/templates' +LOG_PATH = PROJECT_ROOT + '/logs' + +ws_key = web.AppKey("ws_key", dict[str, web.WebSocketResponse]) + +async def _parse_pkt(app, pkt): + """ Parse a Wireshark received packet""" + + # Drop unwanted packets + if not (pkt.ip.src == app['ipaddr_betsy'] or pkt.ip.src == app['ipaddr_pc']): + return None + + try: + data = pkt.data.data.__str__() + except: + if DEBUG: + print('non msg received') + return None + + message = dict() + + try: + msg_type = MSG_TYPE_MAP[int(data[0:2],16)] + msg_token = '0x' + data[2:4] + try: + msg_addr = BETSY_ADDR_MAP[data[4:8]] + except: + msg_addr = '0x' + data[4:8] + + msg_data = '0x' + data[8::] + except Exception as e: + print("mapping error:", str(e)) + pass + + dst_port = pkt.udp.dstport.hex_value + if pkt.ip.src == app['ipaddr_betsy']: + port = PORT_PHY0 + elif pkt.ip.src == app['ipaddr_pc'] and dst_port == 0x9020: + port = PORT_PC + else: + port = PORT_UNDEFINED + + message["format"] = MSG_FORMAT_CONTROLLER + message["time"] = pkt.frame_info.get_field("frame.time_relative").__str__()[0:6] + message['port'] = port + message['type'] = msg_type + message['token'] = msg_token + message['address'] = msg_addr + message['data'] = msg_data + + return message + + +async def home(request): + # i_query = request.app['i_query'] + data = request.match_info.get('data', "") + ctx = _default_context('main') + ctx.update(locals()) + response = aiohttp_jinja2.render_template('index.html', request, ctx) + response.headers['Content-Language'] = 'en-US' + return response + +async def mdio(request): + if request.headers.get('X-Requested-With') == 'XMLHttpRequest': + q_cont = request.app['q_cont'] + values = dict() + _query_mdio(request.app) + for i in range(16): + pkt = q_cont.get(block=True) # Query + pkt = q_cont.get(block=True) # Response + msg = pkt.data.data.__str__() + values[i] = int("0x" + msg[10:],16) + + d = json.dumps({'values': values}) + response = web.Response(text=d, status=200) + else: + ctx = _default_context('mdio') + ctx['ss'] = True + ctx['regs'] = DP83867_MAP + response = aiohttp_jinja2.render_template('mdio.html', request, ctx) + response.headers['Content-Language'] = 'en-US' + return response + +async def _send_msg(app, msg_type, token, address, data): + try: + sko=socket(AF_INET,SOCK_DGRAM) + sko.bind((app['ipaddr_pc'],0x3000)) + msg = msg_type + token + address + data + sko.sendto(msg,("192.168.5.100",0x9020)) + except: + print("Controller Command failed in Exception: {0}", sys.exc_info()) + pass + + sko.close() + +async def _udp_rcv(): + """ controller response """ + stream = await asyncio_dgram.bind(("192.168.5.40", 0x8000)) + data, remote_addr = await stream.recv() + return data + stream.close() + +async def controller(request): + if request.headers.get('X-Requested-With') == 'XMLHttpRequest': + try: + send_pkt = rcv_pkt = None + data = await request.post() + result = STATUS.OK + q_cont = request.app['q_cont'] + await _send_msg(request.app, int(data.get('type')).to_bytes(1), + int(data.get('token')).to_bytes(1), + int(data.get('address')).to_bytes(2), + int(data.get('data')).to_bytes(4)) + send_pkt = await _parse_pkt(request.app, q_cont.get(block=True)) + if send_pkt['type'] == "READ": + rcv_pkt = await _parse_pkt(request.app, q_cont.get(block=True)) + except Exception as e: + print(str(e)) + result = STATUS.ERROR_SERVER + pass + finally: + resp_d = json.dumps({'r':result, 'd' : [send_pkt, rcv_pkt]}) + response = web.Response(text=resp_d) + else: + ctx = _default_context('controller') + ctx['regs'] = CONTROLLER_MAP + response = aiohttp_jinja2.render_template('controller.html', request, ctx) + response.headers['Content-Language'] = 'en-US' + + return response + + +async def mle(request): + data = request.match_info.get('data', "") + ctx = _default_context('main') + ctx.update({'app_layer': 'mle', 'data': data, 'regs': ML_ENGINE_MAP, 'ws': True }) + ctx.update(locals()) + response = aiohttp_jinja2.render_template('mle.html', request, ctx) + response.headers['Content-Language'] = 'en-US' + return response + + +async def fabric(request): + data = request.match_info.get('data', "") + ctx = _default_context('fabric') + regs = {} + ctx.update(locals()) + response = aiohttp_jinja2.render_template('fabric.html', request, ctx) + response.headers['Content-Language'] = 'en-US' + return response + +async def support(request): + data = request.match_info.get('data', "") + ctx = _default_context('support') + response = aiohttp_jinja2.render_template('help.html', request, ctx) + response.headers['Content-Language'] = 'en-US' + return response + +async def lmmi(request): + q_cont = request.app['q_cont'] + data = request.match_info.get('data', "") + if request.headers.get('X-Requested-With') == 'XMLHttpRequest': + values = dict() + _query_lmmi(app) + for i in range(28): + pkt = q_cont.get(block=True) + msg = pkt.data.data.__str__() + if len(msg) == 6 and (msg == '03e0fe' or msg == '03e0ff'): + continue + values[round((i-1)/2)] = int("0x" + msg[12:],16) + + d = json.dumps({'values': values}) + resp = web.Response(text=d, status=200) + return resp + else: + context = {'data': data, 'regs0': SGMII_CDR_MAP, 'regs1': SGMII_CDR_MAP} + response = aiohttp_jinja2.render_template('lmmi.html', request, context) + response.headers['Content-Language'] = 'en-US' + return response + + +async def set_filename(request): + if not request.can_read_body: + raise web.HTTPBadRequest() + + data = await request.json() + ns = request.app['ns'] + ns.filename = data['filename'] + + return web.Response(text="ok", status=200) + + +async def start(request): + if not request.can_read_body: + raise web.HTTPBadRequest() + + data = await request.json() + mode = request.app['mode'] + mode.value = data['mode'] + + return web.Response(text="ok", status=200) + + +async def stop(request): + if not request.can_read_body: + raise web.HTTPBadRequest() + + data = await request.json() + mode = request.app['mode'] + mode.value = MODE_IDLE + + return web.Response(text="ok", status=200) + + +async def get_icon(request): + raise aiohttp.web.HTTPNotFound() + + +# WebSocket handle +async def wslogger(request): + ws = web.WebSocketResponse() + await ws.prepare(request) # onopen is called in the browser + + request.app[ws_key]['primary'] = ws + + pkt = None + num_pkts = 0 + q_mle = request.app['q_mle'] + mode = request.app['mode'] + + async for msg in ws: + if msg.type == web.WSMsgType.TEXT: + while True: + try: + pkt = q_mle.get(block=False) + except Empty: + pass + await asyncio.sleep(1) # let other tasks run + continue + + num_pkts = num_pkts + 1 + if DEBUG: + print('get from Q:', num_pkts) + message = await _parse_pkt(request.app, pkt) + if message: + await ws.send_json(message) + + elif msg.type == web.WSMsgType.CLOSE: + break + + +def _query_lmmi(app): + """ Lattice Memory Mapped Interface """ + try: + sko = socket(AF_INET, SOCK_DGRAM) + sko.bind((app['ipaddr_pc'], 0x3000)) + + # Query the LMMI Registers + for i in range(16): + msg = MSG_TYPE_READ + b'\x06' + i.to_bytes(1) + b'\x00\x00' + sko.sendto(msg, (BETSY_IP_ADDRESS, 0x9020)) + sleep(0.01) + + except: + print("Controller Command failed in Exception: {0}", sys.exc_info()) + pass + finally: + sko.close() + + if DEBUG: + print("query_lmmi finished") + + +def _query_mdio(app): + + try: + sko = socket(AF_INET, SOCK_DGRAM) + sko.bind((app['ipaddr_pc'], 0x3000)) + + # Query the LMMI Registers + for i in range(16): + msg = MSG_TYPE_READ.to_bytes(1) + (i).to_bytes(1) + (MSG_MDIO_ADDR+i).to_bytes(2, byteorder='big') + b'\x00\x00\x00\x00' + sko.sendto(msg, (app['ipaddr_betsy'], 0x9020)) + sleep(0.01) + + except: + print("Controller Command failed in Exception: {0}", sys.exc_info()) + pass + finally: + sko.close() + + if DEBUG: + print("query_lmmi finished") + +async def _shutdown(app): + for ws in app[ws_key].values(): + await ws.close() + app[ws_key].clear() + +def _default_context(app_layer): + return { + "version" : VERSION, + "app_layer" : app_layer + } + +def _run_shark(q_cont, q_mle, ife, df, mode, ns, time): + + num_pkts = 0 + ts = time[0] + tf = time[1] + + cap_live = pyshark.LiveCapture(interface=ife, display_filter=df) + + while True: + + if mode.value == MODE_IDLE: + continue + + # mode is a global set during initialization by the browser + elif mode.value == MODE_LIVE: + cap_live.reset() + for pkt in cap_live.sniff_continuously(): + num_pkts = num_pkts + 1 + try: + msg_type = int(pkt.data.data[0:2],16) + if msg_type < MSG_TYPE_NOTIFY_MLE: + q_cont.put(pkt) + print ('put in Cont Q: ', num_pkts) + elif msg_type == MSG_TYPE_NOTIFY_MLE: + q_mle.put(pkt) + print ('put in MLE Q: ', num_pkts) + except Exception as e: + print(str(e)) + pass + + if mode.value == MODE_IDLE: + break + + + elif mode.value == MODE_FILE: + cap_file = pyshark.FileCapture(input_file=LOG_PATH + ns.filename, display_filter=df) + for pkt in cap_file: + num_pkts = num_pkts + 1 + time = float(pkt.frame_info.get_field("frame.time_relative").__str__()[0:9]) + if time >= ts and time < tf: + q_cont.put(pkt) + if DEBUG: + print ('put in Q: ', num_pkts) + if DEBUG: + print("file replay finished") + + cap_file.close() + mode.value = MODE_IDLE + + +async def make_app(args, manager): + ns = manager.Namespace() + q_cont = manager.Queue() + q_mle = manager.Queue() + + if args.ife: + ife = args.ife + else: + ife = 'WiFi' + + if args.mode == "live": + mode = manager.Value('i', MODE_LIVE) + elif args.mode == "file": + mode = manager.Value('i', MODE_FILE) + else: + mode = manager.Value('i', MODE_IDLE) + + # filename = mp.Value(ctypes.c_char_p, args.file.encode("utf-8")) + ns.filename = args.file + df = args.df + + time = (float(args.ts), float(args.tf)) + + p1 = Process(target=_run_shark, args=(q_cont, q_mle, ife, df, mode, ns, time)) + p1.start() + + app = web.Application() + + app[ws_key] = {} + app['ipaddr_pc'] = args.ipaddr_pc + app['ipaddr_betsy'] = args.ipaddr_betsy + app['i_query'] = args.iq + app['mode'] = mode + app['ns'] = ns + app['q_cont'] = q_cont + app['q_mle'] = q_mle + app['p1'] = p1 + + app.on_shutdown.append(_shutdown) + + app.add_routes([ + web.get('/', home), + web.get('/mdio' , mdio), + web.get('/controller', controller), + web.post('/controller',controller), + web.get('/mle', mle), + web.get('/fabric', fabric), + web.get('/help', support), + web.get('/lmmi', lmmi), + web.post('/start', start), + web.post('/stop', stop), + web.post('/filename', set_filename), + web.get('/favicon.ico', get_icon), + web.get('/logger', wslogger), + web.static('/static', STATIC_PATH)]) + + aiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader(TEMPLATE_PATH)) + + return app + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Private Island Mind Net', epilog='Version: ' + str(VERSION)) + parser.add_argument('--ipaddr_pc', default="192.168.5.40", help="IP Addr of this PC") + parser.add_argument('--ipaddr_betsy', default="192.168.5.100", help="IP Addr of Betsy") + parser.add_argument('--port', type=int, default=8010, help="Web server port number") + parser.add_argument('-d', '--df', default="ip.addr==192.168.5.100", help='display filter', action='store', required=False) + parser.add_argument('--ife', default='WiFi', help='tshark interface', action='store', required=False) + parser.add_argument('--iq', type=int, default=0, help='enable initial query on startup', action='store', required=False) + parser.add_argument('-m', '--mode', default="live", help='mode live or file replay', action='store', required=False) + parser.add_argument('-f', '--file', default="logs\\test.pcapng", help='Wireshark log file', action='store', required=False) + parser.add_argument('--ts', default="0", help='time start for file replay', action='store', required=False) + parser.add_argument('--tf', default="100000.00", help='time last for file replay', action='store', required=False) + args = parser.parse_args() + filename = args.file + + logging.basicConfig(level=logging.DEBUG) + manager = Manager() + + app = web.run_app(make_app(args, manager), port=args.port) + app['p1'].join() diff --git a/static/css/base.css b/static/css/base.css new file mode 100644 index 0000000..702a034 --- /dev/null +++ b/static/css/base.css @@ -0,0 +1,440 @@ +:root { + --mc-color: #0072b0; + font-size: 1.0em; + box-sizing: border-box; +} + +/* See 3.6 in CID. */ +*, *::before, *::after { + box-sizing: inherit; +} + +/* defaults */ +body { + font-family: Helvetica, Arial, sans-serif; + margin: 1rem; +} + +form { + border: 1px solid black; + border-radius: 1em; + width: 50vw; +} + +a:link { + text-decoration: none; +} + +a:visited { + text-decoration: none; +} + +button { + color: white; + border: 0.1px solid green; + border-radius: 0.2em; + background-color: green; +} + +button.mc-quiet { + box-shadow: inherit; + padding: 5px; +} + +input, select { + border-width: 1px; + border-color: black; + margin: 0.2em 0; +} + +input[type="submit"] { + background-color: green; + color: white; +} + +div#betsy { + width: 98vw; + height: 80vh; +} + +#mc-main-window { + height: 800px; +} + +#mc-header { + color: white; + background-color: var(--mc-color); +} + +#mc-banner { + font-size: 2.0em; + padding: 0.5em; +} + +/* top container for menu */ +#mc-menu { + position: relative; + width: 100%; +} + +/* hamburger */ +#mc-menu-hamburger { + position: absolute; + top: -1.4em; + right: 0.1em; + border: 0; + background-color: transparent; + font-size: 2.5em; + width: 1em; + height: 1em; + line-height: 0.4; + text-indent: 4em; + white-space: nowrap; + overflow: hidden; +} + +/* div parent for mc-menu-list */ +#mc-menu-dropdown { + z-index: 20; + display: none; + position: absolute; + right: 0; + margin: 0; +} + +@media ( max-width : 35em) { + #mc-menu.is-open #mc-menu-dropdown { + display: block; + } +} + +@media ( min-width : 35em) { + #mc-menu-dropdown { + display: block; + position: static; + } +} + +#mc-menu-list { + margin: 0; + padding: 0; + list-style: none; +} + +#mc-menu-list>li { + text-align: center; + border-bottom: 2px solid #185aa5; +} + +#mc-menu-list>li a { + display: inline-block; + color: white; + font-size: 1.1rem; + font-weight: normal; + padding: 0.1em 1em 0.1em 1em; + margin: 0 auto; +} + +@media ( min-width : 35em) { + #mc-menu-list { + display: flex; + position: static; + border: 0; + } + #mc-menu-list>li { + flex: 1; + padding-bottom: 0; + } + #mc-menu-list>li a { + display: inline-block; + border-top: 5px solid var(--mc-color); + border-bottom: 5px solid var(--mc-color); + transition: border-bottom 0.3s ease-out; + } + #mc-menu-list>li a:hover { + border-bottom: 5px solid #00cc00; + } +} + +/* svg */ +.mc-divider { + padding: 0; + margin: 1em; + width: 90%; + height: 0.2em; + stroke: #185aa5; + stroke-width: 1.3px; + stroke-opacity: 0.6; +} + +#mc-log-hdr { + display: flex; + flex-wrap: nowrap; + align-items: flext-start; + height: 5rem; +} + +#mc-log { + max-height: 70%; + background-color: white; + overflow-x: hidden; /* Hide horizontal scrollbar */ + overflow-y: scroll; /* Add vertical scrollbar */ +} + +.mc-log-row { + margin: 1 px; + padding: 1 px; + display: flex; + flex-wrap: nowrap; + align-items: flext-start; +} + +.mc-log-col { + font-size: 1.5rem; +} + +.mc-log-col-time { + padding: 1em 0px; + color: black; + flex-basis: 200px; +} + +.mc-log-col-pc { + padding: 1em 0px; + color: green; + flex-basis: 300px; +} + +.mc-log-col-phy0 { + padding: 1em 0px; + color: blue; + flex-basis: 300px; +} + +.mc-log-col-phy1 { + padding: 1em 0px; + color: red; + flex-basis: 300px; +} + +@media ( min-width : 80em) { + .mc-log-col-pc { + flex-basis: 600px; + } + .mc-log-col-phy0 { + flex-basis: 600px; + } +} + +.mc-table-striped thead th { + border-bottom: 1px solid #d6d6d6; /* non-RGBA fallback */ +} + +.mc-table-striped tbody th, .mc-table-striped tbody td { + border-bottom: 1px solid #e6e6e6; /* non-RGBA fallback */ +} + +.mc-table-striped tbody tr:nth-child(odd) td, .mc-table-striped tbody tr:nth-child(odd) th + { + background-color: rgba(0, 139, 0, 0.1); +} + +.mc-table-striped th, .mc-table-striped td { + padding: 1.0em 2.0em; +} + +/* Icons */ +.mc-icons { + margin: 0 auto; + display: block; + text-align: center; + vertical-align: center; +} + +.mc-icon { + width: 28px; + height: 28px; + padding: 0.4em 0.7em; + margin: 1em 0.2em; + background-color: #f0f0f0; + border-radius: 2em; + cursor: pointer; +} + +.mc-icon-small { + width: 14px; + height: 14px; + padding: 0.2em 0.35em; + background-color: #f0f0f0; + border-radius: 1em; + cursor: pointer; +} + +h1 { + /* color: #185aa5; */ + font-size: 2rem; + padding: 0.4em; +} + +p { + color: #185aa5; + margin: 1.2em; + width: 90%; + line-height: 1.4em; + text-align: justify; +} + +button.mc-action { + margin: 5px 5px; + border: 1px solid black; + color: white; + cursor: pointer; + padding: 10px 10px; + border-radius: 4px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 0.8rem; +} + +#mc-mode-box { + border: 1px solid black; + border-radius: 15px; + width: 700px; + padding: 1rem; +} + +/* outer modal container */ +#mc-modal { + display: none; +} + +/* disable the viewport behind the modal box */ +#mc-modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.5); + z-index: 50; +} + +/* modal box */ +#mc-modal-body { + position: fixed; + border-radius: 1em; + border: 2px #185aa5 solid; + top: 20%; + bottom: 20%; + right: 20%; + left: 20%; + padding: 2em 3em 2em 3em; + background-color: white; + overflow: auto; + z-index: 60; +} + +/* offsets are calculated in js */ +#mc-modal-body.mc-image { + +} + +#mc-modal-body.mc-large { + top: 10%; + bottom: 10%; + right: 10%; + left: 10%; +} + +#mc-modal-body.mc-small { + padding: 1em 1.5em; + margin: 0; + top: 10%; + bottom: 10%; + right: 10%; + left: 10%; + overflow: scroll; +} + +#mc-modal-body.mc-xtra-small { + padding: 1em 1.5em; + margin: 0; + top: 15%; + bottom: 15%; + right: 15%; + left: 15%; + overflow: scroll; +} + +@media ( min-width : 45em) { + #mc-modal-body.mc-small { + top: 15%; + bottom: 15%; + right: 15%; + left: 15%; + } + #mc-modal-body.mc-xtra-small { + top: 35%; + bottom: 35%; + right: 25%; + left: 25%; + } +} + +@media ( min-width : 80em) { + #mc-modal-body.mc-small { + top: 25%; + bottom: 25%; + right: 25%; + left: 25%; + } + #mc-modal-body.mc-xtra-small { + top: 35%; + bottom: 35%; + right: 30%; + left: 30%; + } +} + +/* modal close button */ +button#mc-modal-close { + position: absolute; + background-color: white; + color: black; + top: 0.1em; + right: 0.1em; + cursor: pointer; + font-size: 2em; + height: 1em; + width: 1em; + text-indent: 10em; + overflow: hidden; + border: 0; +} + +/* modal close button */ +#mc-modal-buttons { + position: absolute; + bottom: 1em; + left: 3em; + padding: 0.3em; + border: 0; +} + +#mc-modal-close::after { + position: absolute; + line-height: 0.5; + top: 0.2em; + left: 0.1em; + text-indent: 0; + content: "\00D7"; +} + +/* spinner */ +#mc-loading { + position: fixed; + display: none; + top: 49%; + left: 49%; +}
\ No newline at end of file diff --git a/static/css/ss.css b/static/css/ss.css new file mode 100644 index 0000000..09e0efb --- /dev/null +++ b/static/css/ss.css @@ -0,0 +1,55 @@ + +.mc-ss-input { + width: 90%; + font-size: 1.1rem; + min-height: 2.2em; + text-align: left; + margin: 0.5em; +} + +.mc-ss-main-panel table { + margin: 2em 0; +} + +.mc-ss-main-panel table td { + padding: 0.7em 0.3em; + font-size: 0.9rem; +} + +.mc-ss-table th.mc-sortable:hover { + text-decoration: underline; + cursor: pointer; +} + +.mc-table-bit-map, .mc-ss-table { + border-collapse: collapse; + width: 80%; + margin: 0 auto; +} + +.mc-table-basic-no-border th, .mc-table-basic th { + font-weight: bold; +} + +.mc-ss-table { + border: 1px solid black; + padding: 0.3em; + text-decoration: underline; + cursor: pointer; +} + +.mc-ss-table th { + border: 1px solid black; + padding: 0.3em; +} + + +.mc-ss-table td { + border: 1px solid black; + padding: 0.3em; +} + +.mc-table-bit-map td { + border: 1px solid black; + padding: 0.3em; +}
\ No newline at end of file diff --git a/static/images/favicon.ico b/static/images/favicon.ico Binary files differnew file mode 100644 index 0000000..bc6bda5 --- /dev/null +++ b/static/images/favicon.ico diff --git a/static/images/icons-svg/action-black.svg b/static/images/icons-svg/action-black.svg new file mode 100644 index 0000000..20048d8 --- /dev/null +++ b/static/images/icons-svg/action-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="13px" viewBox="0 0 14 13" style="enable-background:new 0 0 14 13;" xml:space="preserve"> +<path d="M9,5v3l5-4L9,0v3c0,0-5,0-5,7C6,5,9,5,9,5z M11,11H2V5h1l2-2H0v10h13V7l-2,2V11z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/action-white.svg b/static/images/icons-svg/action-white.svg new file mode 100644 index 0000000..23da40d --- /dev/null +++ b/static/images/icons-svg/action-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="13px" viewBox="0 0 14 13" style="enable-background:new 0 0 14 13;" xml:space="preserve"> +<path fill="#FFF" d="M9,5v3l5-4L9,0v3c0,0-5,0-5,7C6,5,9,5,9,5z M11,11H2V5h1l2-2H0v10h13V7l-2,2V11z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/alert-black.svg b/static/images/icons-svg/alert-black.svg new file mode 100644 index 0000000..d4179fe --- /dev/null +++ b/static/images/icons-svg/alert-black.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve"> +<path d="M7,0L0,12h14L7,0z M7,11c-0.553,0-1-0.447-1-1s0.447-1,1-1s1,0.447,1,1S7.553,11,7,11z M7,8C6.447,8,6,7.553,6,7V5 + c0-0.553,0.447-1,1-1s1,0.447,1,1v2C8,7.553,7.553,8,7,8z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/alert-white.svg b/static/images/icons-svg/alert-white.svg new file mode 100644 index 0000000..ff06604 --- /dev/null +++ b/static/images/icons-svg/alert-white.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve"> +<path fill="#FFF" d="M7,0L0,12h14L7,0z M7,11c-0.553,0-1-0.447-1-1s0.447-1,1-1s1,0.447,1,1S7.553,11,7,11z M7,8C6.447,8,6,7.553,6,7V5 + c0-0.553,0.447-1,1-1s1,0.447,1,1v2C8,7.553,7.553,8,7,8z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-d-black.svg b/static/images/icons-svg/arrow-d-black.svg new file mode 100644 index 0000000..7a8b7de --- /dev/null +++ b/static/images/icons-svg/arrow-d-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="9,7 9,0 5,0 5,7 0,7 7,14 14,7 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-d-l-black.svg b/static/images/icons-svg/arrow-d-l-black.svg new file mode 100644 index 0000000..8c8d305 --- /dev/null +++ b/static/images/icons-svg/arrow-d-l-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="14,3 11,0 3.5,7.5 0,4 0,14 10,14 6.5,10.5 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-d-l-white.svg b/static/images/icons-svg/arrow-d-l-white.svg new file mode 100644 index 0000000..f7379cd --- /dev/null +++ b/static/images/icons-svg/arrow-d-l-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="14,3 11,0 3.5,7.5 0,4 0,14 10,14 6.5,10.5 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-d-r-black.svg b/static/images/icons-svg/arrow-d-r-black.svg new file mode 100644 index 0000000..95861e0 --- /dev/null +++ b/static/images/icons-svg/arrow-d-r-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="10.5,7.5 3,0 0,3 7.5,10.5 4,14 14,14 14,4 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-d-r-white.svg b/static/images/icons-svg/arrow-d-r-white.svg new file mode 100644 index 0000000..7874ca8 --- /dev/null +++ b/static/images/icons-svg/arrow-d-r-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="10.5,7.5 3,0 0,3 7.5,10.5 4,14 14,14 14,4 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-d-white.svg b/static/images/icons-svg/arrow-d-white.svg new file mode 100644 index 0000000..f80ad1b --- /dev/null +++ b/static/images/icons-svg/arrow-d-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="9,7 9,0 5,0 5,7 0,7 7,14 14,7 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-l-black.svg b/static/images/icons-svg/arrow-l-black.svg new file mode 100644 index 0000000..0190649 --- /dev/null +++ b/static/images/icons-svg/arrow-l-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="7,5 7,0 0,7 7,14 7,9 14,9 14,5 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-l-white.svg b/static/images/icons-svg/arrow-l-white.svg new file mode 100644 index 0000000..d9de81d --- /dev/null +++ b/static/images/icons-svg/arrow-l-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="7,5 7,0 0,7 7,14 7,9 14,9 14,5 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-r-black.svg b/static/images/icons-svg/arrow-r-black.svg new file mode 100644 index 0000000..7853c5f --- /dev/null +++ b/static/images/icons-svg/arrow-r-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="14,7 7,0 7,5 0,5 0,9 7,9 7,14 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-r-white.svg b/static/images/icons-svg/arrow-r-white.svg new file mode 100644 index 0000000..8c28fc7 --- /dev/null +++ b/static/images/icons-svg/arrow-r-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="14,7 7,0 7,5 0,5 0,9 7,9 7,14 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-u-black.svg b/static/images/icons-svg/arrow-u-black.svg new file mode 100644 index 0000000..abf9d90 --- /dev/null +++ b/static/images/icons-svg/arrow-u-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="7,0 0,7 5,7 5,14 9,14 9,7 14,7 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-u-l-black.svg b/static/images/icons-svg/arrow-u-l-black.svg new file mode 100644 index 0000000..08b5c6d --- /dev/null +++ b/static/images/icons-svg/arrow-u-l-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="14,11 6.5,3.5 10,0 0,0 0,10 3.5,6.5 11,14 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-u-l-white.svg b/static/images/icons-svg/arrow-u-l-white.svg new file mode 100644 index 0000000..234471e --- /dev/null +++ b/static/images/icons-svg/arrow-u-l-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="14,11 6.5,3.5 10,0 0,0 0,10 3.5,6.5 11,14 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-u-r-black.svg b/static/images/icons-svg/arrow-u-r-black.svg new file mode 100644 index 0000000..db1536d --- /dev/null +++ b/static/images/icons-svg/arrow-u-r-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="14,0 4,0 7.5,3.5 0,11 3,14 10.5,6.5 14,10 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-u-r-white.svg b/static/images/icons-svg/arrow-u-r-white.svg new file mode 100644 index 0000000..5a510f2 --- /dev/null +++ b/static/images/icons-svg/arrow-u-r-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="14,0 4,0 7.5,3.5 0,11 3,14 10.5,6.5 14,10 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/arrow-u-white.svg b/static/images/icons-svg/arrow-u-white.svg new file mode 100644 index 0000000..7e2aeb2 --- /dev/null +++ b/static/images/icons-svg/arrow-u-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="7,0 0,7 5,7 5,14 9,14 9,7 14,7 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/audio-black.svg b/static/images/icons-svg/audio-black.svg new file mode 100644 index 0000000..f3651d7 --- /dev/null +++ b/static/images/icons-svg/audio-black.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14.018px" height="14px" viewBox="0 0 14.018 14" style="enable-background:new 0 0 14.018 14;" xml:space="preserve"> +<path d="M1,4C0.447,4,0,4.447,0,5v4c0,0.553,0.447,1,1,1h1l4,4V0L2,4H1z M10.346,7c0-1.699-1.042-3.154-2.546-3.867L6.982,4.68 + C7.885,5.107,8.51,5.98,8.51,7S7.885,8.893,6.982,9.32L7.8,10.867C9.304,10.154,10.346,8.699,10.346,7z M9.447,0.017L8.618,1.586 + C10.723,2.584,12.182,4.621,12.182,7s-1.459,4.416-3.563,5.414l0.829,1.569c2.707-1.283,4.57-3.925,4.57-6.983 + S12.154,1.3,9.447,0.017z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/audio-white.svg b/static/images/icons-svg/audio-white.svg new file mode 100644 index 0000000..a689699 --- /dev/null +++ b/static/images/icons-svg/audio-white.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14.018px" height="14px" viewBox="0 0 14.018 14" style="enable-background:new 0 0 14.018 14;" xml:space="preserve"> +<path fill="#FFF" d="M1,4C0.447,4,0,4.447,0,5v4c0,0.553,0.447,1,1,1h1l4,4V0L2,4H1z M10.346,7c0-1.699-1.042-3.154-2.546-3.867L6.982,4.68 + C7.885,5.107,8.51,5.98,8.51,7S7.885,8.893,6.982,9.32L7.8,10.867C9.304,10.154,10.346,8.699,10.346,7z M9.447,0.017L8.618,1.586 + C10.723,2.584,12.182,4.621,12.182,7s-1.459,4.416-3.563,5.414l0.829,1.569c2.707-1.283,4.57-3.925,4.57-6.983 + S12.154,1.3,9.447,0.017z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/back-black.svg b/static/images/icons-svg/back-black.svg new file mode 100644 index 0000000..d6f928a --- /dev/null +++ b/static/images/icons-svg/back-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve"> +<path d="M4,3V0L0,4l4,4V5c0,0,6,0,6,3s-5,4-5,4v2c0,0,7-1,7-6C12,4,7,3,4,3z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/back-white.svg b/static/images/icons-svg/back-white.svg new file mode 100644 index 0000000..b34d43b --- /dev/null +++ b/static/images/icons-svg/back-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve"> +<path fill="#FFF" d="M4,3V0L0,4l4,4V5c0,0,6,0,6,3s-5,4-5,4v2c0,0,7-1,7-6C12,4,7,3,4,3z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/bars-black.svg b/static/images/icons-svg/bars-black.svg new file mode 100644 index 0000000..1aebe36 --- /dev/null +++ b/static/images/icons-svg/bars-black.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve"> +<path d="M1,2h12c0.553,0,1-0.447,1-1s-0.447-1-1-1H1C0.447,0,0,0.447,0,1S0.447,2,1,2z M13,4H1C0.447,4,0,4.447,0,5s0.447,1,1,1h12 + c0.553,0,1-0.447,1-1S13.553,4,13,4z M13,8H1C0.447,8,0,8.447,0,9s0.447,1,1,1h12c0.553,0,1-0.447,1-1S13.553,8,13,8z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/bars-white.svg b/static/images/icons-svg/bars-white.svg new file mode 100644 index 0000000..98cd320 --- /dev/null +++ b/static/images/icons-svg/bars-white.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve"> +<path fill="#FFF" d="M1,2h12c0.553,0,1-0.447,1-1s-0.447-1-1-1H1C0.447,0,0,0.447,0,1S0.447,2,1,2z M13,4H1C0.447,4,0,4.447,0,5s0.447,1,1,1h12 + c0.553,0,1-0.447,1-1S13.553,4,13,4z M13,8H1C0.447,8,0,8.447,0,9s0.447,1,1,1h12c0.553,0,1-0.447,1-1S13.553,8,13,8z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/bullets-black.svg b/static/images/icons-svg/bullets-black.svg new file mode 100644 index 0000000..3bf9680 --- /dev/null +++ b/static/images/icons-svg/bullets-black.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve"> +<path d="M5,2h8c0.553,0,1-0.447,1-1s-0.447-1-1-1H5C4.447,0,4,0.447,4,1S4.447,2,5,2z M13,4H5C4.447,4,4,4.447,4,5s0.447,1,1,1h8 + c0.553,0,1-0.447,1-1S13.553,4,13,4z M13,8H5C4.447,8,4,8.447,4,9s0.447,1,1,1h8c0.553,0,1-0.447,1-1S13.553,8,13,8z M1,0 + C0.447,0,0,0.447,0,1s0.447,1,1,1s1-0.447,1-1S1.553,0,1,0z M1,4C0.447,4,0,4.447,0,5s0.447,1,1,1s1-0.447,1-1S1.553,4,1,4z M1,8 + C0.447,8,0,8.447,0,9s0.447,1,1,1s1-0.447,1-1S1.553,8,1,8z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/bullets-white.svg b/static/images/icons-svg/bullets-white.svg new file mode 100644 index 0000000..ecc4f95 --- /dev/null +++ b/static/images/icons-svg/bullets-white.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve"> +<path fill="#FFF" d="M5,2h8c0.553,0,1-0.447,1-1s-0.447-1-1-1H5C4.447,0,4,0.447,4,1S4.447,2,5,2z M13,4H5C4.447,4,4,4.447,4,5s0.447,1,1,1h8 + c0.553,0,1-0.447,1-1S13.553,4,13,4z M13,8H5C4.447,8,4,8.447,4,9s0.447,1,1,1h8c0.553,0,1-0.447,1-1S13.553,8,13,8z M1,0 + C0.447,0,0,0.447,0,1s0.447,1,1,1s1-0.447,1-1S1.553,0,1,0z M1,4C0.447,4,0,4.447,0,5s0.447,1,1,1s1-0.447,1-1S1.553,4,1,4z M1,8 + C0.447,8,0,8.447,0,9s0.447,1,1,1s1-0.447,1-1S1.553,8,1,8z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/calendar-black.svg b/static/images/icons-svg/calendar-black.svg new file mode 100644 index 0000000..5c3aede --- /dev/null +++ b/static/images/icons-svg/calendar-black.svg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path d="M0,8h2V6H0V8z M3,8h2V6H3V8z M6,8h2V6H6V8z M9,8h2V6H9V8z M12,8h2V6h-2V8z M0,11h2V9H0V11z M3,11h2V9H3V11z M6,11h2V9H6V11z + M9,11h2V9H9V11z M12,11h2V9h-2V11z M0,14h2v-2H0V14z M3,14h2v-2H3V14z M6,14h2v-2H6V14z M9,14h2v-2H9V14z M12,1 + c0-0.553-0.447-1-1-1s-1,0.447-1,1H4c0-0.553-0.447-1-1-1S2,0.447,2,1H0v4h14V1H12z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/calendar-white.svg b/static/images/icons-svg/calendar-white.svg new file mode 100644 index 0000000..177dab9 --- /dev/null +++ b/static/images/icons-svg/calendar-white.svg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path fill="#FFF" d="M0,8h2V6H0V8z M3,8h2V6H3V8z M6,8h2V6H6V8z M9,8h2V6H9V8z M12,8h2V6h-2V8z M0,11h2V9H0V11z M3,11h2V9H3V11z M6,11h2V9H6V11z + M9,11h2V9H9V11z M12,11h2V9h-2V11z M0,14h2v-2H0V14z M3,14h2v-2H3V14z M6,14h2v-2H6V14z M9,14h2v-2H9V14z M12,1 + c0-0.553-0.447-1-1-1s-1,0.447-1,1H4c0-0.553-0.447-1-1-1S2,0.447,2,1H0v4h14V1H12z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/camera-black.svg b/static/images/icons-svg/camera-black.svg new file mode 100644 index 0000000..865095d --- /dev/null +++ b/static/images/icons-svg/camera-black.svg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="11px" viewBox="0 0 14 11" style="enable-background:new 0 0 14 11;" xml:space="preserve"> +<path d="M12,1H9.908C9.702,0.419,9.152,0,8.5,0h-3C4.848,0,4.298,0.419,4.092,1H2C0.896,1,0,1.896,0,3v6c0,1.104,0.896,2,2,2h10 + c1.104,0,2-0.896,2-2V3C14,1.896,13.104,1,12,1z M7,9C5.343,9,4,7.657,4,6s1.343-3,3-3s3,1.343,3,3S8.657,9,7,9z M7,4 + C5.896,4,5,4.896,5,6s0.896,2,2,2s2-0.896,2-2S8.104,4,7,4z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/camera-white.svg b/static/images/icons-svg/camera-white.svg new file mode 100644 index 0000000..b84265c --- /dev/null +++ b/static/images/icons-svg/camera-white.svg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="11px" viewBox="0 0 14 11" style="enable-background:new 0 0 14 11;" xml:space="preserve"> +<path fill="#FFF" d="M12,1H9.908C9.702,0.419,9.152,0,8.5,0h-3C4.848,0,4.298,0.419,4.092,1H2C0.896,1,0,1.896,0,3v6c0,1.104,0.896,2,2,2h10 + c1.104,0,2-0.896,2-2V3C14,1.896,13.104,1,12,1z M7,9C5.343,9,4,7.657,4,6s1.343-3,3-3s3,1.343,3,3S8.657,9,7,9z M7,4 + C5.896,4,5,4.896,5,6s0.896,2,2,2s2-0.896,2-2S8.104,4,7,4z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/carat-d-black.svg b/static/images/icons-svg/carat-d-black.svg new file mode 100644 index 0000000..b6445a7 --- /dev/null +++ b/static/images/icons-svg/carat-d-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="8px" viewBox="0 0 12 8" style="enable-background:new 0 0 12 8;" xml:space="preserve"> +<polygon points="10,0 6,4 2,0 0,2 6,8 12,2 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/carat-d-white.svg b/static/images/icons-svg/carat-d-white.svg new file mode 100644 index 0000000..4d6d185 --- /dev/null +++ b/static/images/icons-svg/carat-d-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="8px" viewBox="0 0 12 8" style="enable-background:new 0 0 12 8;" xml:space="preserve"> +<polygon fill="#FFF" points="10,0 6,4 2,0 0,2 6,8 12,2 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/carat-l-black.svg b/static/images/icons-svg/carat-l-black.svg new file mode 100644 index 0000000..2c8b91f --- /dev/null +++ b/static/images/icons-svg/carat-l-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="8px" height="12px" viewBox="0 0 8 12" style="enable-background:new 0 0 8 12;" xml:space="preserve"> +<polygon points="8,2 6,0 0,6 6,12 8,10 4,6 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/carat-l-white.svg b/static/images/icons-svg/carat-l-white.svg new file mode 100644 index 0000000..e18f613 --- /dev/null +++ b/static/images/icons-svg/carat-l-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="8px" height="12px" viewBox="0 0 8 12" style="enable-background:new 0 0 8 12;" xml:space="preserve"> +<polygon fill="#FFF" points="8,2 6,0 0,6 6,12 8,10 4,6 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/carat-r-black.svg b/static/images/icons-svg/carat-r-black.svg new file mode 100644 index 0000000..57cf497 --- /dev/null +++ b/static/images/icons-svg/carat-r-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="8px" height="12px" viewBox="0 0 8 12" style="enable-background:new 0 0 8 12;" xml:space="preserve"> +<polygon points="2,0 0,2 4,6 0,10 2,12 8,6 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/carat-r-white.svg b/static/images/icons-svg/carat-r-white.svg new file mode 100644 index 0000000..b034d95 --- /dev/null +++ b/static/images/icons-svg/carat-r-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="8px" height="12px" viewBox="0 0 8 12" style="enable-background:new 0 0 8 12;" xml:space="preserve"> +<polygon fill="#FFF" points="2,0 0,2 4,6 0,10 2,12 8,6 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/carat-u-black.svg b/static/images/icons-svg/carat-u-black.svg new file mode 100644 index 0000000..533a739 --- /dev/null +++ b/static/images/icons-svg/carat-u-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="8px" viewBox="0 0 12 8" style="enable-background:new 0 0 12 8;" xml:space="preserve"> +<polygon points="6,0 0,6 2,8 6,4 10,8 12,6 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/carat-u-white.svg b/static/images/icons-svg/carat-u-white.svg new file mode 100644 index 0000000..670e48b --- /dev/null +++ b/static/images/icons-svg/carat-u-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="8px" viewBox="0 0 12 8" style="enable-background:new 0 0 12 8;" xml:space="preserve"> +<polygon fill="#FFF" points="6,0 0,6 2,8 6,4 10,8 12,6 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/check-black.svg b/static/images/icons-svg/check-black.svg new file mode 100644 index 0000000..db5b715 --- /dev/null +++ b/static/images/icons-svg/check-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve"> +<polygon points="14,3 11,0 5.003,5.997 3,4 0,7 4.966,12 4.983,11.983 5,12 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/check-white.svg b/static/images/icons-svg/check-white.svg new file mode 100644 index 0000000..b257fd7 --- /dev/null +++ b/static/images/icons-svg/check-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve"> +<polygon fill="#FFF" points="14,3 11,0 5.003,5.997 3,4 0,7 4.966,12 4.983,11.983 5,12 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/clock-black.svg b/static/images/icons-svg/clock-black.svg new file mode 100644 index 0000000..c68abef --- /dev/null +++ b/static/images/icons-svg/clock-black.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path d="M7,0C3.134,0,0,3.134,0,7s3.134,7,7,7s7-3.134,7-7S10.866,0,7,0z M7,12c-2.762,0-5-2.238-5-5s2.238-5,5-5s5,2.238,5,5 + S9.762,12,7,12z M9,6H8V4c0-0.553-0.447-1-1-1S6,3.447,6,4v3c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1S9.553,6,9,6z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/clock-white.svg b/static/images/icons-svg/clock-white.svg new file mode 100644 index 0000000..5589238 --- /dev/null +++ b/static/images/icons-svg/clock-white.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path fill="#FFF" d="M7,0C3.134,0,0,3.134,0,7s3.134,7,7,7s7-3.134,7-7S10.866,0,7,0z M7,12c-2.762,0-5-2.238-5-5s2.238-5,5-5s5,2.238,5,5 + S9.762,12,7,12z M9,6H8V4c0-0.553-0.447-1-1-1S6,3.447,6,4v3c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1S9.553,6,9,6z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/cloud-black.svg b/static/images/icons-svg/cloud-black.svg new file mode 100644 index 0000000..6fa55f4 --- /dev/null +++ b/static/images/icons-svg/cloud-black.svg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="9px" viewBox="0 0 14 9" style="enable-background:new 0 0 14 9;" xml:space="preserve"> +<path d="M14,7c0-0.793-0.465-1.472-1.134-1.795C12.949,4.984,13,4.749,13,4.5c0-1.104-0.896-2-2-2c-0.158,0-0.31,0.023-0.457,0.058 + C9.816,1.049,8.286,0,6.5,0C4.17,0,2.276,1.777,2.046,4.046C0.883,4.26,0,5.274,0,6.5C0,7.881,1.119,9,2.5,9h10V8.93 + C13.361,8.706,14,7.931,14,7z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/cloud-white.svg b/static/images/icons-svg/cloud-white.svg new file mode 100644 index 0000000..3e0bde3 --- /dev/null +++ b/static/images/icons-svg/cloud-white.svg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="9px" viewBox="0 0 14 9" style="enable-background:new 0 0 14 9;" xml:space="preserve"> +<path fill="#FFF" d="M14,7c0-0.793-0.465-1.472-1.134-1.795C12.949,4.984,13,4.749,13,4.5c0-1.104-0.896-2-2-2c-0.158,0-0.31,0.023-0.457,0.058 + C9.816,1.049,8.286,0,6.5,0C4.17,0,2.276,1.777,2.046,4.046C0.883,4.26,0,5.274,0,6.5C0,7.881,1.119,9,2.5,9h10V8.93 + C13.361,8.706,14,7.931,14,7z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/comment-black.svg b/static/images/icons-svg/comment-black.svg new file mode 100644 index 0000000..485fcc8 --- /dev/null +++ b/static/images/icons-svg/comment-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path d="M12,0H2C0.896,0,0,0.896,0,2v7c0,1.104,0.896,2,2,2h1v3l3-3h6c1.104,0,2-0.896,2-2V2C14,0.896,13.104,0,12,0z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/comment-white.svg b/static/images/icons-svg/comment-white.svg new file mode 100644 index 0000000..8d188db --- /dev/null +++ b/static/images/icons-svg/comment-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path fill="#FFF" d="M12,0H2C0.896,0,0,0.896,0,2v7c0,1.104,0.896,2,2,2h1v3l3-3h6c1.104,0,2-0.896,2-2V2C14,0.896,13.104,0,12,0z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/delete-black.svg b/static/images/icons-svg/delete-black.svg new file mode 100644 index 0000000..74d9988 --- /dev/null +++ b/static/images/icons-svg/delete-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="14,3 11,0 7,4 3,0 0,3 4,7 0,11 3,14 7,10 11,14 14,11 10,7 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/delete-white.svg b/static/images/icons-svg/delete-white.svg new file mode 100644 index 0000000..a6cc735 --- /dev/null +++ b/static/images/icons-svg/delete-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="14,3 11,0 7,4 3,0 0,3 4,7 0,11 3,14 7,10 11,14 14,11 10,7 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/edit-black.svg b/static/images/icons-svg/edit-black.svg new file mode 100644 index 0000000..d908f9d --- /dev/null +++ b/static/images/icons-svg/edit-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path d="M1,10l-1,4l4-1l7-7L8,3L1,10z M11,0L9,2l3,3l2-2L11,0z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/edit-white.svg b/static/images/icons-svg/edit-white.svg new file mode 100644 index 0000000..a88643d --- /dev/null +++ b/static/images/icons-svg/edit-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path fill="#FFF" d="M1,10l-1,4l4-1l7-7L8,3L1,10z M11,0L9,2l3,3l2-2L11,0z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/eye-black.svg b/static/images/icons-svg/eye-black.svg new file mode 100644 index 0000000..7f96a8e --- /dev/null +++ b/static/images/icons-svg/eye-black.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve"> +<path d="M7,0C3,0,0,5,0,5s3,5,7,5s7-5,7-5S11,0,7,0z M7,8C5.343,8,4,6.657,4,5s1.343-3,3-3s3,1.343,3,3S8.657,8,7,8z M7,4 + C6.448,4,6,4.447,6,5s0.448,1,1,1s1-0.447,1-1S7.552,4,7,4z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/eye-white.svg b/static/images/icons-svg/eye-white.svg new file mode 100644 index 0000000..7b0d0e8 --- /dev/null +++ b/static/images/icons-svg/eye-white.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve"> +<path fill="#FFF" d="M7,0C3,0,0,5,0,5s3,5,7,5s7-5,7-5S11,0,7,0z M7,8C5.343,8,4,6.657,4,5s1.343-3,3-3s3,1.343,3,3S8.657,8,7,8z M7,4 + C6.448,4,6,4.447,6,5s0.448,1,1,1s1-0.447,1-1S7.552,4,7,4z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/forbidden-black.svg b/static/images/icons-svg/forbidden-black.svg new file mode 100644 index 0000000..fe831bc --- /dev/null +++ b/static/images/icons-svg/forbidden-black.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path d="M12.601,11.187C13.476,10.018,14,8.572,14,7c0-3.866-3.134-7-7-7C5.428,0,3.982,0.524,2.813,1.399L2.757,1.343L2.053,2.048 + L2.048,2.053L1.343,2.758l0.056,0.056C0.524,3.982,0,5.428,0,7c0,3.866,3.134,7,7,7c1.572,0,3.018-0.524,4.187-1.399l0.056,0.057 + l0.705-0.705l0.005-0.005l0.705-0.705L12.601,11.187z M7,2c2.761,0,5,2.238,5,5c0,1.019-0.308,1.964-0.832,2.754L4.246,2.832 + C5.036,2.308,5.981,2,7,2z M7,12c-2.761,0-5-2.238-5-5c0-1.019,0.308-1.964,0.832-2.754l6.922,6.922C8.964,11.692,8.019,12,7,12z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/forbidden-white.svg b/static/images/icons-svg/forbidden-white.svg new file mode 100644 index 0000000..710ac39 --- /dev/null +++ b/static/images/icons-svg/forbidden-white.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path fill="#FFF" d="M12.601,11.187C13.476,10.018,14,8.572,14,7c0-3.866-3.134-7-7-7C5.428,0,3.982,0.524,2.813,1.399L2.757,1.343L2.053,2.048 + L2.048,2.053L1.343,2.758l0.056,0.056C0.524,3.982,0,5.428,0,7c0,3.866,3.134,7,7,7c1.572,0,3.018-0.524,4.187-1.399l0.056,0.057 + l0.705-0.705l0.005-0.005l0.705-0.705L12.601,11.187z M7,2c2.761,0,5,2.238,5,5c0,1.019-0.308,1.964-0.832,2.754L4.246,2.832 + C5.036,2.308,5.981,2,7,2z M7,12c-2.761,0-5-2.238-5-5c0-1.019,0.308-1.964,0.832-2.754l6.922,6.922C8.964,11.692,8.019,12,7,12z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/forward-black.svg b/static/images/icons-svg/forward-black.svg new file mode 100644 index 0000000..35af7b6 --- /dev/null +++ b/static/images/icons-svg/forward-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve"> +<path d="M12,4L8,0v3C5,3,0,4,0,8c0,5,7,6,7,6v-2c0,0-5-1-5-4s6-3,6-3v3L12,4z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/forward-white.svg b/static/images/icons-svg/forward-white.svg new file mode 100644 index 0000000..5cd2def --- /dev/null +++ b/static/images/icons-svg/forward-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve"> +<path fill="#FFF" d="M12,4L8,0v3C5,3,0,4,0,8c0,5,7,6,7,6v-2c0,0-5-1-5-4s6-3,6-3v3L12,4z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/gear-black.svg b/static/images/icons-svg/gear-black.svg new file mode 100644 index 0000000..4f397c5 --- /dev/null +++ b/static/images/icons-svg/gear-black.svg @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path d="M13.621,5.904l-1.036-0.259c-0.168-0.042-0.303-0.168-0.355-0.332c-0.092-0.284-0.205-0.559-0.339-0.82 + c-0.079-0.153-0.073-0.337,0.017-0.486l0.549-0.915c0.118-0.196,0.088-0.448-0.075-0.61l-0.862-0.863 + c-0.162-0.163-0.414-0.193-0.611-0.075l-0.916,0.55C9.844,2.182,9.659,2.188,9.506,2.109C9.244,1.975,8.97,1.861,8.686,1.77 + c-0.165-0.052-0.29-0.187-0.332-0.354L8.095,0.379C8.039,0.156,7.839,0,7.609,0H6.391c-0.229,0-0.43,0.156-0.485,0.379L5.646,1.415 + C5.604,1.582,5.479,1.718,5.313,1.77c-0.284,0.092-0.559,0.206-0.82,0.34C4.339,2.188,4.155,2.182,4.007,2.093L3.092,1.544 + c-0.196-0.118-0.448-0.087-0.61,0.075L1.619,2.481C1.457,2.644,1.426,2.896,1.544,3.093l0.549,0.914 + c0.089,0.148,0.095,0.332,0.017,0.486C1.975,4.755,1.861,5.029,1.77,5.314c-0.053,0.164-0.188,0.29-0.354,0.332L0.379,5.905 + C0.156,5.961,0,6.161,0,6.391v1.219c0,0.229,0.156,0.43,0.379,0.485l1.036,0.26C1.582,8.396,1.717,8.521,1.77,8.687 + c0.092,0.284,0.205,0.559,0.34,0.82C2.188,9.66,2.182,9.844,2.093,9.993l-0.549,0.915c-0.118,0.195-0.087,0.448,0.075,0.61 + l0.862,0.862c0.162,0.163,0.414,0.193,0.61,0.075l0.915-0.549c0.148-0.089,0.332-0.095,0.486-0.017 + c0.262,0.135,0.536,0.248,0.82,0.34c0.165,0.053,0.291,0.187,0.332,0.354l0.259,1.036C5.96,13.844,6.16,14,6.39,14h1.22 + c0.229,0,0.43-0.156,0.485-0.379l0.259-1.036c0.042-0.167,0.168-0.302,0.333-0.354c0.284-0.092,0.559-0.205,0.82-0.34 + c0.154-0.078,0.338-0.072,0.486,0.017l0.914,0.549c0.197,0.118,0.449,0.088,0.611-0.074l0.862-0.863 + c0.163-0.162,0.193-0.415,0.075-0.611l-0.549-0.915c-0.089-0.148-0.096-0.332-0.017-0.485c0.134-0.263,0.248-0.536,0.339-0.82 + c0.053-0.165,0.188-0.291,0.355-0.333l1.036-0.259C13.844,8.039,14,7.839,14,7.609V6.39C14,6.16,13.844,5.96,13.621,5.904z M7,10 + c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S8.657,10,7,10z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/gear-white.svg b/static/images/icons-svg/gear-white.svg new file mode 100644 index 0000000..3a5668f --- /dev/null +++ b/static/images/icons-svg/gear-white.svg @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path fill="#FFF" d="M13.621,5.904l-1.036-0.259c-0.168-0.042-0.303-0.168-0.355-0.332c-0.092-0.284-0.205-0.559-0.339-0.82 + c-0.079-0.153-0.073-0.337,0.017-0.486l0.549-0.915c0.118-0.196,0.088-0.448-0.075-0.61l-0.862-0.863 + c-0.162-0.163-0.414-0.193-0.611-0.075l-0.916,0.55C9.844,2.182,9.659,2.188,9.506,2.109C9.244,1.975,8.97,1.861,8.686,1.77 + c-0.165-0.052-0.29-0.187-0.332-0.354L8.095,0.379C8.039,0.156,7.839,0,7.609,0H6.391c-0.229,0-0.43,0.156-0.485,0.379L5.646,1.415 + C5.604,1.582,5.479,1.718,5.313,1.77c-0.284,0.092-0.559,0.206-0.82,0.34C4.339,2.188,4.155,2.182,4.007,2.093L3.092,1.544 + c-0.196-0.118-0.448-0.087-0.61,0.075L1.619,2.481C1.457,2.644,1.426,2.896,1.544,3.093l0.549,0.914 + c0.089,0.148,0.095,0.332,0.017,0.486C1.975,4.755,1.861,5.029,1.77,5.314c-0.053,0.164-0.188,0.29-0.354,0.332L0.379,5.905 + C0.156,5.961,0,6.161,0,6.391v1.219c0,0.229,0.156,0.43,0.379,0.485l1.036,0.26C1.582,8.396,1.717,8.521,1.77,8.687 + c0.092,0.284,0.205,0.559,0.34,0.82C2.188,9.66,2.182,9.844,2.093,9.993l-0.549,0.915c-0.118,0.195-0.087,0.448,0.075,0.61 + l0.862,0.862c0.162,0.163,0.414,0.193,0.61,0.075l0.915-0.549c0.148-0.089,0.332-0.095,0.486-0.017 + c0.262,0.135,0.536,0.248,0.82,0.34c0.165,0.053,0.291,0.187,0.332,0.354l0.259,1.036C5.96,13.844,6.16,14,6.39,14h1.22 + c0.229,0,0.43-0.156,0.485-0.379l0.259-1.036c0.042-0.167,0.168-0.302,0.333-0.354c0.284-0.092,0.559-0.205,0.82-0.34 + c0.154-0.078,0.338-0.072,0.486,0.017l0.914,0.549c0.197,0.118,0.449,0.088,0.611-0.074l0.862-0.863 + c0.163-0.162,0.193-0.415,0.075-0.611l-0.549-0.915c-0.089-0.148-0.096-0.332-0.017-0.485c0.134-0.263,0.248-0.536,0.339-0.82 + c0.053-0.165,0.188-0.291,0.355-0.333l1.036-0.259C13.844,8.039,14,7.839,14,7.609V6.39C14,6.16,13.844,5.96,13.621,5.904z M7,10 + c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S8.657,10,7,10z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/grid-black.svg b/static/images/icons-svg/grid-black.svg new file mode 100644 index 0000000..e692e1f --- /dev/null +++ b/static/images/icons-svg/grid-black.svg @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path d="M3,0H1C0.447,0,0,0.447,0,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C4,0.447,3.553,0,3,0z M8,0H6 + C5.447,0,5,0.447,5,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C9,0.447,8.553,0,8,0z M13,0h-2c-0.553,0-1,0.447-1,1v2 + c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C14,0.447,13.553,0,13,0z M3,5H1C0.447,5,0,5.447,0,6v2c0,0.553,0.447,1,1,1h2 + c0.553,0,1-0.447,1-1V6C4,5.447,3.553,5,3,5z M8,5H6C5.447,5,5,5.447,5,6v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V6 + C9,5.447,8.553,5,8,5z M13,5h-2c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V6C14,5.447,13.553,5,13,5z M3,10 + H1c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1v-2C4,10.447,3.553,10,3,10z M8,10H6c-0.553,0-1,0.447-1,1v2 + c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1v-2C9,10.447,8.553,10,8,10z M13,10h-2c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2 + c0.553,0,1-0.447,1-1v-2C14,10.447,13.553,10,13,10z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/grid-white.svg b/static/images/icons-svg/grid-white.svg new file mode 100644 index 0000000..5cfaa7c --- /dev/null +++ b/static/images/icons-svg/grid-white.svg @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path fill="#FFF" d="M3,0H1C0.447,0,0,0.447,0,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C4,0.447,3.553,0,3,0z M8,0H6 + C5.447,0,5,0.447,5,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C9,0.447,8.553,0,8,0z M13,0h-2c-0.553,0-1,0.447-1,1v2 + c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C14,0.447,13.553,0,13,0z M3,5H1C0.447,5,0,5.447,0,6v2c0,0.553,0.447,1,1,1h2 + c0.553,0,1-0.447,1-1V6C4,5.447,3.553,5,3,5z M8,5H6C5.447,5,5,5.447,5,6v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V6 + C9,5.447,8.553,5,8,5z M13,5h-2c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V6C14,5.447,13.553,5,13,5z M3,10 + H1c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1v-2C4,10.447,3.553,10,3,10z M8,10H6c-0.553,0-1,0.447-1,1v2 + c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1v-2C9,10.447,8.553,10,8,10z M13,10h-2c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2 + c0.553,0,1-0.447,1-1v-2C14,10.447,13.553,10,13,10z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/heart-black.svg b/static/images/icons-svg/heart-black.svg new file mode 100644 index 0000000..77373d5 --- /dev/null +++ b/static/images/icons-svg/heart-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="13.744px" viewBox="0 0 14 13.744" style="enable-background:new 0 0 14 13.744;" xml:space="preserve"> +<path d="M7,1.744c-2-3-7-2-7,2c0,3,4,7,4,7s2.417,2.479,3,3c0.583-0.521,3-3,3-3s4-4,4-7C14-0.256,9-1.256,7,1.744z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/heart-white.svg b/static/images/icons-svg/heart-white.svg new file mode 100644 index 0000000..48fd304 --- /dev/null +++ b/static/images/icons-svg/heart-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="13.744px" viewBox="0 0 14 13.744" style="enable-background:new 0 0 14 13.744;" xml:space="preserve"> +<path fill="#FFF" d="M7,1.744c-2-3-7-2-7,2c0,3,4,7,4,7s2.417,2.479,3,3c0.583-0.521,3-3,3-3s4-4,4-7C14-0.256,9-1.256,7,1.744z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/home-black.svg b/static/images/icons-svg/home-black.svg new file mode 100644 index 0000000..a4950a3 --- /dev/null +++ b/static/images/icons-svg/home-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="7,0 0,7 2,7 2,14 5,14 5,9 9,9 9,14 12,14 12,7 14,7 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/home-white.svg b/static/images/icons-svg/home-white.svg new file mode 100644 index 0000000..b7c1a61 --- /dev/null +++ b/static/images/icons-svg/home-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="7,0 0,7 2,7 2,14 5,14 5,9 9,9 9,14 12,14 12,7 14,7 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/info-black.svg b/static/images/icons-svg/info-black.svg new file mode 100644 index 0000000..151cfa2 --- /dev/null +++ b/static/images/icons-svg/info-black.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path d="M7,0C3.134,0,0,3.134,0,7s3.134,7,7,7s7-3.134,7-7S10.866,0,7,0z M7,2c0.552,0,1,0.447,1,1S7.552,4,7,4S6,3.553,6,3 + S6.448,2,7,2z M9,11H5v-1h1V6H5V5h3v5h1V11z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/info-white.svg b/static/images/icons-svg/info-white.svg new file mode 100644 index 0000000..dd0f885 --- /dev/null +++ b/static/images/icons-svg/info-white.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path fill="#FFF" d="M7,0C3.134,0,0,3.134,0,7s3.134,7,7,7s7-3.134,7-7S10.866,0,7,0z M7,2c0.552,0,1,0.447,1,1S7.552,4,7,4S6,3.553,6,3 + S6.448,2,7,2z M9,11H5v-1h1V6H5V5h3v5h1V11z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/location-black.svg b/static/images/icons-svg/location-black.svg new file mode 100644 index 0000000..16a59b8 --- /dev/null +++ b/static/images/icons-svg/location-black.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="8px" height="14px" viewBox="0 0 8 14" style="enable-background:new 0 0 8 14;" xml:space="preserve"> +<path d="M4,0C1.791,0,0,1.791,0,4c0,2,4,10,4,10S8,6,8,4C8,1.791,6.209,0,4,0z M4,6C2.896,6,2,5.104,2,4s0.896-2,2-2s2,0.896,2,2 + S5.104,6,4,6z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/location-white.svg b/static/images/icons-svg/location-white.svg new file mode 100644 index 0000000..ce48397 --- /dev/null +++ b/static/images/icons-svg/location-white.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="8px" height="14px" viewBox="0 0 8 14" style="enable-background:new 0 0 8 14;" xml:space="preserve"> +<path fill="#FFF" d="M4,0C1.791,0,0,1.791,0,4c0,2,4,10,4,10S8,6,8,4C8,1.791,6.209,0,4,0z M4,6C2.896,6,2,5.104,2,4s0.896-2,2-2s2,0.896,2,2 + S5.104,6,4,6z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/lock-black.svg b/static/images/icons-svg/lock-black.svg new file mode 100644 index 0000000..deb3d48 --- /dev/null +++ b/static/images/icons-svg/lock-black.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve"> +<path d="M11,6V5c0-2.762-2.239-5-5-5S1,2.238,1,5v1H0v8h12V6H11z M6.5,9.847V12h-1V9.847C5.207,9.673,5,9.366,5,9 + c0-0.553,0.448-1,1-1s1,0.447,1,1C7,9.366,6.793,9.673,6.5,9.847z M9,6H3V5c0-1.657,1.343-3,3-3s3,1.343,3,3V6z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/lock-white.svg b/static/images/icons-svg/lock-white.svg new file mode 100644 index 0000000..543cfbb --- /dev/null +++ b/static/images/icons-svg/lock-white.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve"> +<path fill="#FFF" d="M11,6V5c0-2.762-2.239-5-5-5S1,2.238,1,5v1H0v8h12V6H11z M6.5,9.847V12h-1V9.847C5.207,9.673,5,9.366,5,9 + c0-0.553,0.448-1,1-1s1,0.447,1,1C7,9.366,6.793,9.673,6.5,9.847z M9,6H3V5c0-1.657,1.343-3,3-3s3,1.343,3,3V6z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/mail-black.svg b/static/images/icons-svg/mail-black.svg new file mode 100644 index 0000000..827e298 --- /dev/null +++ b/static/images/icons-svg/mail-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve"> +<path d="M0,1.75V10h14V1.75L7,7L0,1.75z M14,0H0l7,5L14,0z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/mail-white.svg b/static/images/icons-svg/mail-white.svg new file mode 100644 index 0000000..2f0b717 --- /dev/null +++ b/static/images/icons-svg/mail-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve"> +<path fill="#FFF" d="M0,1.75V10h14V1.75L7,7L0,1.75z M14,0H0l7,5L14,0z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/minus-black.svg b/static/images/icons-svg/minus-black.svg new file mode 100644 index 0000000..cd8aec9 --- /dev/null +++ b/static/images/icons-svg/minus-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="4px" viewBox="0 0 14 4" style="enable-background:new 0 0 14 4;" xml:space="preserve"> +<rect width="14" height="4"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/minus-white.svg b/static/images/icons-svg/minus-white.svg new file mode 100644 index 0000000..1e33c63 --- /dev/null +++ b/static/images/icons-svg/minus-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="4px" viewBox="0 0 14 4" style="enable-background:new 0 0 14 4;" xml:space="preserve"> +<rect fill="#FFF" width="14" height="4"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/navigation-black.svg b/static/images/icons-svg/navigation-black.svg new file mode 100644 index 0000000..a09c35e --- /dev/null +++ b/static/images/icons-svg/navigation-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="14,0 0,6 8,6 8,14 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/navigation-white.svg b/static/images/icons-svg/navigation-white.svg new file mode 100644 index 0000000..38e99c3 --- /dev/null +++ b/static/images/icons-svg/navigation-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="14,0 0,6 8,6 8,14 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/phone-black.svg b/static/images/icons-svg/phone-black.svg new file mode 100644 index 0000000..4879050 --- /dev/null +++ b/static/images/icons-svg/phone-black.svg @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="13.979px" height="14.016px" viewBox="0 0 13.979 14.016" style="enable-background:new 0 0 13.979 14.016;" + xml:space="preserve"> +<path d="M6.939,9.189C6.165,8.557,5.271,7.705,4.497,6.744C3.953,6.071,3.473,5.363,3.969,4.866l-3.482-3.48 + C-0.021,2.02-1.146,5.04,3.675,9.984c5.08,5.211,8.356,4.096,8.92,3.51l-3.396-3.4C8.725,10.568,8.113,10.146,6.939,9.189z + M13.82,11.519v-0.004c0,0-2.649-2.646-2.65-2.648c-0.21-0.21-0.546-0.205-0.754,0.002L9.455,9.831l3.404,3.408 + c0,0,0.962-0.96,0.961-0.961l0.002-0.001C14.043,12.056,14.021,11.721,13.82,11.519z M5.192,3.644V3.642 + c0.221-0.222,0.2-0.557,0-0.758V2.881c0,0-2.726-2.724-2.727-2.725C2.255-0.055,1.92-0.05,1.712,0.157L0.751,1.121l3.48,3.483 + C4.231,4.604,5.192,3.645,5.192,3.644z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/phone-white.svg b/static/images/icons-svg/phone-white.svg new file mode 100644 index 0000000..d180382 --- /dev/null +++ b/static/images/icons-svg/phone-white.svg @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="13.979px" height="14.016px" viewBox="0 0 13.979 14.016" style="enable-background:new 0 0 13.979 14.016;" + xml:space="preserve"> +<path fill="#FFF" d="M6.939,9.189C6.165,8.557,5.271,7.705,4.497,6.744C3.953,6.071,3.473,5.363,3.969,4.866l-3.482-3.48 + C-0.021,2.02-1.146,5.04,3.675,9.984c5.08,5.211,8.356,4.096,8.92,3.51l-3.396-3.4C8.725,10.568,8.113,10.146,6.939,9.189z + M13.82,11.519v-0.004c0,0-2.649-2.646-2.65-2.648c-0.21-0.21-0.546-0.205-0.754,0.002L9.455,9.831l3.404,3.408 + c0,0,0.962-0.96,0.961-0.961l0.002-0.001C14.043,12.056,14.021,11.721,13.82,11.519z M5.192,3.644V3.642 + c0.221-0.222,0.2-0.557,0-0.758V2.881c0,0-2.726-2.724-2.727-2.725C2.255-0.055,1.92-0.05,1.712,0.157L0.751,1.121l3.48,3.483 + C4.231,4.604,5.192,3.645,5.192,3.644z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/plus-black.svg b/static/images/icons-svg/plus-black.svg new file mode 100644 index 0000000..2e268b0 --- /dev/null +++ b/static/images/icons-svg/plus-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon points="14,5 9,5 9,0 5,0 5,5 0,5 0,9 5,9 5,14 9,14 9,9 14,9 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/plus-white.svg b/static/images/icons-svg/plus-white.svg new file mode 100644 index 0000000..488129f --- /dev/null +++ b/static/images/icons-svg/plus-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<polygon fill="#FFF" points="14,5 9,5 9,0 5,0 5,5 0,5 0,9 5,9 5,14 9,14 9,9 14,9 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/power-black.svg b/static/images/icons-svg/power-black.svg new file mode 100644 index 0000000..c078e27 --- /dev/null +++ b/static/images/icons-svg/power-black.svg @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="13.896px" viewBox="0 0 12 13.896" style="enable-background:new 0 0 12 13.896;" xml:space="preserve"> +<path d="M10.243,3.356c-0.392-0.401-1.024-0.401-1.415,0c-0.39,0.402-0.39,1.054,0,1.455C9.584,5.59,10,6.623,10,7.722 + c0,1.1-0.416,2.133-1.172,2.911c-1.511,1.556-4.145,1.556-5.656,0C2.416,9.854,2,8.821,2,7.722c0-1.099,0.416-2.132,1.172-2.91 + c0.39-0.401,0.39-1.053,0-1.455c-0.391-0.401-1.024-0.401-1.415,0C0.624,4.522,0,6.073,0,7.722c0,1.649,0.624,3.2,1.757,4.366 + C2.891,13.254,4.397,13.896,6,13.896s3.109-0.643,4.243-1.809C11.376,10.922,12,9.371,12,7.722C12,6.073,11.376,4.522,10.243,3.356z + M6,8c0.553,0,1-0.447,1-1V1c0-0.553-0.447-1-1-1S5,0.447,5,1v6C5,7.553,5.447,8,6,8z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/power-white.svg b/static/images/icons-svg/power-white.svg new file mode 100644 index 0000000..aa5a7a1 --- /dev/null +++ b/static/images/icons-svg/power-white.svg @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="13.896px" viewBox="0 0 12 13.896" style="enable-background:new 0 0 12 13.896;" xml:space="preserve"> +<path fill="#FFF" d="M10.243,3.356c-0.392-0.401-1.024-0.401-1.415,0c-0.39,0.402-0.39,1.054,0,1.455C9.584,5.59,10,6.623,10,7.722 + c0,1.1-0.416,2.133-1.172,2.911c-1.511,1.556-4.145,1.556-5.656,0C2.416,9.854,2,8.821,2,7.722c0-1.099,0.416-2.132,1.172-2.91 + c0.39-0.401,0.39-1.053,0-1.455c-0.391-0.401-1.024-0.401-1.415,0C0.624,4.522,0,6.073,0,7.722c0,1.649,0.624,3.2,1.757,4.366 + C2.891,13.254,4.397,13.896,6,13.896s3.109-0.643,4.243-1.809C11.376,10.922,12,9.371,12,7.722C12,6.073,11.376,4.522,10.243,3.356z + M6,8c0.553,0,1-0.447,1-1V1c0-0.553-0.447-1-1-1S5,0.447,5,1v6C5,7.553,5.447,8,6,8z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/recycle-black.svg b/static/images/icons-svg/recycle-black.svg new file mode 100644 index 0000000..c481e29 --- /dev/null +++ b/static/images/icons-svg/recycle-black.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve"> +<path d="M3,6h1L2,3L0,6h1c0,3.313,2.687,6,6,6c0.702,0,1.374-0.127,2-0.349V9.445C8.41,9.789,7.732,10,7,10C4.791,10,3,8.209,3,6z + M13,6c0-3.313-2.687-6-6-6C6.298,0,5.626,0.127,5,0.349v2.206C5.59,2.211,6.268,2,7,2c2.209,0,4,1.791,4,4h-1l2,3l2-3H13z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/recycle-white.svg b/static/images/icons-svg/recycle-white.svg new file mode 100644 index 0000000..11b9c12 --- /dev/null +++ b/static/images/icons-svg/recycle-white.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve"> +<path fill="#FFF" d="M3,6h1L2,3L0,6h1c0,3.313,2.687,6,6,6c0.702,0,1.374-0.127,2-0.349V9.445C8.41,9.789,7.732,10,7,10C4.791,10,3,8.209,3,6z + M13,6c0-3.313-2.687-6-6-6C6.298,0,5.626,0.127,5,0.349v2.206C5.59,2.211,6.268,2,7,2c2.209,0,4,1.791,4,4h-1l2,3l2-3H13z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/refresh-black.svg b/static/images/icons-svg/refresh-black.svg new file mode 100644 index 0000000..16c978c --- /dev/null +++ b/static/images/icons-svg/refresh-black.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14.001px" height="14.002px" viewBox="0 0 14.001 14.002" style="enable-background:new 0 0 14.001 14.002;" + xml:space="preserve"> +<path d="M14.001,6.001v-6l-2.06,2.06c-0.423-0.424-0.897-0.809-1.44-1.122C7.153-0.994,2.872,0.153,0.939,3.501 + c-1.933,3.348-0.786,7.629,2.562,9.562c3.348,1.933,7.629,0.785,9.562-2.562l-1.732-1c-1.381,2.392-4.438,3.211-6.83,1.83 + s-3.211-4.438-1.83-6.83s4.438-3.211,6.83-1.83c0.389,0.225,0.718,0.506,1.02,0.81l-2.52,2.52H14.001z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/refresh-white.svg b/static/images/icons-svg/refresh-white.svg new file mode 100644 index 0000000..fa370e6 --- /dev/null +++ b/static/images/icons-svg/refresh-white.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14.001px" height="14.002px" viewBox="0 0 14.001 14.002" style="enable-background:new 0 0 14.001 14.002;" + xml:space="preserve"> +<path fill="#FFF" d="M14.001,6.001v-6l-2.06,2.06c-0.423-0.424-0.897-0.809-1.44-1.122C7.153-0.994,2.872,0.153,0.939,3.501 + c-1.933,3.348-0.786,7.629,2.562,9.562c3.348,1.933,7.629,0.785,9.562-2.562l-1.732-1c-1.381,2.392-4.438,3.211-6.83,1.83 + s-3.211-4.438-1.83-6.83s4.438-3.211,6.83-1.83c0.389,0.225,0.718,0.506,1.02,0.81l-2.52,2.52H14.001z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/search-black.svg b/static/images/icons-svg/search-black.svg new file mode 100644 index 0000000..2b9e863 --- /dev/null +++ b/static/images/icons-svg/search-black.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="13.701px" height="13.721px" viewBox="0 0 13.701 13.721" style="enable-background:new 0 0 13.701 13.721;" + xml:space="preserve"> +<path d="M10.021,8.626C10.638,7.738,11,6.662,11,5.5C11,2.463,8.537,0,5.5,0S0,2.463,0,5.5S2.463,11,5.5,11 + c1.152,0,2.221-0.356,3.105-0.962l3.682,3.683l1.414-1.414L10.021,8.626z M5.5,9C3.567,9,2,7.433,2,5.5S3.567,2,5.5,2S9,3.567,9,5.5 + S7.433,9,5.5,9z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/search-white.svg b/static/images/icons-svg/search-white.svg new file mode 100644 index 0000000..01ccc7c --- /dev/null +++ b/static/images/icons-svg/search-white.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="13.701px" height="13.721px" viewBox="0 0 13.701 13.721" style="enable-background:new 0 0 13.701 13.721;" + xml:space="preserve"> +<path fill="#FFF" d="M10.021,8.626C10.638,7.738,11,6.662,11,5.5C11,2.463,8.537,0,5.5,0S0,2.463,0,5.5S2.463,11,5.5,11 + c1.152,0,2.221-0.356,3.105-0.962l3.682,3.683l1.414-1.414L10.021,8.626z M5.5,9C3.567,9,2,7.433,2,5.5S3.567,2,5.5,2S9,3.567,9,5.5 + S7.433,9,5.5,9z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/shop-black.svg b/static/images/icons-svg/shop-black.svg new file mode 100644 index 0000000..9e1bd39 --- /dev/null +++ b/static/images/icons-svg/shop-black.svg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve"> +<path d="M9,4V3c0-1.657-1.343-3-3-3S3,1.343,3,3v1H0v10h12V4H9z M3.5,6C3.224,6,3,5.776,3,5.5S3.224,5,3.5,5S4,5.224,4,5.5 + S3.776,6,3.5,6z M4,3c0-1.104,0.896-2,2-2s2,0.896,2,2v1H4V3z M8.5,6C8.224,6,8,5.776,8,5.5S8.224,5,8.5,5S9,5.224,9,5.5 + S8.776,6,8.5,6z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/shop-white.svg b/static/images/icons-svg/shop-white.svg new file mode 100644 index 0000000..b98cb4b --- /dev/null +++ b/static/images/icons-svg/shop-white.svg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve"> +<path fill="#FFF" d="M9,4V3c0-1.657-1.343-3-3-3S3,1.343,3,3v1H0v10h12V4H9z M3.5,6C3.224,6,3,5.776,3,5.5S3.224,5,3.5,5S4,5.224,4,5.5 + S3.776,6,3.5,6z M4,3c0-1.104,0.896-2,2-2s2,0.896,2,2v1H4V3z M8.5,6C8.224,6,8,5.776,8,5.5S8.224,5,8.5,5S9,5.224,9,5.5 + S8.776,6,8.5,6z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/star-black.svg b/static/images/icons-svg/star-black.svg new file mode 100644 index 0000000..f2c1afe --- /dev/null +++ b/static/images/icons-svg/star-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="13px" viewBox="0 0 14 13" style="enable-background:new 0 0 14 13;" xml:space="preserve"> +<polygon points="14,5 9,5 7,0 5,5 0,5 4,8 2.625,13 7,10 11.375,13 10,8 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/star-white.svg b/static/images/icons-svg/star-white.svg new file mode 100644 index 0000000..d15188e --- /dev/null +++ b/static/images/icons-svg/star-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="13px" viewBox="0 0 14 13" style="enable-background:new 0 0 14 13;" xml:space="preserve"> +<polygon fill="#FFF" points="14,5 9,5 7,0 5,5 0,5 4,8 2.625,13 7,10 11.375,13 10,8 "/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/tag-black.svg b/static/images/icons-svg/tag-black.svg new file mode 100644 index 0000000..bd11ae6 --- /dev/null +++ b/static/images/icons-svg/tag-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path d="M5,0H0v5l9,9l5-5L5,0z M3,4C2.447,4,2,3.553,2,3s0.447-1,1-1s1,0.447,1,1S3.553,4,3,4z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/tag-white.svg b/static/images/icons-svg/tag-white.svg new file mode 100644 index 0000000..7cd4a50 --- /dev/null +++ b/static/images/icons-svg/tag-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path fill="#FFF" d="M5,0H0v5l9,9l5-5L5,0z M3,4C2.447,4,2,3.553,2,3s0.447-1,1-1s1,0.447,1,1S3.553,4,3,4z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/user-black.svg b/static/images/icons-svg/user-black.svg new file mode 100644 index 0000000..7530c98 --- /dev/null +++ b/static/images/icons-svg/user-black.svg @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path d="M8.851,10.101c-0.18-0.399-0.2-0.763-0.153-1.104C9.383,8.49,9.738,7.621,9.891,6.465C10.493,6.355,10.5,5.967,10.5,5.5 + c0-0.437-0.008-0.804-0.502-0.94C9.999,4.539,10,4.521,10,4.5c0-2.103-1-4-2-4C8,0.5,7.5,0,6.5,0C5,0,4,1.877,4,4.5 + c0,0.021,0.001,0.039,0.002,0.06C3.508,4.696,3.5,5.063,3.5,5.5c0,0.467,0.007,0.855,0.609,0.965 + C4.262,7.621,4.617,8.49,5.303,8.997c0.047,0.341,0.026,0.704-0.153,1.104C1.503,10.503,0,12,0,12v2h14v-2 + C14,12,12.497,10.503,8.851,10.101z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/user-white.svg b/static/images/icons-svg/user-white.svg new file mode 100644 index 0000000..5528c2e --- /dev/null +++ b/static/images/icons-svg/user-white.svg @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve"> +<path fill="#FFF" d="M8.851,10.101c-0.18-0.399-0.2-0.763-0.153-1.104C9.383,8.49,9.738,7.621,9.891,6.465C10.493,6.355,10.5,5.967,10.5,5.5 + c0-0.437-0.008-0.804-0.502-0.94C9.999,4.539,10,4.521,10,4.5c0-2.103-1-4-2-4C8,0.5,7.5,0,6.5,0C5,0,4,1.877,4,4.5 + c0,0.021,0.001,0.039,0.002,0.06C3.508,4.696,3.5,5.063,3.5,5.5c0,0.467,0.007,0.855,0.609,0.965 + C4.262,7.621,4.617,8.49,5.303,8.997c0.047,0.341,0.026,0.704-0.153,1.104C1.503,10.503,0,12,0,12v2h14v-2 + C14,12,12.497,10.503,8.851,10.101z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/video-black.svg b/static/images/icons-svg/video-black.svg new file mode 100644 index 0000000..cc50181 --- /dev/null +++ b/static/images/icons-svg/video-black.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve"> +<path d="M8,0H2C0.896,0,0,0.896,0,2v6c0,1.104,0.896,2,2,2h6c1.104,0,2-0.896,2-2V5V2C10,0.896,9.104,0,8,0z M10,5l4,4V1L10,5z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/icons-svg/video-white.svg b/static/images/icons-svg/video-white.svg new file mode 100644 index 0000000..ddcdf16 --- /dev/null +++ b/static/images/icons-svg/video-white.svg @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve"> +<path fill="#FFF" d="M8,0H2C0.896,0,0,0.896,0,2v6c0,1.104,0.896,2,2,2h6c1.104,0,2-0.896,2-2V5V2C10,0.896,9.104,0,8,0z M10,5l4,4V1L10,5z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/loading.gif b/static/images/loading.gif Binary files differnew file mode 100644 index 0000000..b143d4f --- /dev/null +++ b/static/images/loading.gif diff --git a/static/js/base.js b/static/js/base.js new file mode 100644 index 0000000..2920c25 --- /dev/null +++ b/static/js/base.js @@ -0,0 +1,200 @@ +/* + * + * Copyright (C) 2026 Private Island Networks Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * file: base.js + * + */ + + "use strict"; + +const STATUS = { + OK: 10, + FORM: 20, + DUPLICATE: 30, + REDIRECT: 100, + UNBOUND_FORM: 0, + ERROR_CSRF: -1, + ERROR_PARAMS: -2, + ERROR_SERVER: -3, + ERROR_COOKIES: -4, + ERROR_TAMPER: -5, +}; + +const PORT_PHY0 = 0; +const PORT_PHY1 = 1; +const PORT_PHY2 = 2; +const PORT_PC = 10; + +const MSG_FORMAT_BASIC = 0; +const MSG_FORMAT_CONTROLLER = 1; +const MSG_FORMAT_MLE = 2; + +const MODE_IDLE = 0; +const MODE_LIVE = 1; +const MODE_FILE = 2; + +const MSG_TYPE_NULL = 0 +const MSG_TYPE_WRITE = 1; +const MSG_TYPE_READ = 2; +const MSG_TYPE_REPLY_SUCCESS = 3; +const MSG_TYPE_REPLY_ERROR = 4; +const MSG_TYPE_NOTIY = 5; +const MSG_TYPE_MLE = 0X10; +const MSG_MAP = { MSG_TYPE_NULL : "NULL", MSG_TYPE_WRITE : "Write", MSG_TYPE_READ : "Read", + MSG_TYPE_REPLY_SUCCESS : "Success", MSG_TYPE_REPLY_ERROR : "Error", MSG_TYPE_NOTIY : "Notify", + MSG_TYPE_MLE : "MLE"}; + +/** + * Convert the server's response from JSON (string) to JS object form and + * gracefully handle an exception + */ +function getResponse(resp) { + try { + resp = JSON.parse(resp); + } catch (err) { + resp = {}; + resp.d = ""; + resp.r = MC_CONSTANTS.SERVER; + } + + return resp; +} + +function getString(obj) { + var result = ""; + for (var key in obj) { + if (result) { + result += "&"; + } + result += key + "=" + encodeURIComponent(obj[key]); + } + return result; +} + +function getPrefix() { + return window.location.pathname.split('/')[1]; // eg., /todos/<function> +} + +/** + * Alert the user depending on error returned by the server. Todo: consider + * using jqm popups instead of alert + */ +function processError(resp) { + $.loading('none'); + if (resp.r === MC_CONSTANTS.COOKIES || resp.r === MC_CONSTANTS.CSRF) { + alert("Error saving your submission. Cookies may be blocked. Please modify your browser's settings and try again including refreshing this page"); + } else if (resp.r === MC_CONSTANTS.TAMPER) { + alert("Our web server is in an inconsistent state with your browser. Please refresh your page and try again."); + } else { + alert("Server error. Sorry about the trouble. It's been logged, and our team will look into it"); + } +} + + +function $(selector, el) { + if (!el) { + el = document; + } + return el.querySelector(selector); +} + +$.loading = function(display) { + $('#mc-loading').style.display = display; +}; + + +$.get = function(url, data, callback) { + var xhr = new XMLHttpRequest(); + + xhr.addEventListener("progress", updateProgress); + xhr.addEventListener("load", transferComplete); + xhr.addEventListener("error", transferFailed); + xhr.addEventListener("abort", transferCanceled); + + if (data) { + url += "?" + getString(data); + } + + xhr.open('GET', url, true); + + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + + xhr.send(null); + + function updateProgress(event) { + // was:event.loaded / event.total + console.log('updateProgress'); + } + + function transferComplete(event) { + callback(event.target.response); + } + + function transferFailed(event) { + console.log('transferFailed'); + event.preventDefault(); + event.stopImmediatePropagation(); + } + + function transferCanceled(event) { + console.log('transferCanceled'); + } +}; + +$.post = function(url, data, callback) { + var xhr = new XMLHttpRequest(); + xhr.open('POST', url, true); + + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + + if (!(data instanceof FormData)) { + xhr.setRequestHeader("Content-type", + "application/x-www-form-urlencoded"); + data = getString(data); + } + + xhr.onreadystatechange = function(event) { + if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { + callback(event.target.response); + } + }; + + xhr.send(data); +}; + +function $$(selector, el) { + if (!el) { + el = document; + } + return el.querySelectorAll(selector); + // Note: the returned object is a NodeList. + // If you'd like to convert it to a Array for convenience, use this instead: + // return Array.prototype.slice.call(el.querySelectorAll(selector)); +} + +// MDN: Assigning to an undeclared variable throws a ReferenceError +function isStrictMode() { + try { + mc_doesNotExist = true; + } + catch(E) { + console.log(E.message); + return true; + } + return false; +} + + diff --git a/static/js/controller.js b/static/js/controller.js new file mode 100644 index 0000000..a12362b --- /dev/null +++ b/static/js/controller.js @@ -0,0 +1,93 @@ +/* + * + * Copyright (C) 2026 Private Island Networks Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * file: controller.js + * + * + */ + +function ajaxData() { + var data = {}; + return data; +} + + +function log_msg(msg) { + let msg_str = ''; + + msg_str += msg.type + ': ' + msg.address + ' ' + msg.data + '<br>'; + + return msg_str; +} + +function postControllerMsg(event) { + $.loading('block'); + event.preventDefault(); + console.log("postControllerMsg"); + + let fd = new FormData($('#mc-cont_message')); + fd.append('dummy', 'foo') + + $.post("/controller", fd, function(resp) { + $.loading('none'); + resp = JSON.parse(resp); + if (resp.r == STATUS.OK) { + let log = document.getElementById('mc-log'); + let height = 2 * resp.d.length; + for (let i=0; i < resp.d.length; i++) { + msg = resp.d[i]; + if (msg.port == PORT_PC) { + log.innerHTML += '<div class="mc-log-row style=height:' + height.toString() + 'rem"><div class="mc-log-col-time">' + msg.time + '</div>' + + '<div class="mc-log-col-pc">' + log_msg(msg) + '</div>' + + '<div class="mc-log-col-phy0"></div>' + + '<div class="mc-log-col-phy1"></div></div>'; + } + else if (msg.port == PORT_PHY0) { + log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' + + '<div class="mc-log-col-pc"></div>' + + '<div class="mc-log-col-phy0">' + log_msg(msg) + + '</div><div class="mc-log-col-phy1"></div></div>'; + } + } + } + + console.log("done"); + }); + +} + +/* +The DOMContentLoaded event fires as soon as the HTML document has been fully parsed, +which typically occurs long before images, stylesheets, and other external resources +have loaded. +*/ +window.addEventListener("DOMContentLoaded", function(e) { + var MsgForm = $('#mc-cont_message') + try { + // $('button[value=submit]').addEventListener('click', postControllerMsg); + MsgForm.addEventListener('submit', postControllerMsg); + } catch (event) { + } +}); + +/* +The load event is essential for operations that require the entire web page to be fully loaded, +including all dependent resources like images and stylesheets. +This event ensures that every element is available for script manipulation. +*/ +window.addEventListener("load", function(e) { + console.log("controller loaded"); +});
\ No newline at end of file diff --git a/static/js/lmmi.js b/static/js/lmmi.js new file mode 100644 index 0000000..5cad4e5 --- /dev/null +++ b/static/js/lmmi.js @@ -0,0 +1,39 @@ +/* + * + * Copyright (C) 2026 Private Island Networks Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * file: lmmi.js + * + * + */ + + "use strict"; + +function ajaxData() { + var data = {}; + return data; +} + +/* +The load event is essential for operations that require the entire web page to be fully loaded, +including all dependent resources like images and stylesheets. +This event ensures that every element is available for script manipulation. +*/ +window.addEventListener("load", function(e) { + + ss = spreadSheet('.mc-ss-main-panel'); + $('#mc-ss-reload-all').addEventListener('click', ss.getNewTable); + console.log("lmmi loaded"); +});
\ No newline at end of file diff --git a/static/js/main.js b/static/js/main.js new file mode 100644 index 0000000..3caa3a7 --- /dev/null +++ b/static/js/main.js @@ -0,0 +1,118 @@ +/* + * + * Copyright (C) 2026 Private Island Networks Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * file: main.js + * + */ + + +"use strict"; + +let selected_mode = MODE_LIVE; + +window.addEventListener("load", function(e) { + // re-initialize controls, as needed + /* + $('#mc-mode-live').checked=true; + $('#mc-filename').value = null; // clear any file that was previously selected + + // set up event listeners + $('#mc-mode-live').addEventListener('change',wl_changeMode); + $('#mc-mode-file').addEventListener('change',wl_changeMode); + $('#mc-filename').addEventListener('change',wl_filename); + $('#mc-start').addEventListener('click', wl_start); + $('#mc-stop').addEventListener('click', wl_stop); + $('#mc-help').addEventListener('click', wl_help); + $('#mc-clear').addEventListener('click', wl_clear); + */ + console.log("strict mode test: ",isStrictMode()); +}); + + +function wl_changeMode(event) { + event.preventDefault(); + console.log('change mode: ',event.target.id); + if (event.target.id == "mc-mode-file") { + selected_mode = MODE_FILE; + } + else { + selected_mode = MODE_LIVE; + } +} + +function wl_filename(event) { + event.preventDefault(); + $.loading('block'); + + let data = { 'filename': event.target.files[0].name }; + + $.post("/filename", data, function(resp) { + console.log("filename"); + }); + + $.loading('none'); +} + +function wl_start(event) { + event.preventDefault(); + let data = { 'mode': selected_mode } + $.loading('block'); + + $.post("/start", data, function(resp) { + $('#mc-mode').innerText = "Running"; + }); + // await new Promise(r => setTimeout(r, 1000)); + $.loading('none'); +} + +function wl_stop(event) { + event.preventDefault(); + let data = { 'mode': MODE_IDLE } + $('#mc-mode').innerText = "Idle"; + $.loading('block'); + $.post("/stop", data, function(resp) { + $('#mc-mode').innerText = "Idle"; + }); + $.loading('none'); +} + +function wl_help(event) { + event.preventDefault(); + m = modal('large'); + /* jshint multistr: true */ + m.display('<h2>GEODSS WebLogger Help:</h2> \ + <img width=800px src="/static/fiber_tap.svg">'); +} + +function wl_clear(event) { + event.preventDefault(); + let log = $('#mc-log'); + while (log.firstChild) { + log.removeChild(log.firstChild); + } +} + +function update_fw_version(fw_version) { + $('#mc-fw-version').innerText = fw_version.substring(2,4); +} + +function update_fw_increment(fw_increment) { + $('#mc-fw-increment').innerText = fw_increment.substring(2,4); +} + +function update_temperature(temperature) { + $('#mc-temperature').innerText = parseInt(temperature,16) + " \xB0F"; +} diff --git a/static/js/mdio.js b/static/js/mdio.js new file mode 100644 index 0000000..9185450 --- /dev/null +++ b/static/js/mdio.js @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2026 Private Island Networks Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * file: mdio.js + * + */ + + "use strict"; + +function ajaxData() { + var data = {}; + return data; +} + +/* +The load event is essential for operations that require the entire web page to be fully loaded, +including all dependent resources like images and stylesheets. +This event ensures that every element is available for script manipulation. +*/ +window.addEventListener("load", function(e) { + var ss = spreadSheet('.mc-ss-main-panel'); + $('#mc-ss-reload-all').addEventListener('click', ss.getNewTable); + console.log("mdio loaded"); +});
\ No newline at end of file diff --git a/static/js/mle.js b/static/js/mle.js new file mode 100644 index 0000000..0a28665 --- /dev/null +++ b/static/js/mle.js @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2026 Private Island Networks Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * file: mle.js + * + */ + + "use strict"; + +function ajaxData() { + var data = {}; + return data; +} + +/* +The load event is essential for operations that require the entire web page to be fully loaded, +including all dependent resources like images and stylesheets. +This event ensures that every element is available for script manipulation. +*/ +window.addEventListener("load", function(e) { + + console.log("mle loaded"); +});
\ No newline at end of file diff --git a/static/js/modal.js b/static/js/modal.js new file mode 100644 index 0000000..af4763b --- /dev/null +++ b/static/js/modal.js @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2026 Private Island Networks Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * file: modal.js + * + */ + +"use strict"; + +/* + * Modal TODO: stop using ids + * Only add and remove classes programmatically + * + */ + +function Modal(size) { + var modal = this; + this.modalContainer = $('#mc-modal'); + this.modalBody = $('#mc-modal-body', this.modalContainer); + this.modalBackdrop = $('#mc-modal-backdrop', this.modalContainer); + this.modalClose = $('#mc-modal-close', this.modalContainer); + + this.modalBody.classList=""; + + if (size !== undefined) { + this.modalBody.classList.add('mc-' + size); + } + + this.modalClose.addEventListener('click', function(event) { + event.preventDefault(); + event.stopPropagation(); + modal.modalContainer.style.display = 'none'; + if ($('#mc-modal-content')) { + el = $('#mc-modal-content'); + el.remove(); // IE supports removeNode + } + }); + this.modalBackdrop.addEventListener('click', function(event) { + event.preventDefault(); + event.stopPropagation(); + }); +} + +Modal.prototype = { + constructor : Modal, + display : modal_display, + hide : modal_hide, + clean : modal_clean, +}; + +function modal(size) { + return new Modal(size); +} + +function modal_display(content) { + var img, body, ratio, oldWidth, oldHeight; + this.clean(); + + if (content instanceof HTMLImageElement) { + img = content; + body = $('#mc-modal-body'); + + ratio = img.width / img.height; + + /* todo use the bigger img dimension */ + if (window.innerWidth - img.width < 20) { + img.width = window.innerWidth - 80; + img.height = img.width / ratio; + } + + if (window.innerHeight - img.height < 20) { + img.height = window.innerHeight - 80; + } + + body.style.top = String((window.innerHeight - img.height - 64) / 2) + 'px'; + body.style.bottom = String((window.innerHeight - img.height - 64) / 2) + 'px'; + body.style.left = String((window.innerWidth - img.width - 64) / 2) + 'px'; + body.style.right = String((window.innerWidth - img.width - 64) / 2) + 'px'; + + el = document.createElement("div"); + el.id = "mc-modal-content"; + el.innerHTML = '<img src="' + img.src + '">'; + this.modalBody.appendChild(el); + + } else { + el = document.createElement("div"); + el.id = "mc-modal-content"; + el.innerHTML = content; + this.modalBody.appendChild(el); + var dateInputs = $$('.mc-date', this.modalBody); + dateInputs.forEach(function(val) { + val.addEventListener('click', setDate); + }); + } + + this.modalContainer.style.display = 'block'; +} + +function modal_hide() { + this.modalContainer.style.display = 'none'; +} + +function modal_clean() { + var el; + if ((el = $('#mc-modal-content', this.modalContainer))) { + el.remove(); + } +}
\ No newline at end of file diff --git a/static/js/ss.js b/static/js/ss.js new file mode 100644 index 0000000..6f0310f --- /dev/null +++ b/static/js/ss.js @@ -0,0 +1,302 @@ +/* + * Copyright (C) 2026 Private Island Networks Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * file: ss.js + * + */ + +"use strict"; + +/* constructor spreadsheet */ +function SpreadSheet(selector) { + var ss = this; + this.activeCell = null; + this.panel = $(selector); + this.panel.addEventListener('click', function(event){ + + if (event.target.classList.contains('mc-edit')) { + ss.editCell.call(ss, event); + } + else if (event.target.classList.contains('mc-icon') || event.target.nodeName==="IMG") { + ss.actions.call(ss, event); + } + else if (event.target.classList.contains('mc-sortable')) { + data = ajaxData(); + data.sort=event.target.innerHTML.toLowerCase(); + ss.getNewTable(event,data); + } + }); + this.getNewTable = function(event, data) { + $.loading('block'); + if (data == undefined) { + data = ajaxData(); + } + $.get('/' + getPrefix(), data, function(resp) { + resp = JSON.parse(resp); + let values = resp.values; + console.log(resp.values); + cols=$$(".mc-values"); + for (let i = 0; i < 16; i++) { + cols[i].textContent = "0x" + values[i].toString(16); + } + $.loading('none'); + }); + } +} + +SpreadSheet.prototype = { + constructor: SpreadSheet, + actions: spreadSheet_actions, + editCell: spreadSheet_editCell, + newRow: spreadSheet_newRow +}; + +function spreadSheet(selector) { + return new SpreadSheet(selector); +} + +function spreadSheet_actions(event) { + event.preventDefault(); // this fixed my href bug on 3/2/18! + $.loading('block'); + var ss = this; + var link, icon, td, tr, id, action, txt, el, data, m; + + if (event.target.nodeName==="IMG") { + icon = event.target; + link = icon.parentNode; + } + else { + link=event.target; + } + + action=link.dataset.action; + + td=link.parentNode.parentNode; // link is wrapped in a div and then a td cell + tr = td.parentElement; + id = tr.dataset.id; + + txt = td.innerHTML; + + // modal actions + if (action === 'edit' || action === 'cut' || action === 'notify' || action === 'modify') { + + $.get('/' + getPrefix() + '/' + action + '/' + id, null, + function(resp) { + var resp = getResponse(resp); + $.loading('none'); + + if (action === 'edit') { + m = modal('large'); + } + else { + m = modal(); + } + + if (resp.r === MC_CONSTANTS.REDIRECT) { + window.location.assign(resp.d); + } else if (resp.r === MC_CONSTANTS.NONE) { + m.display(resp.d) + $('button[value="submit"]', m.modalContainer) + .addEventListener('click', submitForm); + } else { + processError(resp); + } + }) + } + + // replace object actions + else if (action === "recalc") { + $.get('/' + getPrefix() + '/' + action + '/' + id, null, function(resp) { + var resp = getResponse(resp); + $.loading('none'); + tr.innerHTML = resp.d; + if (resp.n) { + m = modal('large'); + m.display(resp.n); + } + }); + } + + function submitForm(e) { + console.log('submit Form'); + $.loading('block'); + var form = $('form', m.modalContainer); + // var nodes = form.childNodes; + var data = new FormData(form); + // nodes.forEach(addToFormData, data); + + $.post('/' + getPrefix() + '/' + action + '/' + id, data, function(resp) { + resp = getResponse(resp); + if (resp.r === MC_CONSTANTS.NONE) { + m.hide(); + ss.getNewTable(e); + } else if (resp.r === MC_CONSTANTS.FORM) { + form.innerHTML=resp.d; + $('button[value="submit"]',m.modalContainer).addEventListener('click', submitForm ); + } else { + processError(resp); + } + $.loading('none'); + }); + } +} + +/* set up a handler for a new SpreadSheet item / row */ +function spreadSheet_newRow(selector) { + var ss = this; + var m = modal('large'); + try{ + $(selector).addEventListener('click',function(event) { + $.get('/' + getPrefix() + '/new/', null, function(resp) { + + resp = getResponse(resp); + if (resp.r === MC_CONSTANTS.NONE) { + m.display(resp.d); + $('button[value="submit"]', m.modalContainer).addEventListener('click', submitForm); + } else { + processError(resp); + } + }); + }); + } + catch(event) { + console.log('spreadSheet_newRow problem') + } + + function submitForm(e) { + $.loading('block'); + var form = $('form', m.modalContainer); + var nodes = form.childNodes; + var data = new FormData(); + nodes.forEach(addToFormData, data); + + $.post('/' + getPrefix() + '/new/', data, function(resp) { + resp = getResponse(resp); + if (resp.r === MC_CONSTANTS.NONE) { + m.hide(); + ss.getNewTable(e); + } else if (resp.r === MC_CONSTANTS.FORM) { + form.innerHTML=resp.d; + $('button[value="submit"]',m.modalContainer).addEventListener('click', submitForm ); + } else { + processError(resp); + } + $.loading('none'); + }); + } +} + + +function spreadSheet_editCell(event) { + console.log('editCell'); + var td=event.target; + var tr = td.parentElement; + var id = tr.dataset.id; + var type=td.dataset.type; + var field=td.dataset.field; + var txt = td.innerHTML; + var el, data; + + if (type==="text") { + td.innerHTML=""; + el = document.createElement("input"); + el.addEventListener('keypress', keyHandler); + $('body').addEventListener('click',clickHandler); + // append the input + el.className="mc-ss-input" + el.value=txt; + td.appendChild(el); + el.focus(); + } + + /* TODO: do I need to be worried that the handler won't be set in time? */ + else if (type==="date") { + var cal = calendar('.mc-cal'); + cal.container.addEventListener("evtCalClose", calCloseHandler); + cal.open(td); + } + + /* calendar has been closed */ + function calCloseHandler(event) { + console.log('calCloseHandler'); + cal.container.removeEventListener('evtCalClose',calCloseHandler); + + if (event.detail.cancel) { + return; + } + + $.loading('block'); + data = { + id: id, + field: "date", + value: cal.getSelectedDate().toISOString(), + }; + + $.post('/' + getPrefix() + '/modify', data, function(resp) { + resp = getResponse(resp); + if(resp.r == MC_CONSTANTS.NONE) { + td.innerHTML=resp.d; + } + else { + processError(resp); + } + $.loading('none'); + }); + } + + function keyHandler(event) { + console.log(keyHandler); + var el = event.target; + var key = event.keyCode; + var txt = el.value; + + if (key==27) { + event.preventDefault(); + el.remove(); + td.innerHTML=txt; + } + else if (key==13) { + event.preventDefault(); + var data = { + id: id, + field: field, + value: txt, + }; + + el.remove(); + td.innerHTML=txt; + + $.post('/' + getPrefix() + '/modify', data, function(response) { + console.log("upload text suceeded"); + }); + } + } + + function clickHandler(event) { + console.log('clickHandler'); + if(event.target.nodeName==="TD") { + return; // don't cancel out of a cell we just clicked + } + $('body').removeEventListener('click',clickHandler); + var children = td.childNodes; + children.forEach(function(val) { + val.remove(); + }) + td.innerHTML=txt; + } +} + + +
\ No newline at end of file diff --git a/static/js/ws.js b/static/js/ws.js new file mode 100644 index 0000000..bc814ff --- /dev/null +++ b/static/js/ws.js @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2026 Private Island Networks Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * file: ws.js + * + */ + +"use strict"; + +let socket = new WebSocket("ws://localhost:8010/logger"); +console.log("here we go"); +let state = "Wait"; +let log = document.getElementById('mc-log'); + +function log_msg(msg) { + let msg_str = ''; + + if (msg.num_cmds > 1) { + console.log('multi commands'); + } + + for (let i = 0; i < msg.num_cmds; i++) { + if (msg.cmds[i][0].includes('RDREG') || msg.cmds[i][0].includes('GETTEMP')) { + msg_str += msg.cmds[i][0] + ' ' + msg.cmds[i][1] + '<br>'; + } + else if (msg.cmds[i][0] == "" && (msg.cmds[i][1] == "PHY1_STATUS" || msg.cmds[i][1] == "PHY2_STATUS")) { + let val = parseInt(msg.cmds[i][2], 16) & 0x8; + if (val) { + msg_str += msg.cmds[i][1] + ': LOS = 1' + '<br>'; + } + else { + msg_str += msg.cmds[i][1] + ': LOS = 0' + '<br>'; + } + } + else { + msg_str += msg.cmds[i][0] + ' ' + msg.cmds[i][1] + ' ' + msg.cmds[i][2] + '<br>'; + } + } + + return msg_str; +} + +// setInterval(function(){console.log(state)},1000); + +socket.onopen = function(e) { + console.log("[open] Connection established"); + console.log("Sending to server"); + socket.send("open"); // can send data as a string, Blob, or ArrayBuffer. +}; + +function update_mode(mode) { + if (mode == MODE_IDLE) + $('#mc-mode').innerText = "Idle"; + else if (mode == MODE_LIVE || mode == MODE_FILE) + $('#mc-mode').innerText = "Running"; + else + console.log("unsupported mode") +} + +socket.onmessage = function(event) { + let num_msgs = 0; + + let msg = JSON.parse(event.data); + if (msg.format == MSG_FORMAT_BASIC) { + if (typeof msg['mode'] !== "undefined") { + console.log("mode: ", msg['mode']); + update_mode(msg['mode']); + } + else if (typeof msg['fw_version'] !== "undefined") { + console.log("fw_version: ", msg['fw_version']); + update_fw_version(msg['fw_version']); + } + else if (typeof msg['fw_increment'] !== "undefined") { + console.log("fw_increment: ", msg['fw_increment']); + update_fw_increment(msg['fw_increment']); + } + else if (typeof msg['temperature'] !== "undefined") { + console.log("temperature: ", msg['temperature']); + update_temperature(msg['temperature']); + } + else + console.log("unsupported control"); + + return; + } + + let height = 2 * msg.num_cmds; + if (height == 0) { + height = 2; + } + + num_msgs += 1; + console.log("From server:", num_msgs, ': ', msg); + + if (msg.port == PORT_PC) { + log.innerHTML += '<div class="mc-log-row style=height:' + height.toString() + 'rem"><div class="mc-log-col-time">' + msg.time + '</div>' + + '<div class="mc-log-col-pc">' + log_msg(msg) + '</div>' + + '<div class="mc-log-col-phy0"></div>' + + '<div class="mc-log-col-phy1"></div></div>'; + } + else if (msg.port == PORT_PHY0) { + log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' + + '<div class="mc-log-col-pc"></div>' + + '<div class="mc-log-col-phy0">' + log_msg(msg) + + '</div><div class="mc-log-col-phy1"></div></div>'; + } + else if (msg.port == PORT_PHY1) { + log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' + + '<div class="mc-log-col-pc"></div>' + + '<div class="mc-log-col-phy0"></div>' + + '<div class="mc-log-col-phy1">' + log_msg(msg) + '</div></div>'; + } + + // socket.send("request"); + state = "Request" +}; + +socket.onclose = function(event) { + state = "Closed" + if (event.wasClean) { + console.log(`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`); + } else { + // e.g. server process killed or network down + // event.code is usually 1006 in this case + console.log('[close] Connection died'); + } +}; + +socket.onerror = function(error) { + state = "Error" + console.log(`[error]`); +}; + +// When you've finished using the WebSocket connection, +// call the WebSocket method close(): diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..c956dfd --- /dev/null +++ b/templates/base.html @@ -0,0 +1,53 @@ +<!-- index.html --> +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="utf-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1"> +<title>{{ title }}</title> +<link rel="shortcut icon" href="../static/images/favicon.ico"> +<link rel="stylesheet" type="text/css" href="/static/css/base.css"> +{% if ss %}<link rel="stylesheet" type="text/css" href="/static/css/ss.css">{% endif %} +</head> +<body> + <div id="mc-main-window"> + <header id="mc-header"> + <div id="mc-banner">PI Explorer, Version {{ version }}</div> + <nav id="mc-menu"> + <ul id="mc-menu-list"> + <li><a href="/">Home</a></li> + <li><a href="/controller">Controller</a></li> + <li><a href="/mle">Machine Learning</a></li> + <li><a href="/fabric">Switch Fabric</a></li> + <li><a href="/mdio">MDIO</a></li> + {% if lmmi %}<li><a href="/lmmi">LMMI</a></li>{% endif %} + <li><a href="/help">Help</a></li> + </ul> + </nav> + </header> + + <div id="mc-body" {% if app_layer %} class="mc-{{app_layer}}"{% endif %} data-fragments="{{num_fragments}}"> + {% block content %} + {% endblock %} + </div> + </div> + + + + <div id="mc-modal"> + <div id="mc-modal-backdrop"></div> + <div id="mc-modal-body"> + <button class="mc-quiet" id="mc-modal-close">close</button> + </div> + </div> + + <div id="mc-loading"> + <img src="/static/images/loading.gif" alt="loading"> + </div> + + <script src="/static/js/base.js"></script> + <script src="/static/js/modal.js"></script> + {% if app_layer %} <script src="/static/js/{{ app_layer }}.js"></script>{% endif %} + {% if ws %} <script src="/static/js/ws.js"></script>{% endif %} + {% if ss %} <script src="/static/js/ss.js"></script>{% endif %} +</body>
\ No newline at end of file diff --git a/templates/controller.html b/templates/controller.html new file mode 100644 index 0000000..cac36e2 --- /dev/null +++ b/templates/controller.html @@ -0,0 +1,50 @@ +<!-- controller.html, + -- Copyright (C) 2025 Private Island Networks Inc. +--> +{% extends "base.html" %} {% block content %} + +<h2>Controller</h2> +<form id="mc-cont_message" action="." enctype="multipart/form-data"> + <p> + <label>Message Type: <select name="type" id="cont_sel_msg_type" + class="mc-div-sel"> + <option value="0">NULL</option> + <option value="1">Write</option> + <option value="2" selected>Read</option> + </select></label> + </p> + + <p> + <input type="text" placeholder="token" id="cont_token" name="token"> + </p> + + <p> + <input type="text" placeholder="address" id="cont_addr" name="address"> + </p> + + <p> + <input type="text" placeholder="data" id="cont_data" name="data"> + </p> + + <p> + <button type="submit" value="submit">Submit</button> + </p> +</form> + + <div id="mc-log-hdr"> + <div class="mc-log-col mc-log-col-time" + style="border: 0px solid green;">Time</div> + <div class="mc-log-col mc-log-col-pc" + style="border: 0px solid green;">PC</div> + <div class="mc-log-col mc-log-col-phy0" + style="border: 0px solid green;">PHY0</div> + </div> + + {% include "divider.html" %} + + <div id="mc-log"> + <!-- Log Entries are Inserted Here --> + </div> + + +{% endblock %} diff --git a/templates/divider.html b/templates/divider.html new file mode 100644 index 0000000..6cdb31a --- /dev/null +++ b/templates/divider.html @@ -0,0 +1,3 @@ +<svg class="mc-divider"> + <line x1="0" y1="0" x2="2000" y2="0" /> +</svg> diff --git a/templates/fabric.html b/templates/fabric.html new file mode 100644 index 0000000..b97eaec --- /dev/null +++ b/templates/fabric.html @@ -0,0 +1,24 @@ +<!-- fabric.html, + -- Copyright (C) 2025 Private Island Networks Inc. +--> +{% extends "base.html" %} +{% block content %} + + <h2>Fabric {{ regs }}</h2> + <div class="mc-ss-main-panel"> + <table class="mc-ss-table mc-table-striped"> + <thead> + <tr> + <th class="mc-sortable" data-field="address">Address</th> + <th class="mc-sortable" data-field="register">Register</th> + <th class="mc-sortable" data-field="value">Value</th> + </tr> + </thead> + </table> + </div> + + + {% for key, value in regs.items() %} {{ key }}, {{ value }}<br> + {% endfor %} + +{% endblock %}
\ No newline at end of file diff --git a/templates/help.html b/templates/help.html new file mode 100644 index 0000000..cf21066 --- /dev/null +++ b/templates/help.html @@ -0,0 +1,29 @@ +<!-- help.html, + -- Copyright (C) 2026 Private Island Networks Inc. +--> +{% extends "base.html" %} {% block content %} + +<p> + For help, please email <a href="mailto:opensource@privateisland.tech">Support</a> + or enter question on our <a href="https://privateisland.tech/forum" target="_blank">forum</a> +</p> + +{% include "divider.html" %} + + +<h3>Known Issues, as of 3/3/26:</h3> +<ul> + <li>aio-http: Determine proper way to use WS for sending data that isn't in response to a request.</li> + <li>Fix blocking issue. Can we await "q.get(block=True)" in main.py?</li> + <li>Error handling in Controller and other forms. Need exception handling and then + return a meaningful JS error.</li> + <li>Close Websocket on refresh. On Unload.</li> + <li>Are multiple ws handlers needed for the different tabs?</li> + <li>Make sure there are no Python globals (e.g., q)</li> + <li>The JS logic for the MLE tab needs to be reviewed and fixed.</li> +</ul> + + + + +{% endblock %} diff --git a/templates/index.html b/templates/index.html new file mode 100755 index 0000000..dc400ce --- /dev/null +++ b/templates/index.html @@ -0,0 +1,18 @@ +<!-- index.html, + -- Copyright (C) 2025 Private Island Networks Inc. +--> +{% extends "base.html" %} +{% block content %} +{% if fpga_query == 1 %} + <p> + FPGA Version <span id="mc-fw-version"><em>XX</em></span>.<span + id="mc-fw-increment"><em>YY</em></span> , FPGA Internal Temperature: + <span id="mc-temperature"><em>??</em></span> + </p> + {% endif %} + +<div id="betsy"> + {% include "pi_arch_ml.svg" %} +</div> + +{% endblock %}
\ No newline at end of file diff --git a/templates/lmmi.html b/templates/lmmi.html new file mode 100644 index 0000000..eab3ca4 --- /dev/null +++ b/templates/lmmi.html @@ -0,0 +1,43 @@ +<!-- lmmi.html, + -- Copyright (C) 2025 Private Island Networks Inc. +--> +{% extends "base.html" %} {% block content %} + +<h2>SGMII_CDR 0 Registers</h2> +<div class="mc-ss-main-panel"> + <table class="mc-ss-table mc-table-striped"> + <thead> + <tr> + <th class="mc-sortable" data-field="address">Address</th> + <th class="mc-sortable" data-field="register">Register</th> + <th class="mc-sortable" data-field="default">Default</th> + <th class="mc-sortable" data-field="value">Value</th> + <th class="mc-mdio-buttons mc-ss-table-col-buttons"><a + id="mc-ss-reload-all" class="mc-icon" data-action="reload" + title="reload"> <img + src="/static/images/icons-svg/refresh-black.svg" alt="reload"></a></th> + </tr> + </thead> + <tbody> + {% for key, value in regs0.items() %} + <tr> + <td>{{ key }}</td> + <td>{{regs0[key][0]}}</td> + <td>{{regs0[key][1]}}</td> + <td class="mc-values">test</td> + <td> + <div class="mc-icons"> + <a class="mc-icon" data-action="edit" title="edit"><img + src="/static/images/icons-svg/edit-black.svg" alt="edit"></a><a + class="mc-icon" data-action="admin" title="admin"><img + src="/static/images/icons-svg/gear-black.svg" alt="admin"></a> + </div> + </td> + </tr> + {% endfor %} + </tbody> + </table> +</div> +<br> + +{% endblock %} diff --git a/templates/mdio.html b/templates/mdio.html new file mode 100644 index 0000000..1a7bfb0 --- /dev/null +++ b/templates/mdio.html @@ -0,0 +1,44 @@ +<!-- mdio.html, Copyright (C) 2025 Private Island Networks Inc. --> +{% extends "base.html" %} +{% block content %} + +<h2>MDIO PHY0</h2> +<div class="mc-ss-main-panel"> + <table class="mc-ss-table mc-table-striped"> + <thead> + <tr> + <th class="mc-sortable" data-field="address">Address</th> + <th class="mc-sortable" data-field="register">Register</th> + <th class="mc-sortable" data-field="default">Default</th> + <th class="mc-sortable" data-field="value">Value</th> + <th class="mc-mdio-buttons mc-ss-table-col-buttons"><a + id="mc-ss-reload-all" class="mc-icon" data-action="reload" + title="reload"> <img + src="/static/images/icons-svg/refresh-black.svg" alt="reload"></a></th> + </tr> + </thead> + <tbody> + {% for key, value in regs.items() %} + <tr> + <td>{{ key }}</td> + <td>{{regs[key][0]}}</td> + <td>{{regs[key][1]}}</td> + <td class="mc-values"></td> + <td> + <div class="mc-icons"> + <a class="mc-icon" data-action="edit" title="edit"><img + src="/static/images/icons-svg/edit-black.svg" alt="edit"></a><a + class="mc-icon" data-action="admin" title="admin"><img + src="/static/images/icons-svg/gear-black.svg" alt="admin"></a> + </div> + </td> + </tr> + {% endfor %} + </tbody> + </table> +</div> +<br> + +{% endblock %} + + diff --git a/templates/mle.html b/templates/mle.html new file mode 100644 index 0000000..b7bc632 --- /dev/null +++ b/templates/mle.html @@ -0,0 +1,44 @@ +<!-- metrics.html, + -- Copyright (C) 2025 Private Island Networks Inc. +--> +{% extends "base.html" %} +{% block content %} + + <div id="mc-mode-box"> + <p> + Viewing Mode: <span id="mc-mode">{{mode}}</span> + </p> + <input type="radio" id="mc-mode-live" class="mc-mode" name="mode" + value="live" checked /> <label for="live">Live</label> <input + type="radio" id="mc-mode-file" class="mc-mode" name="mode" + value="file" /> <label for="file">File</label> <input type="file" + id="mc-filename" name="filename" accept=".pcapng"> + <button id="mc-start" class="mc-action" + style="background-color: green" data-action="start">Start</button> + <button id="mc-stop" class="mc-action" style="background-color: red" + data-action="stop">Stop</button> + <button id="mc-help" class="mc-action" style="background-color: blue" + data-action="help">Help</button> + <button id="mc-clear" class="mc-action" + style="background-color: yellow; color: black;" data-action="clr">Clear</button> + </div> + + <br> + + <div id="mc-log-hdr"> + <div class="mc-log-col mc-log-col-time" + style="border: 0px solid green;">Time</div> + <div class="mc-log-col mc-log-col-pc" + style="border: 0px solid green;">PHY0</div> + <div class="mc-log-col mc-log-col-phy0" + style="border: 0px solid green;">PHY1</div> + <div class="mc-log-col mc-log-col-phy1" + style="border: 0px solid green;">PHY2</div> + </div> + + <div id="mc-log"> + <!-- Log Entries are Inserted Here --> + </div> + + +{% endblock %}
\ No newline at end of file diff --git a/templates/pi_arch_ml.svg b/templates/pi_arch_ml.svg new file mode 100644 index 0000000..601f184 --- /dev/null +++ b/templates/pi_arch_ml.svg @@ -0,0 +1,5996 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + id="betsy" + version="1.1" + inkscape:version="1.4.2 (ebf0e940, 2025-05-08)" + sodipodi:docname="pi_arch_ml.svg" + width="1200" + height="800" + 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" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + <defs + id="defs4"> + <inkscape:path-effect + effect="bspline" + id="path-effect11" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect9" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect6" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect4" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect2" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker10439" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path10437" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker10141" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path10139" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="marker8435" + style="overflow:visible" + inkscape:isstock="true" + viewBox="0 0 8.886927 5.078244" + markerWidth="8.8869267" + markerHeight="5.0782437" + preserveAspectRatio="xMidYMid"> + <path + inkscape:connector-curvature="0" + id="path8433" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker7591" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always" + viewBox="0 0 8.886927 5.078244" + markerWidth="8.8869267" + markerHeight="5.0782442" + preserveAspectRatio="xMidYMid"> + <path + id="path7589" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker7581" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path7579" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker7571" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path7569" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker6757" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path6755" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3541" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path3539" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3103" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path3101" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3093" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path3091" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3047" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path3045" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3037" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path3035" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3027" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path3025" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker3017" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path3015" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2977" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2975" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2949" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2947" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2939" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2937" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2929" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2927" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2919" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2917" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2909" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2907" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2899" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2897" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2889" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2887" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2879" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2877" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2869" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2867" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2849" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2847" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2839" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2837" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2829" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2827" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2819" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2817" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2809" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2807" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2799" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2797" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2789" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2787" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2779" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2777" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2769" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2767" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2759" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2757" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2749" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2747" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2739" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2737" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2729" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2727" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2719" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2717" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2703" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2701" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2693" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2691" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2683" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2681" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2673" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2671" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2663" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2661" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2653" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2651" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2643" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2641" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2633" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2631" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2623" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2621" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2613" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2611" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2603" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2601" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2593" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2591" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2583" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2581" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2573" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2571" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2563" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2561" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2553" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2551" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2543" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2541" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2533" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2531" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2523" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2521" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2513" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2511" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker2503" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path2501" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker2487" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2485" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="marker2441" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path2439" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="marker2425" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2423" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="marker2415" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2413" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="marker2405" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2403" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="marker2389" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2387" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="marker2379" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2377" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="marker2369" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path2367" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7363" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path7361" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7307" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path7305" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7251" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path7249" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7195" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path7193" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker7113" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path7111" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="marker7083" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path7081" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7027" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path7025" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6971" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6969" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6915" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6913" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6859" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6857" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6803" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6801" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6747" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6745" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6691" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mstart"> + <path + transform="matrix(0.4,0,0,0.4,4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6689" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6635" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mstart"> + <path + transform="matrix(0.4,0,0,0.4,4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6633" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6579" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mstart"> + <path + transform="matrix(0.4,0,0,0.4,4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6577" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6523" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mstart"> + <path + transform="matrix(0.4,0,0,0.4,4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6521" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6467" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mstart"> + <path + transform="matrix(0.4,0,0,0.4,4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6465" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6411" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mstart"> + <path + transform="matrix(0.4,0,0,0.4,4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6409" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6355" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mstart"> + <path + transform="matrix(0.4,0,0,0.4,4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path6353" + inkscape:connector-curvature="0" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect6301" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect6173" + effect="bspline" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect6041" + effect="bspline" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5913" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect5569" + effect="bspline" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5441" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect5253" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker4979" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path4977" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker10496" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path10494" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect10492" + effect="bspline" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect10489" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker9670" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path9668" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect9666" + effect="bspline" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + effect="bspline" + id="path-effect9663" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <inkscape:path-effect + only_selected="false" + apply_with_weight="true" + apply_no_weight="true" + helper_size="0" + steps="2" + weight="33.333333" + is_visible="true" + id="path-effect8500" + effect="bspline" + lpeversion="0" + uniform="false" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker7728" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path7726" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <inkscape:path-effect + effect="bspline" + id="path-effect7358" + is_visible="true" + weight="33.333333" + steps="2" + helper_size="0" + apply_no_weight="true" + apply_with_weight="true" + only_selected="false" + lpeversion="0" + uniform="false" /> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7515" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend" + inkscape:collect="always"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path7513" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7497" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mstart"> + <path + transform="matrix(0.4,0,0,0.4,4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path7495" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker6797" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path6795" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker6779" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path6777" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path3642" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker5683" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path5681" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker5665" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path5663" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker4107" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path4105" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker4075" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path4073" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker4043" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path4041" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3899" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path3645" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7839" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mend"> + <path + transform="scale(-0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path7837" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7691" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mstart"> + <path + transform="scale(0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path7689" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker7519" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Mend"> + <path + transform="scale(-0.6)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path7517" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Sstart" + orient="auto" + refY="0" + refX="0" + id="marker6916" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path6914" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.2,0,0,0.2,1.2,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Sstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Sstart" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path6396" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.2,0,0,0.2,1.2,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend" + style="overflow:visible"> + <path + id="path3951" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend-1" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path4048-7" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker575" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path573" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker579" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path577" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker583" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path581" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path4030" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker589" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path587" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker593" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path591" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker597" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path595" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lstart" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path4045" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(1.1,0,0,1.1,1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker603" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path601" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker607" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path605" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend-2" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path4048" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker613" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path611" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lstart" + orient="auto" + refY="0" + refX="0" + id="marker617" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path615" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(1.1,0,0,1.1,1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker621" + style="overflow:visible"> + <path + inkscape:connector-curvature="0" + id="path619" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend-0" + style="overflow:visible"> + <path + id="path3951-2" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker1537" + style="overflow:visible"> + <path + id="path1535" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker1541" + style="overflow:visible"> + <path + id="path1539" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker1545" + style="overflow:visible"> + <path + id="path1543" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker1549" + style="overflow:visible"> + <path + id="path1547" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker1553" + style="overflow:visible"> + <path + id="path1551" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker1557" + style="overflow:visible"> + <path + id="path1555" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-6" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path3642-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend-0-3" + style="overflow:visible"> + <path + id="path3951-2-9" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mstart-4" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path3642-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(0.4,0,0,0.4,4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker3899-2" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path3645-2" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow2Lend-0-1" + style="overflow:visible"> + <path + id="path3951-2-3" + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker4107-2" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4105-1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker4075-53" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4073-7" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker4043-2" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4041-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="1" + inkscape:pageshadow="2" + inkscape:zoom="0.79178738" + inkscape:cx="549.38991" + inkscape:cy="301.84871" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="2560" + inkscape:window-height="1027" + inkscape:window-x="0" + inkscape:window-y="25" + inkscape:window-maximized="0" + units="px" + showguides="false" + fit-margin-left="25" + fit-margin-right="25" + fit-margin-bottom="25" + fit-margin-top="25" + inkscape:document-rotation="0" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-93.941982,-218.07648)"> + <rect + style="opacity:0.443;fill:#c8e7c6;fill-opacity:1;stroke:#c8e7c6;stroke-width:0.801285;stroke-linejoin:round;stroke-miterlimit:5.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect7467" + width="918.80066" + height="705.15906" + x="295.53638" + y="278.61893" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + id="g6838" + transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-279.63446)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="3.4703755" + rx="4.1516762" + y="597.3775" + x="170.50954" + height="66.792107" + width="82.449463" + id="rect3808" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="196.83681" + y="634.75793" + id="text3810"><tspan + sodipodi:role="line" + id="tspan3812" + x="196.83681" + y="634.75793" + style="font-size:12px;line-height:1.25;stroke-width:0.759154">PHY0</tspan></text> + </g> + <g + id="g6833" + transform="matrix(1.2043329,0,0,1.4407663,-62.883149,-276.75293)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="translate(15,10)" + id="g8188" + style="stroke-width:0.759154"> + <rect + ry="3.4703755" + rx="4.1516762" + y="739.17847" + x="149.08096" + height="66.792107" + width="82.449463" + id="rect3816" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="175.92679" + y="776.54718" + id="text3818"><tspan + style="font-size:12px;line-height:1.25;stroke-width:0.759154" + sodipodi:role="line" + id="tspan3820" + x="175.92679" + y="776.54718">PHY2</tspan></text> + </g> + </g> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.536106;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2987" + width="62.697647" + height="566.9314" + x="839.33459" + y="373.69003" + rx="2.0290093" + ry="22.132849" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="931.36285" + y="650.46838" + id="text3825" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-size:15.8071px;line-height:1.25;stroke-width:1" + sodipodi:role="line" + id="tspan3827" + x="931.36285" + y="650.46838">switch</tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.15514;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect1099" + width="108.17184" + height="195.63086" + x="956.73676" + y="623.1394" + rx="3.8508778" + ry="3.6379144" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="1071.1218" + y="665.12781" + id="text1103" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan1101" + x="1071.1218" + y="665.12781" + style="stroke-width:1">controller</tspan></text> + <rect + ry="1.7753763" + rx="3.8508778" + y="625.53204" + x="1091.7941" + height="95.47184" + width="108.17184" + id="rect1116" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.108379;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + id="text1120" + y="621.52893" + x="1217.8649" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + y="621.52893" + x="1217.8649" + id="tspan1118" + sodipodi:role="line" + style="stroke-width:1">mdio_cont</tspan></text> + <rect + ry="2.7044287" + rx="12.051319" + y="545.87592" + x="954.79584" + height="52.050407" + width="239.33101" + id="rect1122" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.317374;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="1119.7616" + y="530.08698" + id="text1126" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan1124" + x="1119.7616" + y="530.08698" + style="stroke-width:1">code / params / data</tspan></text> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.108379;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect1130" + width="108.17184" + height="95.47184" + x="1092.6543" + y="754.17188" + rx="3.8508778" + ry="1.7753763" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="1236.4421" + y="739.14105" + id="text1134" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan1132" + x="1236.4421" + y="739.14105" + style="stroke-width:1">mdio</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart)" + d="m 903.16389,726.13059 h 52.90462" + id="path7492" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 1007.2527,599.03441 v 23.66973" + id="path7494" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker8435);marker-end:url(#marker7591)" + d="m 1066.07,673.26798 h 23.8016" + id="path7496" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker8435);marker-end:url(#marker7581)" + d="m 1145.8799,722.8505 v 28.29819" + id="path7498" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker8435);marker-end:url(#marker7591)" + d="m 1201.6664,803.31448 h 70.5394" + id="path8201" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="1333.2504" + y="732.35455" + id="text8205" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan8203" + x="1333.2504" + y="732.35455" + style="stroke-width:1">MDIO</tspan></text> + <rect + style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6055" + width="98.927353" + height="156.42606" + x="451.96918" + y="458.1481" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + id="g6244-3-6" + transform="matrix(0.55561808,0,0,0.69221152,213.03096,227.01508)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6242-4-7" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5659933" + ry="5.1820455" /> + </g> + <g + id="g6304-7-5" + transform="matrix(0.52272347,0,0,0.38979911,116.16864,486.50168)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6302-0-9" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + <text + id="text6308-9-7" + y="651.31836" + x="514.82501" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + id="tspan6306-1-8" + style="font-size:15.8071px;line-height:1.5;stroke-width:1" + y="651.31836" + x="514.82501" + sodipodi:role="line">fcs</tspan></text> + <g + id="g6324-9-0" + transform="matrix(1.1497588,0,0,1.4407663,19.004127,-360.37153)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g6318-1-3" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect6312-0-8" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g6316-7-4" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect6314-9-4" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text6322-5-9" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan6320-1-0" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">sync fifo</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3047)" + d="M 635.28669,606.92008 H 662.8143" + id="path6364-0-6" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path6366-9-1" + d="M 730.56236,606.92008 H 751.8489" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3037)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3027)" + d="M 817.24226,606.92008 H 838.5288" + id="path6370-8-7" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 477.98383,675.48471 v 13.12135" + id="path6378-3-8" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + id="g6324-9-9-9" + transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-431.29407)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g6318-1-5-7" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect6312-0-9-0" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g6316-7-0-6" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect6314-9-1-0" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text6322-5-4-8" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan6320-1-1-4" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">pkt_filter</tspan></text> + </g> + <g + transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-360.37153)" + id="g1850-1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g1844-9" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect1838-8" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g1842-1" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect1840-1" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text1848-7"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan1846-7">drop_fifo</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="624.61273" + y="567.60132" + id="text2339-0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan2337-7" + x="624.61273" + y="567.60132" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">Layer 3/4</tspan></text> + <path + inkscape:connector-curvature="0" + id="path3184-4" + d="m 694.93209,557.63997 v 25.46554" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.984405px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3017)" + d="m 597.47921,586.78451 v -51.35885 h 63.00271" + id="path3634-9" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.26339px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Mstart-6)" + d="M 514.71462,661.60451 H 838.7571" + id="path6049-5" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <rect + style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.315989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.315989, 2.52791;stroke-dashoffset:0;stroke-opacity:1" + id="rect6060-1" + width="177.53699" + height="136.55833" + x="648.95526" + y="497.20551" + transform="matrix(0.99999262,0.00384124,-0.00322815,0.99999479,0,0)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + id="g6244-3-3" + transform="matrix(0.55561808,0,0,0.69221152,212.44595,448.36757)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6242-4-1" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5659933" + ry="5.1820455" /> + </g> + <g + id="g6304-7-4" + transform="matrix(0.52272347,0,0,0.38979911,115.58362,707.85416)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6302-0-95" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + <text + id="text6308-9-8" + y="853.69525" + x="514.18518" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + id="tspan6306-1-6" + style="font-size:15.8071px;line-height:1.5;stroke-width:1" + y="853.69525" + x="514.18518" + sodipodi:role="line">fcs</tspan></text> + <g + id="g6324-9-04" + transform="matrix(1.1497588,0,0,1.4407663,18.419118,-139.01904)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g6318-1-8" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect6312-0-1" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g6316-7-8" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect6314-9-3" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text6322-5-8" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan6320-1-3" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">sync fifo</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4043-2)" + d="m 634.70167,828.27258 h 27.52762" + id="path6364-0-1" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path6366-9-16" + d="m 729.97735,828.27258 h 21.28653" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4075-53)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4107-2)" + d="m 816.65724,828.27258 h 21.28654" + id="path6370-8-3" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 477.39881,896.8372 v 13.12135" + id="path6378-3-81" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + id="g6324-9-9-5" + transform="matrix(1.2043329,0,0,1.4407663,-106.57897,-209.94158)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g6318-1-5-8" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect6312-0-9-4" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g6316-7-0-5" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect6314-9-1-9" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text6322-5-4-1" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan6320-1-1-0" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">pkt_filter</tspan></text> + </g> + <g + transform="matrix(1.2043329,0,0,1.4407663,-105.69019,-139.01904)" + id="g1850-6" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g1844-4" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect1838-6" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g1842-9" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect1840-12" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text1848-4"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan1846-9">drop_fifo</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="623.97284" + y="769.97809" + id="text2339-4" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan2337-72" + x="623.97284" + y="769.97809" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">Layer 3/4</tspan></text> + <path + inkscape:connector-curvature="0" + id="path3184-6" + d="m 694.34707,778.99246 v 25.46555" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-1)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.984405px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3899-2)" + d="M 596.89419,808.137 V 756.77815 H 659.8969" + id="path3634-8" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.25715px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Mstart-4)" + d="m 517.31809,882.957 h 320.854" + id="path6049-7" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <rect + style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.315989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.315989, 2.52791;stroke-dashoffset:0;stroke-opacity:1" + id="rect6060-6" + width="177.53699" + height="136.55833" + x="647.37769" + y="722.6817" + transform="matrix(0.99999262,0.00384124,-0.00322815,0.99999479,0,0)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path7181" + d="m 236.36318,629.91742 h 74.15586" + style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2441);marker-end:url(#marker2977)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.15749px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7497);marker-end:url(#marker7515)" + d="m 237.9872,850.45758 h 72.53184" + id="path7291" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="277.65887" + y="773.30872" + id="text7295" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan7293" + x="277.65887" + y="773.30872" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.0508px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">RGMII</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="861.7677" + y="804.07611" + id="text7305" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan7303" + x="861.7677" + y="804.07611" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">tx_data</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="861.7677" + y="601.29865" + id="text7305-5" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan7303-9" + x="861.7677" + y="601.29865" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">tx_data</tspan></text> + <g + transform="matrix(0.55526963,0,0,0.99236661,92.839636,73.176934)" + id="g7338" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="3.6146636" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect7336" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <g + transform="matrix(0.55526963,0,0,0.99236661,92.254621,292.33212)" + id="g7342" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="3.6146636" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect7340" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <text + id="text7350" + y="785.18317" + x="502.78534" + style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px" + y="785.18317" + x="502.78534" + id="tspan7348" + sodipodi:role="line">MAC</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="503.4252" + y="582.80634" + id="text7354" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan7352" + x="503.4252" + y="582.80634" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px">MAC</tspan></text> + <path + inkscape:original-d="m 408.22769,624.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:path-effect="#path-effect10492" + inkscape:connector-curvature="0" + id="path9638" + d="m 408.22769,624.08871 c 12.76701,0 25.53305,0 38.29813,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker7728)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2949)" + d="m 408.22769,470.08871 c 12.76701,0 25.53305,0 38.29813,0" + id="path9644" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect9666" + inkscape:original-d="m 408.22769,470.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" /> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.108379;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect1846" + width="108.17184" + height="95.47184" + x="952.09143" + y="392.12793" + rx="3.8508778" + ry="1.7753763" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="1070.7019" + y="384.40421" + id="text1850" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan1848" + x="1070.7019" + y="384.40421" + style="stroke-width:1">machine </tspan><tspan + sodipodi:role="line" + x="1070.7019" + y="406.3584" + id="tspan1" + style="stroke-width:1">learning </tspan><tspan + sodipodi:role="line" + x="1070.7019" + y="428.31262" + id="tspan2" + style="stroke-width:1">engine</tspan></text> + <path + inkscape:connector-curvature="0" + id="path1852" + d="m 903.03894,437.97733 h 48.77161" + style="fill:none;stroke:#000000;stroke-width:0.960145px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-279.63446)" + id="g5133" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5127" + width="82.449463" + height="66.792107" + x="170.50954" + y="597.3775" + rx="4.1516762" + ry="3.4703755" /> + <text + id="text5131" + y="634.75793" + x="196.83681" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + style="font-size:12px;line-height:1.25;stroke-width:0.759154" + y="634.75793" + x="196.83681" + id="tspan5129" + sodipodi:role="line">PHY0</tspan></text> + </g> + <g + transform="matrix(0.55561808,0,0,0.69221152,213.03096,227.01508)" + id="g5149" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="5.1820455" + rx="9.5659933" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5147" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <g + transform="matrix(0.52272347,0,0,0.38979911,116.16864,486.50168)" + id="g5153" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5151" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="514.82501" + y="651.31836" + id="text5157" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + x="514.82501" + y="651.31836" + style="font-size:15.8071px;line-height:1.5;stroke-width:1" + id="tspan5155">fcs</tspan></text> + <g + transform="matrix(1.1497588,0,0,1.4407663,19.004127,-360.37153)" + id="g5171" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g5165" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect5159" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g5163" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5161" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text5169"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan5167">sync fifo</tspan></text> + </g> + <path + inkscape:connector-curvature="0" + id="path5173" + d="M 635.28669,606.92008 H 662.8143" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2919)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2909)" + d="M 730.56236,606.92008 H 751.8489" + id="path5175" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5177" + d="M 817.24226,606.92008 H 838.5288" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2899)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5179" + d="m 477.98383,675.48471 v 13.12135" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-431.29407)" + id="g5193" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g5187" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect5181" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g5185" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5183" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text5191"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan5189">pkt_filter</tspan></text> + </g> + <g + id="g5207" + transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-360.37153)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g5201" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect5195" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g5199" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5197" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text5205" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan5203" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">drop_fifo</tspan></text> + </g> + <text + id="text5211" + y="567.60132" + x="624.61273" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1" + y="567.60132" + x="624.61273" + id="tspan5209" + sodipodi:role="line">Layer 3/4</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)" + d="m 694.93209,557.63997 v 25.46554" + id="path5213" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5215" + d="m 597.47921,586.78451 v -51.35885 h 63.00271" + style="fill:none;stroke:#000000;stroke-width:0.984405px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2889)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2425);marker-end:url(#marker2879)" + d="m 236.36318,629.91742 h 74.15586" + id="path5219" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="277.65887" + y="571.67456" + id="text5223" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan5221" + x="277.65887" + y="571.67456" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.0508px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">RGMII</tspan></text> + <text + id="text5249" + y="582.80634" + x="503.4252" + style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px" + y="582.80634" + x="503.4252" + id="tspan5247" + sodipodi:role="line">MAC</tspan></text> + <path + inkscape:original-d="m 408.22769,470.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:path-effect="#path-effect5253" + inkscape:connector-curvature="0" + id="path5251" + d="m 408.22769,470.08871 c 12.76701,0 25.53305,0 38.29813,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2869)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" /> + <g + transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-279.63446)" + id="g5317" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5311" + width="82.449463" + height="66.792107" + x="170.50954" + y="597.3775" + rx="4.1516762" + ry="3.4703755" /> + <text + id="text5315" + y="634.75793" + x="196.83681" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + style="font-size:12px;line-height:1.25;stroke-width:0.759154" + y="634.75793" + x="196.83681" + id="tspan5313" + sodipodi:role="line">PHY0</tspan></text> + </g> + <rect + y="458.1481" + x="451.96918" + height="156.42606" + width="98.927353" + id="rect5331" + style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + transform="matrix(0.55561808,0,0,0.69221152,213.03096,227.01508)" + id="g5335" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="5.1820455" + rx="9.5659933" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5333" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <g + transform="matrix(0.52272347,0,0,0.38979911,116.16864,486.50168)" + id="g5339" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5337" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="514.82501" + y="651.31836" + id="text5343" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + x="514.82501" + y="651.31836" + style="font-size:15.8071px;line-height:1.5;stroke-width:1" + id="tspan5341">fcs</tspan></text> + <g + transform="matrix(1.1497588,0,0,1.4407663,19.004127,-360.37153)" + id="g5357" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g5351" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect5345" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g5349" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5347" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text5355"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan5353">sync fifo</tspan></text> + </g> + <path + inkscape:connector-curvature="0" + id="path5359" + d="M 635.28669,606.92008 H 662.8143" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2839)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2829)" + d="M 730.56236,606.92008 H 751.8489" + id="path5361" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5363" + d="M 817.24226,606.92008 H 838.5288" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2819)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5365" + d="m 477.98383,675.48471 v 13.12135" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-431.29407)" + id="g5379" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g5373" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect5367" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g5371" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5369" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text5377"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan5375">pkt_filter</tspan></text> + </g> + <g + id="g5393" + transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-360.37153)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g5387" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect5381" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g5385" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5383" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text5391" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan5389" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">drop_fifo</tspan></text> + </g> + <text + id="text5397" + y="567.60132" + x="624.61273" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1" + y="567.60132" + x="624.61273" + id="tspan5395" + sodipodi:role="line">Layer 3/4</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)" + d="m 694.93209,557.63997 v 25.46554" + id="path5399" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5401" + d="m 597.47921,586.78451 v -51.35885 h 63.00271" + style="fill:none;stroke:#000000;stroke-width:0.984405px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2809)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <rect + transform="matrix(0.99999262,0.00384124,-0.00322815,0.99999479,0,0)" + y="497.20551" + x="648.95526" + height="136.55833" + width="177.53699" + id="rect5405" + style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.315989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.315989, 2.52791;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2415);marker-end:url(#marker2799)" + d="m 236.36318,629.91742 h 74.15586" + id="path5407" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + id="text5437" + y="582.80634" + x="503.4252" + style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px" + y="582.80634" + x="503.4252" + id="tspan5435" + sodipodi:role="line">MAC</tspan></text> + <path + inkscape:original-d="m 408.22769,470.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:path-effect="#path-effect5441" + inkscape:connector-curvature="0" + id="path5439" + d="m 408.22769,470.08871 c 12.76701,0 25.53305,0 38.29813,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2789)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" /> + <g + id="g5449" + transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-279.63446)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="3.4703755" + rx="4.1516762" + y="597.3775" + x="170.50954" + height="66.792107" + width="82.449463" + id="rect5443" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="196.83681" + y="634.75793" + id="text5447"><tspan + sodipodi:role="line" + id="tspan5445" + x="196.83681" + y="634.75793" + style="font-size:12px;line-height:1.25;stroke-width:0.759154">PHY1</tspan></text> + </g> + <g + id="g5465" + transform="matrix(0.55561808,0,0,0.69221152,213.03096,227.01508)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5463" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5659933" + ry="5.1820455" /> + </g> + <g + id="g5469" + transform="matrix(0.52272347,0,0,0.38979911,116.16864,486.50168)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5467" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + <text + id="text5473" + y="651.31836" + x="514.82501" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + id="tspan5471" + style="font-size:15.8071px;line-height:1.5;stroke-width:1" + y="651.31836" + x="514.82501" + sodipodi:role="line">fcs</tspan></text> + <g + id="g5487" + transform="matrix(1.1497588,0,0,1.4407663,19.004127,-360.37153)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g5481" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect5475" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g5479" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5477" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text5485" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan5483" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">sync fifo</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2769)" + d="M 635.28669,606.92008 H 662.8143" + id="path5489" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5491" + d="M 730.56236,606.92008 H 751.8489" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2759)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2749)" + d="M 817.24226,606.92008 H 838.5288" + id="path5493" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 477.98383,675.48471 v 13.12135" + id="path5495" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + id="g5509" + transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-431.29407)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g5503" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect5497" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g5501" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5499" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text5507" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan5505" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">pkt_filter</tspan></text> + </g> + <g + transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-360.37153)" + id="g5523" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g5517" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect5511" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g5515" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5513" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text5521"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan5519">drop_fifo</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="624.61273" + y="567.60132" + id="text5527" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan5525" + x="624.61273" + y="567.60132" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">Layer 3/4</tspan></text> + <path + inkscape:connector-curvature="0" + id="path5529" + d="m 694.93209,557.63997 v 25.46554" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5535" + d="m 236.36318,629.91742 h 74.15586" + style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2405);marker-end:url(#marker2739)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="503.4252" + y="582.80634" + id="text5565" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan5563" + x="503.4252" + y="582.80634" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px">MAC</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2729)" + d="m 408.22769,470.08871 c 12.76701,0 25.53305,0 38.29813,0" + id="path5567" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect5569" + inkscape:original-d="m 408.22769,470.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" /> + <g + transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-481.34174)" + id="g5789" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5783" + width="82.449463" + height="66.792107" + x="170.50954" + y="597.3775" + rx="4.1516762" + ry="3.4703755" /> + <text + id="text5787" + y="634.75793" + x="196.83681" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + style="font-size:12px;line-height:1.25;stroke-width:0.759154" + y="634.75793" + x="196.83681" + id="tspan5785" + sodipodi:role="line">PHY0</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:1.00193;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7027)" + d="m 442.44046,444.15203 h -56.6072" + id="path5793" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + id="text5797" + y="380.15732" + x="435.88388" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-size:15.8071px;line-height:1.25;stroke-width:1" + y="380.15732" + x="435.88388" + id="tspan5795" + sodipodi:role="line">rx0_d</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="435.63553" + y="400.98508" + id="text5801" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-size:15.8071px;line-height:1.25;stroke-width:1" + sodipodi:role="line" + id="tspan5799" + x="435.63553" + y="400.98508">tx0_d</tspan></text> + <rect + y="256.4408" + x="451.96918" + height="156.42606" + width="98.927353" + id="rect5803" + style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + transform="matrix(0.55561808,0,0,0.69221152,213.03096,25.307814)" + id="g5807" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="5.1820455" + rx="9.5659933" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5805" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <g + transform="matrix(0.52272347,0,0,0.38979911,116.16864,284.7944)" + id="g5811" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5809" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="514.82501" + y="466.90259" + id="text5815" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + x="514.82501" + y="466.90259" + style="font-size:15.8071px;line-height:1.5;stroke-width:1" + id="tspan5813">fcs</tspan></text> + <g + transform="matrix(1.1497588,0,0,1.4407663,19.004127,-562.07881)" + id="g5829" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g5823" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect5817" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g5821" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5819" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text5827"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan5825">sync fifo</tspan></text> + </g> + <path + inkscape:connector-curvature="0" + id="path5831" + d="M 635.28669,405.2128 H 662.8143" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2703)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2693)" + d="M 730.56236,405.2128 H 751.8489" + id="path5833" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5835" + d="M 817.24226,405.2128 H 838.5288" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2683)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5837" + d="m 477.98383,473.77743 v 13.12135" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-633.00134)" + id="g5851" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g5845" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect5839" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g5843" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5841" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text5849"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan5847">pkt_filter</tspan></text> + </g> + <g + id="g5865" + transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-562.07881)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g5859" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect5853" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g5857" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5855" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text5863" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan5861" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">drop_fifo</tspan></text> + </g> + <text + id="text5869" + y="383.18552" + x="624.61273" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1" + y="383.18552" + x="624.61273" + id="tspan5867" + sodipodi:role="line">Layer 3/4</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)" + d="m 694.93209,355.93269 v 25.46554" + id="path5871" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5873" + d="m 597.47921,385.07723 v -51.35885 h 63.00271" + style="fill:none;stroke:#000000;stroke-width:0.984405px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2673)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5875" + d="M 514.71462,459.89723 H 838.7571" + style="fill:none;stroke:#000000;stroke-width:1.26339px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6523)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <rect + transform="matrix(0.99999262,0.00384124,-0.00322815,0.99999479,0,0)" + y="295.49966" + x="648.30432" + height="136.55833" + width="177.53699" + id="rect5877" + style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.315989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.315989, 2.52791;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2389);marker-end:url(#marker2663)" + d="m 236.36318,428.21014 h 74.15586" + id="path5879" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + id="text5887" + y="416.8829" + x="861.7677" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1" + y="416.8829" + x="861.7677" + id="tspan5885" + sodipodi:role="line">tx_data</tspan></text> + <g + id="g5905" + transform="matrix(0.55526963,0,0,0.99236661,92.839636,-130.72763)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5903" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="3.6146636" /> + </g> + <text + id="text5909" + y="398.39056" + x="503.4252" + style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px" + y="398.39056" + x="503.4252" + id="tspan5907" + sodipodi:role="line">MAC</tspan></text> + <path + inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:path-effect="#path-effect5913" + inkscape:connector-curvature="0" + id="path5911" + d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2653)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" /> + <g + id="g5921" + transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-481.34174)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="3.4703755" + rx="4.1516762" + y="597.3775" + x="170.50954" + height="66.792107" + width="82.449463" + id="rect5915" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="196.83681" + y="634.75793" + id="text5919"><tspan + sodipodi:role="line" + id="tspan5917" + x="196.83681" + y="634.75793" + style="font-size:12px;line-height:1.25;stroke-width:0.759154">PHY0</tspan></text> + </g> + <g + id="g5937" + transform="matrix(0.55561808,0,0,0.69221152,213.03096,25.307814)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5935" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5659933" + ry="5.1820455" /> + </g> + <g + id="g5941" + transform="matrix(0.52272347,0,0,0.38979911,116.16864,284.7944)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5939" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + <text + id="text5945" + y="466.90259" + x="514.82501" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + id="tspan5943" + style="font-size:15.8071px;line-height:1.5;stroke-width:1" + y="466.90259" + x="514.82501" + sodipodi:role="line">fcs</tspan></text> + <g + id="g5959" + transform="matrix(1.1497588,0,0,1.4407663,19.004127,-562.07881)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g5953" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect5947" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g5951" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5949" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text5957" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan5955" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">sync fifo</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2633)" + d="M 635.28669,405.2128 H 662.8143" + id="path5961" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path5963" + d="M 730.56236,405.2128 H 751.8489" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2623)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2613)" + d="M 817.24226,405.2128 H 838.5288" + id="path5965" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 477.98383,473.77743 v 13.12135" + id="path5967" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + id="g5981" + transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-633.00134)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g5975" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect5969" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g5973" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect5971" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text5979" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan5977" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">pkt_filter</tspan></text> + </g> + <g + transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-562.07881)" + id="g5995" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g5989" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect5983" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g5987" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5985" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text5993"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan5991">drop_fifo</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="624.61273" + y="383.18552" + id="text5999" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan5997" + x="624.61273" + y="383.18552" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">Layer 3/4</tspan></text> + <path + inkscape:connector-curvature="0" + id="path6001" + d="m 694.93209,355.93269 v 25.46554" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path6007" + d="m 236.36318,428.21014 h 74.15586" + style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2379);marker-end:url(#marker2603)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="503.4252" + y="398.39056" + id="text6037" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan6035" + x="503.4252" + y="398.39056" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px">MAC</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2593)" + d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0" + id="path6039" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect6041" + inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" /> + <g + id="g6049" + transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-481.34174)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="3.4703755" + rx="4.1516762" + y="597.3775" + x="170.50954" + height="66.792107" + width="82.449463" + id="rect6043" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="196.83681" + y="634.75793" + id="text6047"><tspan + sodipodi:role="line" + id="tspan6045" + x="196.83681" + y="634.75793" + style="font-size:12px;line-height:1.25;stroke-width:0.759154">PHY0</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2583)" + d="m 384.95436,421.09977 h 57.10678" + id="path6051" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <rect + style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6063" + width="98.927353" + height="156.42606" + x="451.96918" + y="256.4408" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + id="g6067" + transform="matrix(0.55561808,0,0,0.69221152,213.03096,25.307814)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6065" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5659933" + ry="5.1820455" /> + </g> + <g + id="g6071" + transform="matrix(0.52272347,0,0,0.38979911,116.16864,284.7944)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6069" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + <text + id="text6075" + y="466.90259" + x="514.82501" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + id="tspan6073" + style="font-size:15.8071px;line-height:1.5;stroke-width:1" + y="466.90259" + x="514.82501" + sodipodi:role="line">fcs</tspan></text> + <g + id="g6089" + transform="matrix(1.1497588,0,0,1.4407663,19.004127,-562.07881)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g6083" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect6077" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g6081" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect6079" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text6087" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan6085" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">sync fifo</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2573)" + d="M 635.28669,405.2128 H 662.8143" + id="path6091" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path6093" + d="M 730.56236,405.2128 H 751.8489" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2563)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2553)" + d="M 817.24226,405.2128 H 838.5288" + id="path6095" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 477.98383,473.77743 v 13.12135" + id="path6097" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + id="g6111" + transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-633.00134)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g6105" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect6099" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g6103" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect6101" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text6109" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan6107" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">pkt_filter</tspan></text> + </g> + <g + transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-562.07881)" + id="g6125" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g6119" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect6113" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g6117" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6115" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text6123"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan6121">drop_fifo</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="624.61273" + y="383.18552" + id="text6129" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan6127" + x="624.61273" + y="383.18552" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">Layer 3/4</tspan></text> + <path + inkscape:connector-curvature="0" + id="path6131" + d="m 694.93209,355.93269 v 25.46554" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <rect + style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.315989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.315989, 2.52791;stroke-dashoffset:0;stroke-opacity:1" + id="rect6137" + width="177.53699" + height="136.55833" + x="648.30432" + y="295.49966" + transform="matrix(0.99999262,0.00384124,-0.00322815,0.99999479,0,0)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path6139" + d="m 236.36318,428.21014 h 74.15586" + style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2369);marker-end:url(#marker2543)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="503.4252" + y="398.39056" + id="text6169" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan6167" + x="503.4252" + y="398.39056" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px">MAC</tspan></text> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2533)" + d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0" + id="path6171" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect6173" + inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" /> + <g + transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-481.34174)" + id="g6181" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6175" + width="82.449463" + height="66.792107" + x="170.50954" + y="597.3775" + rx="4.1516762" + ry="3.4703755" /> + <text + id="text6179" + y="634.75793" + x="196.83681" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + style="font-size:12px;line-height:1.25;stroke-width:0.759154" + y="634.75793" + x="196.83681" + id="tspan6177" + sodipodi:role="line">PHY0</tspan></text> + </g> + <g + transform="matrix(0.55561808,0,0,0.69221152,213.03096,25.307814)" + id="g6197" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="5.1820455" + rx="9.5659933" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect6195" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <g + transform="matrix(0.52272347,0,0,0.38979911,116.16864,284.7944)" + id="g6201" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect6199" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="514.82501" + y="466.90259" + id="text6205" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + x="514.82501" + y="466.90259" + style="font-size:15.8071px;line-height:1.5;stroke-width:1" + id="tspan6203">fcs</tspan></text> + <g + transform="matrix(1.1497588,0,0,1.4407663,19.004127,-562.07881)" + id="g6219" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g6213" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect6207" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g6211" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6209" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text6217"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan6215">sync fifo</tspan></text> + </g> + <path + inkscape:connector-curvature="0" + id="path6221" + d="M 635.28669,405.2128 H 662.8143" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2523)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2513)" + d="M 730.56236,405.2128 H 751.8489" + id="path6223" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path6225" + d="M 817.24226,405.2128 H 838.5288" + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2503)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + inkscape:connector-curvature="0" + id="path6227" + d="m 477.98383,473.77743 v 13.12135" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-633.00134)" + id="g6241" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + id="g6235" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" + id="rect6229" + width="40" + height="114.28571" + x="875.10913" + y="718.02032" + rx="9.5719967" + ry="8.0417528" /> + <g + id="g6233" + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + style="stroke-width:0.759154"> + <rect + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6231" + width="128.28937" + height="88.893425" + x="630.25018" + y="519.97479" + rx="9.5719967" + ry="4.6261048" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + x="644.8136" + y="674.24408" + id="text6239"><tspan + sodipodi:role="line" + x="644.8136" + y="674.24408" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + id="tspan6237">pkt_filter</tspan></text> + </g> + <g + id="g6255" + transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-562.07881)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <g + id="g6249" + transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)" + style="stroke-width:0.759154"> + <rect + ry="8.0417528" + rx="9.5719967" + y="718.02032" + x="875.10913" + height="114.28571" + width="40" + id="rect6243" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" /> + <g + transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)" + id="g6247" + style="stroke-width:0.759154"> + <rect + ry="4.6261048" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect6245" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <text + id="text6253" + y="674.24408" + x="644.8136" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154" + xml:space="preserve"><tspan + id="tspan6251" + style="font-size:12px;line-height:1.5;stroke-width:0.759154" + y="674.24408" + x="644.8136" + sodipodi:role="line">drop_fifo</tspan></text> + </g> + <text + id="text6259" + y="383.18552" + x="624.61273" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1" + y="383.18552" + x="624.61273" + id="tspan6257" + sodipodi:role="line">Layer 3/4</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)" + d="m 694.93209,355.93269 v 25.46554" + id="path6261" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7083);marker-end:url(#marker7113)" + d="m 236.36318,428.21014 h 74.15586" + id="path6267" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="277.65887" + y="387.25879" + id="text6271" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + sodipodi:role="line" + id="tspan6269" + x="277.65887" + y="387.25879" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.0508px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">RGMII</tspan></text> + <text + id="text6297" + y="398.39056" + x="503.4252" + style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px" + y="398.39056" + x="503.4252" + id="tspan6295" + sodipodi:role="line">MAC</tspan></text> + <path + inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:path-effect="#path-effect6301" + inkscape:connector-curvature="0" + id="path6299" + d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2487)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" /> + <g + id="g3" + transform="matrix(1.2043329,0,0,1.4407663,52.732811,-66.401049)" + style="stroke-width:0.759154"> + <g + transform="matrix(0.46153494,0,0,0.36644536,-75.027742,276.8085)" + id="g2" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="3.6146636" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect2" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:24px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="224.49301" + y="488.05219" + id="text3" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95"><tspan + sodipodi:role="line" + id="tspan3" + x="224.49301" + y="488.05219" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:0.759154px">DDRIO</tspan></text> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:1.00193;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7027)" + d="m 442.44046,642.97778 h -56.6072" + id="path3" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + id="text4" + y="561.9386" + x="435.38718" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-size:15.8071px;line-height:1.25;stroke-width:1" + y="561.9386" + x="435.38718" + id="tspan4" + sodipodi:role="line">rx1_d</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="435.88388" + y="583.01465" + id="text5" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-size:15.8071px;line-height:1.25;stroke-width:1" + sodipodi:role="line" + id="tspan5" + x="435.88388" + y="583.01465">tx1_d</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2583)" + d="m 384.95436,619.92552 h 57.10678" + id="path5" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.00193;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7027)" + d="m 442.80564,864.3552 h -56.6072" + id="path6" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <text + id="text6" + y="764.58661" + x="433.6488" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-size:15.8071px;line-height:1.25;stroke-width:1" + y="764.58661" + x="433.6488" + id="tspan6" + sodipodi:role="line">rx2_d</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="433.89716" + y="785.66272" + id="text7" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-size:15.8071px;line-height:1.25;stroke-width:1" + sodipodi:role="line" + id="tspan7" + x="433.89716" + y="785.66272">tx2_d</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2583)" + d="m 382.91087,841.30294 h 57.10678" + id="path7" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" /> + <g + id="g8" + transform="matrix(1.2043329,0,0,1.4407663,52.732811,-268.10833)" + style="stroke-width:0.759154"> + <g + transform="matrix(0.46153494,0,0,0.36644536,-75.027742,276.8085)" + id="g7" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="3.6146636" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect7" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:24px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="224.49301" + y="488.05219" + id="text8" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95"><tspan + sodipodi:role="line" + id="tspan8" + x="224.49301" + y="488.05219" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:0.759154px">DDRIO</tspan></text> + </g> + <g + id="g10" + transform="matrix(1.2043329,0,0,1.4407663,52.732811,155.47695)" + style="stroke-width:0.759154"> + <g + transform="matrix(0.46153494,0,0,0.36644536,-75.027742,276.8085)" + id="g9" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + style="stroke-width:0.759154"> + <rect + ry="3.6146636" + rx="9.5719967" + y="519.97479" + x="630.25018" + height="88.893425" + width="128.28937" + id="rect8" + style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:24px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="224.49301" + y="488.05219" + id="text9" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95"><tspan + sodipodi:role="line" + id="tspan9" + x="224.49301" + y="488.05219" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:0.759154px">DDRIO</tspan></text> + </g> + <path + inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:path-effect="#path-effect2" + inkscape:connector-curvature="0" + id="path1" + d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2487)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(-1.2043329,0,0,1.4407663,1599.9174,-72.164114)" /> + <path + inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:path-effect="#path-effect4" + inkscape:connector-curvature="0" + id="path2" + d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2487)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(-1.2043329,0,0,1.4407663,1599.9174,-56.315685)" /> + <path + inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0" + inkscape:path-effect="#path-effect9" + inkscape:connector-curvature="0" + id="path8" + d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2487)" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="matrix(-1.2043329,0,0,1.4407663,1599.9174,-40.467257)" /> + <text + xml:space="preserve" + style="font-size:24.5888px;font-family:'System Font';-inkscape-font-specification:'System Font';text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + x="-432.30255" + y="1188.6198" + id="text11" + transform="matrix(0,-1.0937637,0.91427428,0,0,0)"><tspan + sodipodi:role="line" + id="tspan11" + x="-432.30255" + y="1188.6198" + style="stroke-width:1">. . .</tspan></text> + <text + id="text12" + y="364.19269" + x="1175.2745" + style="font-style:normal;font-weight:normal;font-size:14.0508px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1" + xml:space="preserve" + inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png" + inkscape:export-xdpi="121.95" + inkscape:export-ydpi="121.95" + transform="scale(0.91427428,1.0937637)"><tspan + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.0508px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, Italic';stroke-width:1" + y="364.19269" + x="1175.2745" + id="tspan12" + sodipodi:role="line">from rx modules</tspan></text> + <g + id="g1" + transform="matrix(1.1360788,0,0,1.3591126,97.301533,-665.77706)" + style="stroke-width:0.804764;stroke-dasharray:none"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke-width:0.804764;stroke-dasharray:none" + x="760.11414" + y="734.03497" + id="text100"><tspan + sodipodi:role="line" + id="tspan98" + x="760.11414" + y="734.03497" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke-width:0.804764;stroke-dasharray:none">Private Island </tspan></text> + <text + xml:space="preserve" + style="font-size:10.6667px;line-height:1.25;font-family:sans-serif;stroke-width:0.804764;stroke-dasharray:none" + x="842.01526" + y="728.91071" + id="text112"><tspan + sodipodi:role="line" + id="tspan110" + x="842.01526" + y="728.91071" + style="font-size:10.6667px;stroke-width:0.804764;stroke-dasharray:none">®</tspan></text> + <g + id="g4423" + transform="matrix(4.8449659,0,0,4.8449659,356.43756,14.083193)" + style="stroke-width:0.166103;stroke-dasharray:none"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.752px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke-width:0.166103;stroke-dasharray:none" + x="83.290543" + y="151.25542" + id="text4417"><tspan + sodipodi:role="line" + x="83.290543" + y="151.25542" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.752px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke-width:0.166103;stroke-dasharray:none" + id="tspan4585">Machine Learning Enabled</tspan></text> + <text + xml:space="preserve" + style="font-size:2.82222px;line-height:1.25;font-family:sans-serif;stroke-width:0.166103;stroke-dasharray:none" + x="178.67143" + y="176.17197" + id="text4421"><tspan + sodipodi:role="line" + id="tspan4419" + x="178.67143" + y="176.17197" + style="font-size:2.82222px;stroke-width:0.166103;stroke-dasharray:none" /></text> + </g> + </g> + </g> +</svg> |



