1 \documentclass[dvipsnames,14pt,t, xelatex]{beamer} |
1 \documentclass[dvipsnames,14pt,t, xelatex]{beamer} |
2 \usepackage{beamerthemeplaincu} |
2 \usepackage{beamerthemeplaincu} |
3 \usepackage{fontenc,xltxtra,xunicode} |
3 \usepackage{fontenc,xltxtra,xunicode} |
4 \defaultfontfeatures{Mapping=tex-text} |
4 \defaultfontfeatures{Mapping=tex-text} |
5 \usepackage[latin1]{inputenc} |
5 %%\usepackage[latin1]{inputenc} |
6 \usepackage{mathpartir} |
6 \usepackage{mathpartir} |
7 \usepackage[absolute,overlay]{textpos} |
7 \usepackage[absolute,overlay]{textpos} |
8 \usepackage{ifthen} |
8 \usepackage{ifthen} |
9 \usepackage{tikz} |
9 \usepackage{tikz} |
10 \usepackage{pgf} |
10 \usepackage{pgf} |
11 \usepackage{calc} |
11 \usepackage{calc} |
12 \usepackage{ulem} |
12 \usepackage{ulem} |
13 \usepackage{courier} |
13 %%\usepackage{courier} |
14 \usepackage{listings} |
14 \usepackage{listings} |
15 \renewcommand{\uline}[1]{#1} |
15 \renewcommand{\uline}[1]{#1} |
16 \usetikzlibrary{arrows} |
16 \usetikzlibrary{arrows} |
17 \usetikzlibrary{automata} |
17 \usetikzlibrary{automata} |
18 \usetikzlibrary{shapes} |
18 \usetikzlibrary{shapes} |
25 \definecolor{javared}{rgb}{0.6,0,0} % for strings |
25 \definecolor{javared}{rgb}{0.6,0,0} % for strings |
26 \definecolor{javagreen}{rgb}{0.25,0.5,0.35} % comments |
26 \definecolor{javagreen}{rgb}{0.25,0.5,0.35} % comments |
27 \definecolor{javapurple}{rgb}{0.5,0,0.35} % keywords |
27 \definecolor{javapurple}{rgb}{0.5,0,0.35} % keywords |
28 \definecolor{javadocblue}{rgb}{0.25,0.35,0.75} % javadoc |
28 \definecolor{javadocblue}{rgb}{0.25,0.35,0.75} % javadoc |
29 |
29 |
|
30 \makeatletter |
|
31 \lst@CCPutMacro\lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{-{}}} |
|
32 \@empty\z@\@empty |
|
33 \makeatother |
|
34 |
30 \lstset{language=Java, |
35 \lstset{language=Java, |
31 basicstyle=\ttfamily, |
36 basicstyle=\consolas, |
32 keywordstyle=\color{javapurple}\bfseries, |
37 keywordstyle=\color{javapurple}\bfseries, |
33 stringstyle=\color{javagreen}, |
38 stringstyle=\color{javagreen}, |
34 commentstyle=\color{javagreen}, |
39 commentstyle=\color{javagreen}, |
35 morecomment=[s][\color{javadocblue}]{/**}{*/}, |
40 morecomment=[s][\color{javadocblue}]{/**}{*/}, |
36 numbers=left, |
41 numbers=left, |
47 for,if,implicit,import,match,mixin,% |
52 for,if,implicit,import,match,mixin,% |
48 new,null,object,override,package,% |
53 new,null,object,override,package,% |
49 private,protected,requires,return,sealed,% |
54 private,protected,requires,return,sealed,% |
50 super,this,throw,trait,true,try,% |
55 super,this,throw,trait,true,try,% |
51 type,val,var,while,with,yield}, |
56 type,val,var,while,with,yield}, |
52 otherkeywords={=>,<-,<\%,<:,>:,\#,@}, |
57 otherkeywords={=>,<-,<\%,<:,>:,\#,@,->}, |
53 sensitive=true, |
58 sensitive=true, |
54 morecomment=[l]{//}, |
59 morecomment=[l]{//}, |
55 morecomment=[n]{/*}{*/}, |
60 morecomment=[n]{/*}{*/}, |
56 morestring=[b]", |
61 morestring=[b]", |
57 morestring=[b]', |
62 morestring=[b]', |
58 morestring=[b]""" |
63 morestring=[b]""" |
59 } |
64 } |
60 |
65 |
61 \lstset{language=Scala, |
66 \lstset{language=Scala, |
62 basicstyle=\ttfamily, |
67 basicstyle=\consolas, |
63 keywordstyle=\color{javapurple}\bfseries, |
68 keywordstyle=\color{javapurple}\bfseries, |
64 stringstyle=\color{javagreen}, |
69 stringstyle=\color{javagreen}, |
65 commentstyle=\color{javagreen}, |
70 commentstyle=\color{javagreen}, |
66 morecomment=[s][\color{javadocblue}]{/**}{*/}, |
71 morecomment=[s][\color{javadocblue}]{/**}{*/}, |
67 numbers=left, |
72 numbers=left, |
243 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
249 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
244 |
250 |
245 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
251 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
246 \mode<presentation>{ |
252 \mode<presentation>{ |
247 \begin{frame}[c] |
253 \begin{frame}[c] |
|
254 \frametitle{\begin{tabular}{@ {}c@ {}}Breaking Things\end{tabular}} |
|
255 |
|
256 For example: |
|
257 |
|
258 \begin{center} |
|
259 \begin{tikzpicture} |
|
260 \draw (0,0) node[inner sep=2mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
|
261 {\normalsize\color{darkgray} |
|
262 \begin{minipage}{10cm}\raggedright\small |
|
263 Prof.~V.~Nasty gives the following final exam question (closed books, closed notes):\bigskip |
|
264 |
|
265 \noindent |
|
266 \begin{tabular}{@ {}l} |
|
267 Write the first 100 digits of pi:\\ |
|
268 3.\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_\,\_ |
|
269 \end{tabular} |
|
270 \end{minipage}}; |
|
271 \end{tikzpicture} |
|
272 \end{center} |
|
273 |
|
274 How do you ``break'' this and how to defend against it? |
|
275 |
|
276 \end{frame}} |
|
277 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
278 |
|
279 |
|
280 |
|
281 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
282 \mode<presentation>{ |
|
283 \begin{frame}[c] |
248 \frametitle{\begin{tabular}{@ {}c@ {}}Chip-and-PIN\end{tabular}} |
284 \frametitle{\begin{tabular}{@ {}c@ {}}Chip-and-PIN\end{tabular}} |
249 |
285 |
250 \begin{center} |
286 \begin{center} |
251 \includegraphics[scale=0.3]{pics/creditcard1.jpg}\; |
287 \includegraphics[scale=0.3]{pics/creditcard1.jpg}\; |
252 \includegraphics[scale=0.3]{pics/creditcard2.jpg} |
288 \includegraphics[scale=0.3]{pics/creditcard2.jpg} |
440 \includegraphics[scale=0.01]{pics/andersonbook1.jpg}\; |
476 \includegraphics[scale=0.01]{pics/andersonbook1.jpg}\; |
441 \includegraphics[scale=1.5]{pics/anderson.jpg} |
477 \includegraphics[scale=1.5]{pics/anderson.jpg} |
442 \end{flushright} |
478 \end{flushright} |
443 |
479 |
444 \begin{itemize} |
480 \begin{itemize} |
445 \item same group successfully attacked this year card readers and ATM machines |
481 \item same group successfully attacked in 2012 card readers and ATM machines |
446 \item the problem: several types of ATMs generate poor random numbers, which are used as nonces |
482 \item the problem: several types of ATMs generate poor random numbers, which are used as nonces |
447 \end{itemize} |
483 \end{itemize} |
448 |
484 |
449 \end{frame}} |
485 \end{frame}} |
450 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
486 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
451 |
487 |
452 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
488 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
453 \mode<presentation>{ |
489 \mode<presentation>{ |
454 \begin{frame}[c] |
490 \begin{frame}[c] |
455 \frametitle{\begin{tabular}{c}The Problem \ldots\end{tabular}} |
491 \frametitle{\begin{tabular}{c}The Real Problem \ldots\end{tabular}} |
456 |
492 |
457 |
493 |
458 \begin{textblock}{1}(3,4) |
494 \begin{textblock}{1}(3,4) |
459 \begin{tabular}{c} |
495 \begin{tabular}{c} |
460 \includegraphics[scale=0.3]{pics/bank.png}\\[-2mm] |
496 \includegraphics[scale=0.3]{pics/bank.png}\\[-2mm] |
518 \end{tikzpicture} |
554 \end{tikzpicture} |
519 \end{textblock} |
555 \end{textblock} |
520 |
556 |
521 \begin{textblock}{14}(1,13.5) |
557 \begin{textblock}{14}(1,13.5) |
522 \begin{itemize} |
558 \begin{itemize} |
523 \item the burden of proof for fraud and financial liability was shifted to the costumer |
559 \item the burden of proof for fraud and financial liability was shifted to the costumer (until approx.~2009/10) |
524 \end {itemize} |
560 \end {itemize} |
525 \end{textblock} |
561 \end{textblock} |
526 |
562 |
527 \end{frame}} |
563 \end{frame}} |
528 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
564 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
565 |
|
566 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
567 \mode<presentation>{ |
|
568 \begin{frame} |
|
569 \frametitle{\begin{tabular}{@ {}c@ {}}The Bad Guy Again\end{tabular}} |
|
570 |
|
571 |
|
572 \only<1->{ |
|
573 \begin{textblock}{1}(1,4) |
|
574 \begin{tikzpicture} |
|
575 \draw (0,0) node[inner sep=2mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
|
576 {\normalsize\color{darkgray} |
|
577 \begin{minipage}{11cm}\raggedright\footnotesize |
|
578 ``The Annonymous Hacker from earlier:\medskip\\ |
|
579 Try to use `Verified-By-Visa' and `Mastercard-Securecode' as rarely as possible. If only your CVV2 code is getting sniffed, you are not liable for any damage, because the code is physically printed and could have been stolen while you payed with your card at a store. Same applies if someone cloned your CC reading the magnetic stripe or sniffing RFID. Only losing your VBV or MCSC password can cause serious trouble.''\\ |
|
580 \hfill{}\textcolor{blue}{\url{goo.gl/UWluh0}} |
|
581 \end{minipage}}; |
|
582 \end{tikzpicture} |
|
583 \end{textblock}} |
|
584 |
|
585 |
|
586 \end{frame}} |
|
587 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
588 |
|
589 |
529 |
590 |
530 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
591 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
531 \mode<presentation>{ |
592 \mode<presentation>{ |
532 \begin{frame}[c] |
593 \begin{frame}[c] |
533 \frametitle{\begin{tabular}{c}Being Screwed Again\end{tabular}} |
594 \frametitle{\begin{tabular}{c}Being Screwed Again\end{tabular}} |
592 |
653 |
593 |
654 |
594 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
655 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
595 \mode<presentation>{ |
656 \mode<presentation>{ |
596 \begin{frame}[c] |
657 \begin{frame}[c] |
|
658 \frametitle{\begin{tabular}{c}Why Scala?\end{tabular}} |
|
659 |
|
660 \begin{textblock}{6}(1,3) |
|
661 \begin{tabular}{l} |
|
662 \mbox{}\hspace{-1mm}\includegraphics[scale=0.36]{pics/twitter.png}\\[-1mm] |
|
663 \includegraphics[scale=0.30]{pics/linked.png}\\ |
|
664 \includegraphics[scale=0.30]{pics/guardian.jpg}\\[-3mm] |
|
665 \mbox{}\hspace{-2mm}\includegraphics[scale=0.38]{pics/morgan.png}\\[-3mm] |
|
666 \includegraphics[scale=0.30]{pics/suisse.png}\\ |
|
667 \includegraphics[scale=0.20]{pics/edf.png}\\[-1mm] |
|
668 \includegraphics[scale=0.08]{pics/novell.png}\\[-1mm] |
|
669 \includegraphics[scale=0.30]{pics/foursquare.png}\\ |
|
670 \includegraphics[scale=0.30]{pics/hsbc.png}\\ |
|
671 {\large\bf ...} |
|
672 \end{tabular} |
|
673 \end{textblock} |
|
674 |
|
675 \only<2->{ |
|
676 \begin{textblock}{6}(6,3) |
|
677 \includegraphics[scale=0.35]{pics/jobgraph.png}\\ |
|
678 \end{textblock}} |
|
679 |
|
680 \only<3->{ |
|
681 \begin{textblock}{6}(7.3,9.2) |
|
682 \begin{tabular}{l} |
|
683 \footnotesize 2013: 1$\%$\\[-2mm] |
|
684 \footnotesize 2014: 3$\%$\\[-2mm] |
|
685 \footnotesize 2015: 9$\%$\\[-2mm] |
|
686 \footnotesize 2016: 27$\%$\\[-2mm] |
|
687 \footnotesize 2017: 81$\%$\\[-2mm] |
|
688 \footnotesize 2018: 243$\%$ \raisebox{-1mm}{\includegraphics[scale=0.02]{pics/smiley.jpg}} |
|
689 \end{tabular} |
|
690 \end{textblock}} |
|
691 |
|
692 \only<3->{ |
|
693 \begin{textblock}{6}(6,9.5) |
|
694 \footnotesize 5 yrs $\begin{cases}\mbox{}\\[1.4cm]\end{cases}$ |
|
695 \end{textblock}} |
|
696 |
|
697 \only<4->{ |
|
698 \begin{textblock}{11}(5,14.1) |
|
699 \textcolor{gray}{ |
|
700 \footnotesize {\bf in London today:} 1 Scala job for every 30 Java jobs;\\[-2mm] |
|
701 Scala programmers seem to get up to 20\% better salary} |
|
702 \end{textblock}} |
|
703 |
|
704 |
|
705 \only<5->{ |
|
706 \begin{textblock}{1}(3,6) |
|
707 \begin{tikzpicture} |
|
708 \draw (0,0) node[inner sep=2mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
|
709 {\normalsize\color{darkgray} |
|
710 \begin{minipage}{8.5cm}\raggedright\normalsize |
|
711 Scala is a functional and object-oriented programming language; compiles to the JVM; does not |
|
712 need null-pointer exceptions; a course on Coursera\\ |
|
713 \mbox{}\hfill\textcolor{blue}{\url{http://www.scala-lang.org}} |
|
714 \end{minipage}}; |
|
715 \end{tikzpicture} |
|
716 \end{textblock}} |
|
717 |
|
718 |
|
719 \end{frame}} |
|
720 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
721 |
|
722 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
723 \mode<presentation>{ |
|
724 \begin{frame}[c] |
597 \frametitle{\begin{tabular}{c}Scala + Play\end{tabular}} |
725 \frametitle{\begin{tabular}{c}Scala + Play\end{tabular}} |
598 |
726 |
599 \footnotesize a simple response from the server: |
727 \small a simple response from the server: |
|
728 |
600 |
729 |
601 {\lstset{language=Scala}\fontsize{8}{10}\selectfont |
730 {\lstset{language=Scala}\fontsize{8}{10}\selectfont |
602 \texttt{\lstinputlisting{../progs/app0.scala}}}\bigskip |
731 \texttt{\lstinputlisting{../progs/app0.scala}}}\bigskip |
603 |
732 |
604 \footnotesize |
733 \small |
605 alternative response:\\ |
734 alternative response:\\ |
606 |
735 |
607 {\lstset{language=Scala}\fontsize{8}{10}\selectfont |
736 {\lstset{language=Scala}\fontsize{8}{10}\selectfont |
608 \texttt{\lstinline{Ok("<H1>Hello world!</H1>").as(HTML)}}} |
737 \texttt{\lstinline{Ok("<H1>Hello world!</H1>").as(HTML)}}} |
609 \end{frame}} |
738 \end{frame}} |
610 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
739 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
740 |
|
741 |
611 |
742 |
612 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
743 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
613 \mode<presentation>{ |
744 \mode<presentation>{ |
614 \begin{frame}[c] |
745 \begin{frame}[c] |
615 |
746 |
676 \draw (0,0) node[inner sep=2mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
807 \draw (0,0) node[inner sep=2mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
677 {\normalsize\color{darkgray} |
808 {\normalsize\color{darkgray} |
678 \begin{minipage}{10cm}\raggedright\small |
809 \begin{minipage}{10cm}\raggedright\small |
679 {\bf EU Privacy Directive about Cookies:}\smallskip\\ |
810 {\bf EU Privacy Directive about Cookies:}\smallskip\\ |
680 ``In May 2011, a European Union law was passed stating that websites that leave non-essential cookies on visitors' devices have to alert the visitor and get acceptance from them. This law applies to both individuals and businesses based in the EU regardless of the nationality of their website's visitors or the location of their web host. It is not enough to simply update a website's terms and conditions or privacy policy. The deadline to comply with the new EU cookie law was 26th May 2012 and failure to do so could mean a fine of up to \pounds{}500,000.'' |
811 ``In May 2011, a European Union law was passed stating that websites that leave non-essential cookies on visitors' devices have to alert the visitor and get acceptance from them. This law applies to both individuals and businesses based in the EU regardless of the nationality of their website's visitors or the location of their web host. It is not enough to simply update a website's terms and conditions or privacy policy. The deadline to comply with the new EU cookie law was 26th May 2012 and failure to do so could mean a fine of up to \pounds{}500,000.'' |
681 \hfill\small\textcolor{gray}{$\rightarrow$BBC News} |
812 \hfill\small\textcolor{gray}{$\rightarrow$BBC News}, \textcolor{blue}{\url{goo.gl/RI4qhh}} |
682 \end{minipage}}; |
813 \end{minipage}}; |
683 \end{tikzpicture} |
814 \end{tikzpicture} |
684 \end{textblock}} |
815 \end{textblock}} |
685 |
816 |
686 \end{frame}} |
817 \end{frame}} |
842 |
973 |
843 \begin{itemize} |
974 \begin{itemize} |
844 \item SHA-1 is a cryptographic hash function\\ |
975 \item SHA-1 is a cryptographic hash function\\ |
845 (MD5, SHA-256, SHA-512, \ldots) |
976 (MD5, SHA-256, SHA-512, \ldots) |
846 \item message $\rightarrow$ digest |
977 \item message $\rightarrow$ digest |
847 \item no known attack exists, except brute force\bigskip\pause |
978 \item attack exists $2^{80} \rightarrow 2^{61}$ \bigskip\pause |
848 \item but dictionary attacks are very ef$\!$fective for extracting passwords (later) |
979 \item but dictionary attacks are very ef$\!$fective for extracting passwords (later) |
849 \end{itemize} |
980 \end{itemize} |
850 |
981 |
851 \end{frame}} |
982 \end{frame}} |
852 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
983 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
867 \draw[red, <-, line width = 2mm] (X) -- (Y); |
998 \draw[red, <-, line width = 2mm] (X) -- (Y); |
868 \node [inner sep=5pt,label=above:\textcolor{black}{\small should be random}] at ($ (X)!.5!(Y) $) {}; |
999 \node [inner sep=5pt,label=above:\textcolor{black}{\small should be random}] at ($ (X)!.5!(Y) $) {}; |
869 \end{tikzpicture} |
1000 \end{tikzpicture} |
870 \end{textblock} |
1001 \end{textblock} |
871 |
1002 |
872 \begin{textblock}{1}(6.6,4.9) |
1003 \begin{textblock}{1}(6.6,5.1) |
873 \begin{tikzpicture}[scale=1.3] |
1004 \begin{tikzpicture}[scale=1.3] |
874 \draw[white] (0,0) node (X) {}; |
1005 \draw[white] (0,0) node (X) {}; |
875 \draw[white] (1,-1) node (Y) {}; |
1006 \draw[white] (1,-1) node (Y) {}; |
876 \draw[red, <-, line width = 2mm] (X) -- (Y); |
1007 \draw[red, <-, line width = 2mm] (X) -- (Y); |
877 \node [inner sep=5pt,label=above:{}] at ($ (X)!.5!(Y) $) {}; |
1008 \node [inner sep=5pt,label=above:{}] at ($ (X)!.5!(Y) $) {}; |