diff --git a/assets/css/main.less b/assets/css/main.less index 01a871d..8c28455 100644 --- a/assets/css/main.less +++ b/assets/css/main.less @@ -79,6 +79,10 @@ body{ scrollbar-width: thin; } +body .commento-root *{ + color: @gb-dm-fg0; +} + .container{ display: flex; flex-direction: row-reverse; @@ -150,6 +154,30 @@ img{ max-width: 100%; } +blockquote{ + border-left: 0.5em solid @gb-dm-fg3; + margin-left: 0; + padding-left: 1em; +} + +table{ + border-collapse: collapse; +} + +tr:hover{ + background-color: @gb-dm-bg2; +} + +td,th{ + padding: 0.5em; + border: 1px solid @gb-dm-fg3; +} + +th{ + background-color: @gb-lm-bg0-soft; + color: @gb-lm-fg0; +} + .blog-name{ font-size: 2rem; font-weight: 400; @@ -181,8 +209,6 @@ ul.tags{ } } - - a, a:visited{ color: @gb-dm-light-aqua; } @@ -212,7 +238,18 @@ p code, li code{ } } - +.tip{ + background-color: @gb-lm-light-green; + border: 3px solid @gb-lm-dark-green; + padding: 1em; + &::before{ + content: "Tip:"; + text-transform: uppercase; + text-align: center; + font-weight: bold; + display: block; + } +} //Pandoc styles code{white-space: pre-wrap;} @@ -304,4 +341,3 @@ code span.st { color: @gb-dm-dark-yellow; } /* String */ code span.va { color: @gb-dm-dark-red; } /* Variable */ code span.vs { color: #4070a0; } /* VerbatimString */ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */ - diff --git a/assets/key/jonathan-hodgson-ecc.asc b/assets/key/jonathan-hodgson-ecc.asc new file mode 100644 index 0000000..6b5da4d --- /dev/null +++ b/assets/key/jonathan-hodgson-ecc.asc @@ -0,0 +1,15 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: OpenPGP.js v4.10.4 +Comment: https://openpgpjs.org + +xjMEXMLhpBYJKwYBBAHaRw8BAQdAdP4j18qDM+5einbcOoMmbygC7blelM2D +1WjQ/QK4CzXNNSJqb25hdGhhbkBqb25hdGhhbmguY28udWsiIDxqb25hdGhh +bkBqb25hdGhhbmguY28udWs+wncEEBYKAB8FAlzC4aQGCwkHCAMCBBUICgID +FgIBAhkBAhsDAh4BAAoJEESBz3saoNE4wecA/R94tVukEZISL8dPYN17+JLl +QYo5U9NpSlYM1bjbKdqPAQDophGzo6KaCwNkm3/05xJvf+ZnsOBTG4PkvPFJ +5XZZAM44BFzC4aQSCisGAQQBl1UBBQEBB0BgX9KpJi1EvI74EU5jb4PVjo+H +0DuuN58sodzsIpQQDgMBCAfCYQQYFggACQUCXMLhpAIbDAAKCRBEgc97GqDR +OGapAPwNdh8veidfCqZuXoyBfdRGPRv9zb7pA3JvP85hMsTxXgEAld6Rqey2 +dw17AxOy5uHs/nj/3Zwl2SvGNR4htgPv1go= +=qcW+ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/assets/key/jonathan-hodgson-rsa.asc b/assets/key/jonathan-hodgson-rsa.asc new file mode 100644 index 0000000..b60c20e --- /dev/null +++ b/assets/key/jonathan-hodgson-rsa.asc @@ -0,0 +1,56 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: OpenPGP.js v4.10.4 +Comment: https://openpgpjs.org + +xsFNBFyP9g8BEADc2ljwXe+WWTGXr4m6A0MxRu0CDMO++HayoEt7OynSPyec +kHs6k7tPjwJ+OcxAGiQ/FD3yuJDR/5xxwL61bqiF8CTw62fA2vS8J8PNiQ+g +wDrM1Gl/iUrRuD3L68NTRk7Ru0l3QIUCRwf/fphSP2D0TFT8JP8cLkAcRhee +3oElE2Gi8/qowW+xzXRcYLQnxks22Nai2p1SCzwIUSxx06lvfapuf16FVpZO +0+U+E73r2XDgFVk+MhFugZ57xgnBwTKWCorzIgQXU+DLbeFZp1yMS6aMQENi +mTX6ATLgDxVk7JeNjk8scQ/pqPGkA5oC6agxBJJWrRn5/8W13//7EQlwyMqP +zWanioniavwvX1PkJgLUrAuCjderqTKrIk0cor3H4pAqQYKySFdOGTX2b28k +WO6M15yFoRYLzIl7kKzr7kg4fXF/0TptkrbLmQD0HG2iqOPcB8vp6B7qPe7T +lL3IXyv7C9kSL7xhReO6hg7pjdrWfp7n8ZOPXhj/jmmjkx3+8wsNLga80s1C +uplJveuGSO4OUyrekt9ZRtL6KcT/TFoB98x/I0JPr7lsF/U3ObzExFuBTwtl +pOvKmhbcg8vE8HzwROlAJdtukonCtlMNo2Gj9+QlujMUH5EOIMhc+uIh6v2m +SntJ3mIPMgA3yZ6XsYpK8Bwy4yjJc+XIvtoF0QARAQABzTUiam9uYXRoYW5A +am9uYXRoYW5oLmNvLnVrIiA8am9uYXRoYW5Aam9uYXRoYW5oLmNvLnVrPsLB +dQQQAQgAHwUCXI/2DwYLCQcIAwIEFQgKAgMWAgECGQECGwMCHgEACgkQ1slB +UCE4fEg2EhAAk9RDhBV4gaHlhNejUQhxwPrXJ2C/mHD2FafcpsNrWDykgfNg +9iqQ5gN57xuHNK2MWxK0qTEtKBlW4KpYxoyG6zvt2ebpE2FTx/tCKlJ5BPHn +Dx8g94MPWcK08eXQcS2BfM8PLFDmw2+B0m+aJ+O94SDgsbi1SDM6UuqyodG5 +4E49Lqhk1Rl9gE43NYCi1QpRoHFkd9MQkslHEIuvAY544AQ8iO0jXowUSIym +OBC8bXqWdLaS9SY6tTDFtBB56ClyYidFK1buiJPV/k8LYmgZy2ep463CL4n+ +1mjxH8LMW2Ywx80XQx0XXJxDgt5XjRfzX2btQtx8PdatXLUxp97kL4G64B2S +BJs/B7asjRtq3PkFl+LywrguyLyZ3xlcsJAeeQVDlw6lDWcdyK6mZY5LVNA2 +wtom6Orn4ctx3YyaQEHSAevkO5YTk4FA/s5/ToLtV/lyHJ7oy8vmsbnri+i/ +UHOeevkCgP1Y9Y6/FH4lCJ1Yqtqmq0rT4qJnr3S6vFkPL8lx+aeTcvPm/Aeb +Qul/CYlSxmUAum/pA1Fsq5heRD1mxro9kqq95cSpIsdFmgoVOkngMPf2NPVt +4Y/VLHBoevd327+uUmjl1VjpAaccT6BX4J57dCjINQcrgAppAvMvpN6eoebk +XYaycTnSZ+Sd2jIWEKxadAPBK4cv1fXtoiTOwU0EXI/2DwEQAK9VW2MPxr96 +GddgjO7Z8XYUKtgMWIxGtD9/WYGTnYGkje10QIGQRlsDtiJAJUBcaSNDIxrr +cPE9n7SkaaLUx9IH7X9g6LmiSPwdkI9ImX0AOzyjIrzbXcttoyYFrsMovF9B +dzjzDAzXZNkncB+L1GWvNP1UsnTWl9o/wVtuyWVCKSh1JArDC0QES4ysHoit +fu6ezx36woO8SBCY9lvcEJb/5kp9UXnWND9imYYrDj0+htEvq+Ne91I8eGMa +uUxBeiBgRwMzG9tXwJE6K1SeGu5jPIDfXfmcyZUlpRyOChTDcTRM1hPuLQXL +QIJO2RgtK6B4cQBZ8OyDSxgMlVWpPyCJFMAABg24hJGonNavIvOr7zlTCXt4 +bLCMrtgrbSFws9o7a9p9SE6RM00PQgZurFUqPWHOe5fXAWHhmINl8yLH7h7T +gXebUFJhf50YQsFJkjy3krOXWyYMZ2Wlc+TLItMVSoVfmtHyQj2KVXcGOt18 +l+c9LDW46pDGFrvMMU5eo2sWm4PNO7471SzlYybORu8LyhrgFSDyuvb7r53A +mW4c7sLaoCd3mg3LOUm27pOgDjC4n2f4ev9aoYw4r+H35xXIQS85kWYVIrvG +AZLWl7GBiOpk0HiaY01o9yx/ED9oupxh7TRvGrNqg81tHp+h+8HG7SNO10wp +f+ZCeqqJAqHJABEBAAHCwV8EGAEIAAkFAlyP9g8CGwwACgkQ1slBUCE4fEiW +MA/+PjF0xU7RMhh50lHkzrLQ3iAGjV8GV7HzdjIypqpSpReODTR8iqfM6WDu +CCntEUTPaGnCBdpIyOA0gRz+Lpb43JCAUvZiw5EsGqdZZuboIskSSCKszHpB +QxuJLcFpT8ELqiVEAAD7lkQGDYu72iME7+rn3tMG7NbuV3ayVF1l2C4cSnC1 +nbDDxtdq0jDOQPZ1rdqkSnDJcB1YIHblOlHcuE6dyOdtuKBnVcgprlevrPgk +nefHyBnOk1PF9HiPTkNFRo6RvD01kPJkWV8CRicafL2+y8sl6nRgjoNMjYbv +D3lyHmhPDxWt8HlRw2sm3DrfVdb//4IlqDu4qCMsRUMF7Bdh72rHkq4j7quC +l7edYn0JASetV4uanoYvFDPRiIE+vXnME4scKCiMIg+nMM3+7K5cEjDZsOXg +hmvK4HItivUk1e0adxeXzPwsfLU0HyGovumN39GLxV0fU9nVTTT4jIR8rpSL +f8C23A1NfZMDqoL01RZ71uA6SRcsznd2debM5YtRGWJWI24f78NMmFAeX0Hb +FM1aKsSfeuCYSrmiiDUttHNKUCjKgx+C2w68tTuYFxt4GI25dMFr8OszVIt9 +hJV5vVOp/78gR4rImj9aaa8z6vptmrM57nPk1U/27s2Qf4k0C8UlnaEihMXf +YDlctaOrI9VzScwGG3H7z+kzCKU= +=h4NF +-----END PGP PUBLIC KEY BLOCK----- diff --git a/assets/pappy/password-brute.cast b/assets/pappy/password-brute.cast new file mode 100644 index 0000000..0c73223 --- /dev/null +++ b/assets/pappy/password-brute.cast @@ -0,0 +1,996 @@ +{"version": 2, "width": 136, "height": 59, "timestamp": 1590067123, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}} +[0.009294, "o", "\u001b[5 q"] +[0.009609, "o", "\u001b]4;0;rgb:1d/20/21\u001b\\\u001b]4;1;rgb:fb/49/34\u001b\\\u001b]4;2;rgb:b8/bb/26\u001b\\\u001b]4;3;rgb:fa/bd/2f\u001b\\\u001b]4;4;rgb:83/a5/98\u001b\\\u001b]4;5;rgb:d3/86/9b\u001b\\\u001b]4;6;rgb:8e/c0/7c\u001b\\\u001b]4;7;rgb:d5/c4/a1\u001b\\\u001b]4;8;rgb:66/5c/54\u001b\\\u001b]4;9;rgb:fb/49/34\u001b\\\u001b]4;10;rgb:b8/bb/26\u001b\\"] +[0.009628, "o", "\u001b]4;11;rgb:fa/bd/2f\u001b\\"] +[0.009643, "o", "\u001b]4;12;rgb:83/a5/98\u001b\\"] +[0.009678, "o", "\u001b]4;13;rgb:d3/86/9b\u001b\\\u001b]4;14;rgb:8e/c0/7c\u001b\\"] +[0.009927, "o", "\u001b]4;15;rgb:fb/f1/c7\u001b\\\u001b]4;16;rgb:fe/80/19\u001b\\\u001b]4;17;rgb:d6/5d/0e\u001b\\\u001b]4;18;rgb:3c/38/36\u001b\\\u001b]4;19;rgb:50/49/45\u001b\\\u001b]4;20;rgb:bd/ae/93\u001b\\\u001b]4;21;rgb:eb/db/b2\u001b\\\u001b]10;rgb:d5/c4/a1\u001b\\\u001b]11;rgb:1d/20/21\u001b\\\u001b]12;7\u001b\\"] +[0.081135, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] +[0.105635, "o", "\u001b[?1004h"] +[0.229151, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[44m \u001b[30m  Projects  natas \u001b[49m\u001b[37m\u001b[00m\u001b[34m\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m⁣\u001b[K\u001b[111C\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[111D"] +[0.229491, "o", "\u001b[5 q"] +[0.229974, "o", "\u001b[5 q"] +[0.230895, "o", "\u001b[?1h\u001b="] +[0.232336, "o", "\u001b[?2004h"] +[0.495608, "o", "\u001b[4mp\u001b[24m\u001b[90mappy\u001b[39m\b\b\b\b"] +[0.685124, "o", "\b\u001b[24m\u001b[32mp\u001b[32ma\u001b[39m"] +[0.878024, "o", "\b\b\u001b[1m\u001b[31mp\u001b[1m\u001b[31ma\u001b[1m\u001b[31mp\u001b[0m\u001b[39m"] +[1.043208, "o", "\b\u001b[1m\u001b[31mp\u001b[1m\u001b[31mp\u001b[0m\u001b[39m"] +[1.159698, "o", "\b\b\b\b\u001b[0m\u001b[32mp\u001b[0m\u001b[32ma\u001b[0m\u001b[32mp\u001b[0m\u001b[32mp\u001b[32my\u001b[39m"] +[1.496722, "o", "\u001b[?1l\u001b>"] +[1.498992, "o", "\u001b[?2004l"] +[1.502209, "o", "\r\r\n"] +[1.517399, "o", "\u001b[5 q"] +[1.523316, "o", "\u001b[?1004l"] +[1.69889, "o", "/home/jonathan/go/bin/puppy\r\n"] +[1.754149, "o", "pappy\u0001\u001b[33m\u0002> \u0001\u001b[0m\u0002"] +[2.270945, "o", "l"] +[2.461025, "o", "m"] +[2.545502, "o", "a"] +[3.074592, "o", "\r\n"] +[3.081346, "o", "Loaded natas15-password (./macro_natas15-password.py)\r\nLoaded natas15 (./macro_natas15.py)\r\n"] +[3.084313, "o", "pappy\u0001\u001b[33m\u0002> \u0001\u001b[0m\u0002"] +[4.218342, "o", "rma natas15-password"] +[4.971896, "o", "\r\n"] +[5.085955, "o", "a\r"] +[5.206945, "o", "b\r"] +[5.326547, "o", "c\r"] +[5.437393, "o", "d\r"] +[5.549147, "o", "e\r"] +[5.664011, "o", "f\r"] +[5.775954, "o", "g\r"] +[5.890659, "o", "h\r"] +[6.000321, "o", "i\r"] +[6.112878, "o", "j\r"] +[6.224215, "o", "k\r"] +[6.34291, "o", "l\r"] +[6.455094, "o", "m\r"] +[6.570645, "o", "n\r"] +[6.680533, "o", "o\r"] +[6.81024, "o", "p\r"] +[6.977327, "o", "q\r"] +[7.103245, "o", "r\r"] +[7.289806, "o", "s\r"] +[7.446911, "o", "t\r"] +[7.556574, "o", "u\r"] +[7.673027, "o", "v\r"] +[7.786883, "o", "w\r"] +[7.901044, "o", "x\r"] +[8.012249, "o", "y\r"] +[8.121503, "o", "z\r"] +[8.24445, "o", "A\r"] +[8.35835, "o", "B\r"] +[8.468958, "o", "C\r"] +[8.593344, "o", "D\r"] +[8.702621, "o", "E\r"] +[8.816087, "o", "F\r"] +[8.930272, "o", "G\r"] +[9.040616, "o", "H\r"] +[9.151716, "o", "I\r"] +[9.269707, "o", "J\r"] +[9.38981, "o", "K\r"] +[9.50179, "o", "L\r"] +[9.620189, "o", "M\r"] +[9.730245, "o", "N\r"] +[9.83835, "o", "O\r"] +[9.963039, "o", "P\r"] +[10.073541, "o", "Q\r"] +[10.184917, "o", "R\r"] +[10.302333, "o", "S\r"] +[10.41378, "o", "T\r"] +[10.526031, "o", "U\r"] +[10.632808, "o", "V\r"] +[10.743539, "o", "W\r"] +[10.856169, "o", "Wa\r"] +[10.967108, "o", "Waa\r"] +[11.080604, "o", "Wab\r"] +[11.191907, "o", "Wac\r"] +[11.303536, "o", "Wad\r"] +[11.415241, "o", "Wae\r"] +[11.530972, "o", "Waf\r"] +[11.641707, "o", "Wag\r"] +[11.755344, "o", "Wah\r"] +[11.882111, "o", "Wai\r"] +[11.990773, "o", "Waj\r"] +[12.108172, "o", "Wak\r"] +[12.216477, "o", "Wal\r"] +[12.326423, "o", "Wam\r"] +[12.461, "o", "Wan\r"] +[12.5894, "o", "Wao\r"] +[12.70967, "o", "Wap\r"] +[12.82729, "o", "Waq\r"] +[12.938261, "o", "War\r"] +[13.053397, "o", "Was\r"] +[13.171885, "o", "Wat\r"] +[13.290897, "o", "Wau\r"] +[13.406958, "o", "Wav\r"] +[13.517919, "o", "Waw\r"] +[13.629137, "o", "Wax\r"] +[13.743345, "o", "Way\r"] +[13.854087, "o", "Waz\r"] +[13.96501, "o", "WaA\r"] +[14.077861, "o", "WaB\r"] +[14.19219, "o", "WaC\r"] +[14.301841, "o", "WaD\r"] +[14.413127, "o", "WaE\r"] +[14.535247, "o", "WaF\r"] +[14.642786, "o", "WaG\r"] +[14.755171, "o", "WaH\r"] +[14.865018, "o", "WaI\r"] +[14.978131, "o", "WaIa\r"] +[15.08807, "o", "WaIb\r"] +[15.204615, "o", "WaIc\r"] +[15.322641, "o", "WaId\r"] +[15.432938, "o", "WaIe\r"] +[15.546864, "o", "WaIf\r"] +[15.660372, "o", "WaIg\r"] +[15.76967, "o", "WaIh\r"] +[15.88513, "o", "WaIi\r"] +[15.996749, "o", "WaIj\r"] +[16.10822, "o", "WaIk\r"] +[16.232082, "o", "WaIl\r"] +[16.343544, "o", "WaIm\r"] +[16.461922, "o", "WaIn\r"] +[16.58825, "o", "WaIo\r"] +[16.714211, "o", "WaIp\r"] +[16.829112, "o", "WaIq\r"] +[16.953916, "o", "WaIr\r"] +[17.175998, "o", "WaIs\r"] +[17.340569, "o", "WaIt\r"] +[17.462973, "o", "WaIu\r"] +[17.573631, "o", "WaIv\r"] +[17.683688, "o", "WaIw\r"] +[17.799298, "o", "WaIx\r"] +[17.913619, "o", "WaIy\r"] +[18.024695, "o", "WaIz\r"] +[18.135448, "o", "WaIA\r"] +[18.252172, "o", "WaIB\r"] +[18.365551, "o", "WaIC\r"] +[18.483037, "o", "WaID\r"] +[18.59954, "o", "WaIE\r"] +[18.725284, "o", "WaIF\r"] +[18.83585, "o", "WaIG\r"] +[18.947164, "o", "WaIH\r"] +[19.06417, "o", "WaIHa\r"] +[19.17527, "o", "WaIHb\r"] +[19.290641, "o", "WaIHc\r"] +[19.402477, "o", "WaIHd\r"] +[19.519582, "o", "WaIHe\r"] +[19.637197, "o", "WaIHf\r"] +[19.745739, "o", "WaIHg\r"] +[19.858428, "o", "WaIHh\r"] +[19.978077, "o", "WaIHi\r"] +[20.090617, "o", "WaIHj\r"] +[20.203066, "o", "WaIHk\r"] +[20.318722, "o", "WaIHl\r"] +[20.428155, "o", "WaIHm\r"] +[20.540727, "o", "WaIHn\r"] +[20.651112, "o", "WaIHo\r"] +[20.768237, "o", "WaIHp\r"] +[20.882439, "o", "WaIHq\r"] +[20.995755, "o", "WaIHr\r"] +[21.110113, "o", "WaIHs\r"] +[21.233616, "o", "WaIHt\r"] +[21.351273, "o", "WaIHu\r"] +[21.463907, "o", "WaIHv\r"] +[21.573633, "o", "WaIHw\r"] +[21.685818, "o", "WaIHx\r"] +[21.795411, "o", "WaIHy\r"] +[21.90721, "o", "WaIHz\r"] +[22.024275, "o", "WaIHA\r"] +[22.14367, "o", "WaIHB\r"] +[22.378325, "o", "WaIHC\r"] +[22.537297, "o", "WaIHD\r"] +[22.645722, "o", "WaIHE\r"] +[22.76345, "o", "WaIHEa\r"] +[22.873234, "o", "WaIHEaa\r"] +[22.987793, "o", "WaIHEab\r"] +[23.102334, "o", "WaIHEac\r"] +[23.219663, "o", "WaIHEaca\r"] +[23.330463, "o", "WaIHEacb\r"] +[23.441842, "o", "WaIHEacc\r"] +[23.550191, "o", "WaIHEacd\r"] +[23.657784, "o", "WaIHEace\r"] +[23.772498, "o", "WaIHEacf\r"] +[23.88683, "o", "WaIHEacg\r"] +[24.003419, "o", "WaIHEach\r"] +[24.113853, "o", "WaIHEaci\r"] +[24.232215, "o", "WaIHEacj\r"] +[24.341747, "o", "WaIHEacja\r"] +[24.452998, "o", "WaIHEacjb\r"] +[24.572351, "o", "WaIHEacjc\r"] +[24.68316, "o", "WaIHEacjd\r"] +[24.797228, "o", "WaIHEacje\r"] +[24.952973, "o", "WaIHEacjf\r"] +[25.06879, "o", "WaIHEacjg\r"] +[25.184469, "o", "WaIHEacjh\r"] +[25.294503, "o", "WaIHEacji\r"] +[25.422565, "o", "WaIHEacjj\r"] +[25.548843, "o", "WaIHEacjk\r"] +[25.666239, "o", "WaIHEacjl\r"] +[25.779721, "o", "WaIHEacjm\r"] +[25.888261, "o", "WaIHEacjn\r"] +[26.003478, "o", "WaIHEacjo\r"] +[26.113533, "o", "WaIHEacjp\r"] +[26.237644, "o", "WaIHEacjq\r"] +[26.350451, "o", "WaIHEacjr\r"] +[26.463968, "o", "WaIHEacjs\r"] +[26.586051, "o", "WaIHEacjt\r"] +[26.701697, "o", "WaIHEacju\r"] +[26.814059, "o", "WaIHEacjv\r"] +[26.953743, "o", "WaIHEacjw\r"] +[27.166073, "o", "WaIHEacjx\r"] +[27.347881, "o", "WaIHEacjy\r"] +[27.463762, "o", "WaIHEacjz\r"] +[27.572303, "o", "WaIHEacjA\r"] +[27.684411, "o", "WaIHEacjB\r"] +[27.800222, "o", "WaIHEacjC\r"] +[27.915078, "o", "WaIHEacjD\r"] +[28.025781, "o", "WaIHEacjE\r"] +[28.140165, "o", "WaIHEacjF\r"] +[28.25461, "o", "WaIHEacjG\r"] +[28.381881, "o", "WaIHEacjH\r"] +[28.491354, "o", "WaIHEacjI\r"] +[28.605086, "o", "WaIHEacjJ\r"] +[28.741836, "o", "WaIHEacjK\r"] +[28.854173, "o", "WaIHEacjL\r"] +[28.971534, "o", "WaIHEacjM\r"] +[29.083463, "o", "WaIHEacjN\r"] +[29.193629, "o", "WaIHEacjO\r"] +[29.307248, "o", "WaIHEacjP\r"] +[29.421989, "o", "WaIHEacjQ\r"] +[29.54055, "o", "WaIHEacjR\r"] +[29.656517, "o", "WaIHEacjS\r"] +[29.770432, "o", "WaIHEacjT\r"] +[29.881032, "o", "WaIHEacjU\r"] +[30.003108, "o", "WaIHEacjV\r"] +[30.117913, "o", "WaIHEacjW\r"] +[30.22768, "o", "WaIHEacjX\r"] +[30.341493, "o", "WaIHEacjY\r"] +[30.453951, "o", "WaIHEacjZ\r"] +[30.567853, "o", "WaIHEacj0\r"] +[30.679953, "o", "WaIHEacj1\r"] +[30.792469, "o", "WaIHEacj2\r"] +[30.90356, "o", "WaIHEacj3\r"] +[31.021875, "o", "WaIHEacj4\r"] +[31.133948, "o", "WaIHEacj5\r"] +[31.248273, "o", "WaIHEacj6\r"] +[31.358908, "o", "WaIHEacj6a\r"] +[31.473854, "o", "WaIHEacj6b\r"] +[31.591511, "o", "WaIHEacj6c\r"] +[31.710087, "o", "WaIHEacj6d\r"] +[31.825008, "o", "WaIHEacj6e\r"] +[31.943366, "o", "WaIHEacj6f\r"] +[32.056021, "o", "WaIHEacj6g\r"] +[32.170055, "o", "WaIHEacj6h\r"] +[32.281069, "o", "WaIHEacj6i\r"] +[32.402932, "o", "WaIHEacj6j\r"] +[32.530905, "o", "WaIHEacj6k\r"] +[32.651462, "o", "WaIHEacj6l\r"] +[32.775425, "o", "WaIHEacj6m\r"] +[32.887614, "o", "WaIHEacj6n\r"] +[32.998358, "o", "WaIHEacj6o\r"] +[33.109569, "o", "WaIHEacj6p\r"] +[33.227988, "o", "WaIHEacj6q\r"] +[33.34824, "o", "WaIHEacj6r\r"] +[33.459948, "o", "WaIHEacj6s\r"] +[33.570255, "o", "WaIHEacj6t\r"] +[33.687988, "o", "WaIHEacj6u\r"] +[33.797454, "o", "WaIHEacj6v\r"] +[33.912343, "o", "WaIHEacj6w\r"] +[34.028418, "o", "WaIHEacj6x\r"] +[34.13878, "o", "WaIHEacj6y\r"] +[34.254306, "o", "WaIHEacj6z\r"] +[34.370447, "o", "WaIHEacj6A\r"] +[34.492104, "o", "WaIHEacj6B\r"] +[34.810294, "o", "WaIHEacj6C\r"] +[34.957762, "o", "WaIHEacj6D\r"] +[35.071313, "o", "WaIHEacj6E\r"] +[35.186914, "o", "WaIHEacj6F\r"] +[35.304344, "o", "WaIHEacj6G\r"] +[35.421811, "o", "WaIHEacj6H\r"] +[35.532483, "o", "WaIHEacj6I\r"] +[35.644497, "o", "WaIHEacj6J\r"] +[35.756068, "o", "WaIHEacj6K\r"] +[35.866504, "o", "WaIHEacj6L\r"] +[35.978699, "o", "WaIHEacj6M\r"] +[36.096092, "o", "WaIHEacj6N\r"] +[36.218461, "o", "WaIHEacj6O\r"] +[36.328097, "o", "WaIHEacj6P\r"] +[36.448385, "o", "WaIHEacj6Q\r"] +[36.560191, "o", "WaIHEacj6R\r"] +[36.677712, "o", "WaIHEacj6S\r"] +[36.787274, "o", "WaIHEacj6T\r"] +[36.897824, "o", "WaIHEacj6U\r"] +[37.038433, "o", "WaIHEacj6V\r"] +[37.173196, "o", "WaIHEacj6W\r"] +[37.301266, "o", "WaIHEacj6X\r"] +[37.45678, "o", "WaIHEacj6Y\r"] +[37.572406, "o", "WaIHEacj6Z\r"] +[37.683439, "o", "WaIHEacj60\r"] +[37.803159, "o", "WaIHEacj61\r"] +[37.920511, "o", "WaIHEacj62\r"] +[38.036463, "o", "WaIHEacj63\r"] +[38.148, "o", "WaIHEacj63a\r"] +[38.264178, "o", "WaIHEacj63b\r"] +[38.375362, "o", "WaIHEacj63c\r"] +[38.486433, "o", "WaIHEacj63d\r"] +[38.597142, "o", "WaIHEacj63e\r"] +[38.709784, "o", "WaIHEacj63f\r"] +[38.819288, "o", "WaIHEacj63g\r"] +[38.93244, "o", "WaIHEacj63h\r"] +[39.042712, "o", "WaIHEacj63i\r"] +[39.151456, "o", "WaIHEacj63j\r"] +[39.271731, "o", "WaIHEacj63k\r"] +[39.387647, "o", "WaIHEacj63l\r"] +[39.496118, "o", "WaIHEacj63m\r"] +[39.607635, "o", "WaIHEacj63n\r"] +[39.724979, "o", "WaIHEacj63o\r"] +[39.843119, "o", "WaIHEacj63p\r"] +[39.972997, "o", "WaIHEacj63q\r"] +[40.089333, "o", "WaIHEacj63r\r"] +[40.202443, "o", "WaIHEacj63s\r"] +[40.320717, "o", "WaIHEacj63t\r"] +[40.433443, "o", "WaIHEacj63u\r"] +[40.542592, "o", "WaIHEacj63v\r"] +[40.655137, "o", "WaIHEacj63w\r"] +[40.773572, "o", "WaIHEacj63wa\r"] +[40.88428, "o", "WaIHEacj63wb\r"] +[40.996629, "o", "WaIHEacj63wc\r"] +[41.110608, "o", "WaIHEacj63wd\r"] +[41.235698, "o", "WaIHEacj63we\r"] +[41.349467, "o", "WaIHEacj63wf\r"] +[41.475502, "o", "WaIHEacj63wg\r"] +[41.59004, "o", "WaIHEacj63wh\r"] +[41.699915, "o", "WaIHEacj63wi\r"] +[41.811698, "o", "WaIHEacj63wj\r"] +[41.930269, "o", "WaIHEacj63wk\r"] +[42.045749, "o", "WaIHEacj63wl\r"] +[42.155548, "o", "WaIHEacj63wm\r"] +[42.269847, "o", "WaIHEacj63wn\r"] +[42.386681, "o", "WaIHEacj63wna\r"] +[42.507885, "o", "WaIHEacj63wnb\r"] +[42.624924, "o", "WaIHEacj63wnc\r"] +[42.736377, "o", "WaIHEacj63wnd\r"] +[42.851744, "o", "WaIHEacj63wne\r"] +[42.969319, "o", "WaIHEacj63wnf\r"] +[43.081559, "o", "WaIHEacj63wng\r"] +[43.193262, "o", "WaIHEacj63wnh\r"] +[43.311164, "o", "WaIHEacj63wni\r"] +[43.42131, "o", "WaIHEacj63wnj\r"] +[43.535737, "o", "WaIHEacj63wnk\r"] +[43.645705, "o", "WaIHEacj63wnl\r"] +[43.758604, "o", "WaIHEacj63wnm\r"] +[43.876268, "o", "WaIHEacj63wnn\r"] +[43.991397, "o", "WaIHEacj63wno\r"] +[44.10587, "o", "WaIHEacj63wnp\r"] +[44.215786, "o", "WaIHEacj63wnq\r"] +[44.333521, "o", "WaIHEacj63wnr\r"] +[44.443835, "o", "WaIHEacj63wns\r"] +[44.560183, "o", "WaIHEacj63wnt\r"] +[44.669598, "o", "WaIHEacj63wnu\r"] +[44.784266, "o", "WaIHEacj63wnv\r"] +[44.898697, "o", "WaIHEacj63wnw\r"] +[45.020109, "o", "WaIHEacj63wnx\r"] +[45.135525, "o", "WaIHEacj63wny\r"] +[45.252722, "o", "WaIHEacj63wnz\r"] +[45.362593, "o", "WaIHEacj63wnA\r"] +[45.473815, "o", "WaIHEacj63wnB\r"] +[45.586762, "o", "WaIHEacj63wnC\r"] +[45.698345, "o", "WaIHEacj63wnD\r"] +[45.809989, "o", "WaIHEacj63wnE\r"] +[45.926097, "o", "WaIHEacj63wnF\r"] +[46.040982, "o", "WaIHEacj63wnG\r"] +[46.150723, "o", "WaIHEacj63wnH\r"] +[46.263205, "o", "WaIHEacj63wnI\r"] +[46.381673, "o", "WaIHEacj63wnJ\r"] +[46.492733, "o", "WaIHEacj63wnK\r"] +[46.609045, "o", "WaIHEacj63wnL\r"] +[46.721509, "o", "WaIHEacj63wnM\r"] +[46.84581, "o", "WaIHEacj63wnN\r"] +[46.969457, "o", "WaIHEacj63wnNa\r"] +[47.086251, "o", "WaIHEacj63wnNb\r"] +[47.234667, "o", "WaIHEacj63wnNc\r"] +[47.343714, "o", "WaIHEacj63wnNd\r"] +[47.477565, "o", "WaIHEacj63wnNe\r"] +[47.591056, "o", "WaIHEacj63wnNf\r"] +[47.700631, "o", "WaIHEacj63wnNg\r"] +[47.821683, "o", "WaIHEacj63wnNh\r"] +[47.941086, "o", "WaIHEacj63wnNi\r"] +[48.050053, "o", "WaIHEacj63wnNj\r"] +[48.160265, "o", "WaIHEacj63wnNk\r"] +[48.270009, "o", "WaIHEacj63wnNl\r"] +[48.385084, "o", "WaIHEacj63wnNm\r"] +[48.497475, "o", "WaIHEacj63wnNn\r"] +[48.606292, "o", "WaIHEacj63wnNo\r"] +[48.719915, "o", "WaIHEacj63wnNp\r"] +[48.83601, "o", "WaIHEacj63wnNq\r"] +[48.944638, "o", "WaIHEacj63wnNr\r"] +[49.289808, "o", "WaIHEacj63wnNs\r"] +[49.410105, "o", "WaIHEacj63wnNt\r"] +[49.529098, "o", "WaIHEacj63wnNu\r"] +[49.640752, "o", "WaIHEacj63wnNv\r"] +[49.751883, "o", "WaIHEacj63wnNw\r"] +[49.866043, "o", "WaIHEacj63wnNx\r"] +[49.989099, "o", "WaIHEacj63wnNy\r"] +[50.102163, "o", "WaIHEacj63wnNz\r"] +[50.212255, "o", "WaIHEacj63wnNA\r"] +[50.334127, "o", "WaIHEacj63wnNB\r"] +[50.445693, "o", "WaIHEacj63wnNC\r"] +[50.557559, "o", "WaIHEacj63wnND\r"] +[50.669518, "o", "WaIHEacj63wnNE\r"] +[50.788773, "o", "WaIHEacj63wnNF\r"] +[50.896984, "o", "WaIHEacj63wnNG\r"] +[51.012098, "o", "WaIHEacj63wnNH\r"] +[51.127403, "o", "WaIHEacj63wnNI\r"] +[51.251866, "o", "WaIHEacj63wnNIa\r"] +[51.365522, "o", "WaIHEacj63wnNIb\r"] +[51.476561, "o", "WaIHEacj63wnNIc\r"] +[51.585074, "o", "WaIHEacj63wnNId\r"] +[51.694091, "o", "WaIHEacj63wnNIe\r"] +[51.808927, "o", "WaIHEacj63wnNIf\r"] +[51.920787, "o", "WaIHEacj63wnNIg\r"] +[52.038195, "o", "WaIHEacj63wnNIh\r"] +[52.147816, "o", "WaIHEacj63wnNIi\r"] +[52.261194, "o", "WaIHEacj63wnNIj\r"] +[52.37437, "o", "WaIHEacj63wnNIk\r"] +[52.495069, "o", "WaIHEacj63wnNIl\r"] +[52.605323, "o", "WaIHEacj63wnNIm\r"] +[52.717433, "o", "WaIHEacj63wnNIn\r"] +[52.841762, "o", "WaIHEacj63wnNIo\r"] +[52.959326, "o", "WaIHEacj63wnNIp\r"] +[53.069026, "o", "WaIHEacj63wnNIq\r"] +[53.178351, "o", "WaIHEacj63wnNIr\r"] +[53.288772, "o", "WaIHEacj63wnNIs\r"] +[53.401056, "o", "WaIHEacj63wnNIt\r"] +[53.516315, "o", "WaIHEacj63wnNIu\r"] +[53.624855, "o", "WaIHEacj63wnNIv\r"] +[53.750987, "o", "WaIHEacj63wnNIw\r"] +[53.865552, "o", "WaIHEacj63wnNIx\r"] +[53.981671, "o", "WaIHEacj63wnNIy\r"] +[54.131099, "o", "WaIHEacj63wnNIz\r"] +[54.476314, "o", "WaIHEacj63wnNIA\r"] +[54.596725, "o", "WaIHEacj63wnNIB\r"] +[54.720566, "o", "WaIHEacj63wnNIBa\r"] +[54.833975, "o", "WaIHEacj63wnNIBb\r"] +[54.971882, "o", "WaIHEacj63wnNIBc\r"] +[55.087161, "o", "WaIHEacj63wnNIBd\r"] +[55.197732, "o", "WaIHEacj63wnNIBe\r"] +[55.317473, "o", "WaIHEacj63wnNIBf\r"] +[55.434793, "o", "WaIHEacj63wnNIBg\r"] +[55.551906, "o", "WaIHEacj63wnNIBh\r"] +[55.666182, "o", "WaIHEacj63wnNIBi\r"] +[55.775779, "o", "WaIHEacj63wnNIBj\r"] +[55.890774, "o", "WaIHEacj63wnNIBk\r"] +[56.015161, "o", "WaIHEacj63wnNIBl\r"] +[56.132111, "o", "WaIHEacj63wnNIBm\r"] +[56.254352, "o", "WaIHEacj63wnNIBn\r"] +[56.372153, "o", "WaIHEacj63wnNIBo\r"] +[56.48939, "o", "WaIHEacj63wnNIBp\r"] +[56.61258, "o", "WaIHEacj63wnNIBq\r"] +[56.741611, "o", "WaIHEacj63wnNIBr\r"] +[56.868879, "o", "WaIHEacj63wnNIBs\r"] +[57.041126, "o", "WaIHEacj63wnNIBt\r"] +[57.289581, "o", "WaIHEacj63wnNIBu\r"] +[57.409608, "o", "WaIHEacj63wnNIBv\r"] +[57.525075, "o", "WaIHEacj63wnNIBw\r"] +[57.645948, "o", "WaIHEacj63wnNIBx\r"] +[57.757035, "o", "WaIHEacj63wnNIBy\r"] +[57.875423, "o", "WaIHEacj63wnNIBz\r"] +[57.982994, "o", "WaIHEacj63wnNIBA\r"] +[58.095028, "o", "WaIHEacj63wnNIBB\r"] +[58.206851, "o", "WaIHEacj63wnNIBC\r"] +[58.318361, "o", "WaIHEacj63wnNIBD\r"] +[58.433073, "o", "WaIHEacj63wnNIBE\r"] +[58.544716, "o", "WaIHEacj63wnNIBF\r"] +[58.654899, "o", "WaIHEacj63wnNIBG\r"] +[58.770277, "o", "WaIHEacj63wnNIBH\r"] +[58.879415, "o", "WaIHEacj63wnNIBI\r"] +[58.987208, "o", "WaIHEacj63wnNIBJ\r"] +[59.100069, "o", "WaIHEacj63wnNIBK\r"] +[59.209735, "o", "WaIHEacj63wnNIBL\r"] +[59.322781, "o", "WaIHEacj63wnNIBM\r"] +[59.442869, "o", "WaIHEacj63wnNIBN\r"] +[59.559842, "o", "WaIHEacj63wnNIBO\r"] +[59.670825, "o", "WaIHEacj63wnNIBP\r"] +[59.779211, "o", "WaIHEacj63wnNIBQ\r"] +[59.885564, "o", "WaIHEacj63wnNIBR\r"] +[60.005301, "o", "WaIHEacj63wnNIBRa\r"] +[60.116804, "o", "WaIHEacj63wnNIBRb\r"] +[60.225765, "o", "WaIHEacj63wnNIBRc\r"] +[60.339643, "o", "WaIHEacj63wnNIBRd\r"] +[60.450219, "o", "WaIHEacj63wnNIBRe\r"] +[60.561673, "o", "WaIHEacj63wnNIBRf\r"] +[60.669311, "o", "WaIHEacj63wnNIBRg\r"] +[60.778254, "o", "WaIHEacj63wnNIBRh\r"] +[60.888809, "o", "WaIHEacj63wnNIBRi\r"] +[61.000878, "o", "WaIHEacj63wnNIBRj\r"] +[61.116168, "o", "WaIHEacj63wnNIBRk\r"] +[61.227752, "o", "WaIHEacj63wnNIBRl\r"] +[61.337761, "o", "WaIHEacj63wnNIBRm\r"] +[61.4525, "o", "WaIHEacj63wnNIBRn\r"] +[61.59238, "o", "WaIHEacj63wnNIBRo\r"] +[61.716852, "o", "WaIHEacj63wnNIBRp\r"] +[61.866359, "o", "WaIHEacj63wnNIBRq\r"] +[61.976806, "o", "WaIHEacj63wnNIBRr\r"] +[62.103341, "o", "WaIHEacj63wnNIBRs\r"] +[62.218833, "o", "WaIHEacj63wnNIBRt\r"] +[62.329327, "o", "WaIHEacj63wnNIBRu\r"] +[62.464303, "o", "WaIHEacj63wnNIBRv\r"] +[62.574842, "o", "WaIHEacj63wnNIBRw\r"] +[62.686281, "o", "WaIHEacj63wnNIBRx\r"] +[62.798118, "o", "WaIHEacj63wnNIBRy\r"] +[62.927862, "o", "WaIHEacj63wnNIBRz\r"] +[63.039208, "o", "WaIHEacj63wnNIBRA\r"] +[63.151363, "o", "WaIHEacj63wnNIBRB\r"] +[63.261454, "o", "WaIHEacj63wnNIBRC\r"] +[63.37898, "o", "WaIHEacj63wnNIBRD\r"] +[63.49421, "o", "WaIHEacj63wnNIBRE\r"] +[63.607479, "o", "WaIHEacj63wnNIBRF\r"] +[63.718539, "o", "WaIHEacj63wnNIBRG\r"] +[63.827821, "o", "WaIHEacj63wnNIBRH\r"] +[63.936119, "o", "WaIHEacj63wnNIBRI\r"] +[64.050596, "o", "WaIHEacj63wnNIBRJ\r"] +[64.165722, "o", "WaIHEacj63wnNIBRK\r"] +[64.275408, "o", "WaIHEacj63wnNIBRL\r"] +[64.386753, "o", "WaIHEacj63wnNIBRM\r"] +[64.497669, "o", "WaIHEacj63wnNIBRN\r"] +[64.607455, "o", "WaIHEacj63wnNIBRO\r"] +[64.71694, "o", "WaIHEacj63wnNIBROa\r"] +[64.829588, "o", "WaIHEacj63wnNIBROb\r"] +[64.966146, "o", "WaIHEacj63wnNIBROc\r"] +[65.075489, "o", "WaIHEacj63wnNIBROd\r"] +[65.188179, "o", "WaIHEacj63wnNIBROe\r"] +[65.298402, "o", "WaIHEacj63wnNIBROf\r"] +[65.408638, "o", "WaIHEacj63wnNIBROg\r"] +[65.544757, "o", "WaIHEacj63wnNIBROh\r"] +[65.655769, "o", "WaIHEacj63wnNIBROi\r"] +[65.766283, "o", "WaIHEacj63wnNIBROj\r"] +[65.878849, "o", "WaIHEacj63wnNIBROk\r"] +[65.995838, "o", "WaIHEacj63wnNIBROl\r"] +[66.110533, "o", "WaIHEacj63wnNIBROm\r"] +[66.221983, "o", "WaIHEacj63wnNIBROn\r"] +[66.33236, "o", "WaIHEacj63wnNIBROo\r"] +[66.443697, "o", "WaIHEacj63wnNIBROp\r"] +[66.553271, "o", "WaIHEacj63wnNIBROq\r"] +[66.664175, "o", "WaIHEacj63wnNIBROr\r"] +[66.787943, "o", "WaIHEacj63wnNIBROs\r"] +[66.912664, "o", "WaIHEacj63wnNIBROt\r"] +[67.166358, "o", "WaIHEacj63wnNIBROu\r"] +[67.281474, "o", "WaIHEacj63wnNIBROv\r"] +[67.397849, "o", "WaIHEacj63wnNIBROw\r"] +[67.517646, "o", "WaIHEacj63wnNIBROx\r"] +[67.635451, "o", "WaIHEacj63wnNIBROy\r"] +[67.749642, "o", "WaIHEacj63wnNIBROz\r"] +[67.857648, "o", "WaIHEacj63wnNIBROA\r"] +[67.967387, "o", "WaIHEacj63wnNIBROB\r"] +[68.076215, "o", "WaIHEacj63wnNIBROC\r"] +[68.192787, "o", "WaIHEacj63wnNIBROD\r"] +[68.299538, "o", "WaIHEacj63wnNIBROE\r"] +[68.413102, "o", "WaIHEacj63wnNIBROF\r"] +[68.533398, "o", "WaIHEacj63wnNIBROG\r"] +[68.645167, "o", "WaIHEacj63wnNIBROH\r"] +[68.761681, "o", "WaIHEacj63wnNIBROHa\r"] +[68.877331, "o", "WaIHEacj63wnNIBROHb\r"] +[68.987002, "o", "WaIHEacj63wnNIBROHc\r"] +[69.099403, "o", "WaIHEacj63wnNIBROHd\r"] +[69.214955, "o", "WaIHEacj63wnNIBROHe\r"] +[69.324451, "o", "WaIHEacj63wnNIBROHea\r"] +[69.434715, "o", "WaIHEacj63wnNIBROHeb\r"] +[69.547049, "o", "WaIHEacj63wnNIBROHec\r"] +[69.659927, "o", "WaIHEacj63wnNIBROHed\r"] +[69.769096, "o", "WaIHEacj63wnNIBROHee\r"] +[69.887856, "o", "WaIHEacj63wnNIBROHef\r"] +[70.007512, "o", "WaIHEacj63wnNIBROHeg\r"] +[70.119766, "o", "WaIHEacj63wnNIBROHeh\r"] +[70.231493, "o", "WaIHEacj63wnNIBROHei\r"] +[70.346591, "o", "WaIHEacj63wnNIBROHej\r"] +[70.458384, "o", "WaIHEacj63wnNIBROHek\r"] +[70.568463, "o", "WaIHEacj63wnNIBROHel\r"] +[70.678098, "o", "WaIHEacj63wnNIBROHem\r"] +[70.791002, "o", "WaIHEacj63wnNIBROHen\r"] +[70.907752, "o", "WaIHEacj63wnNIBROHeo\r"] +[71.029526, "o", "WaIHEacj63wnNIBROHep\r"] +[71.170778, "o", "WaIHEacj63wnNIBROHeq\r"] +[71.281009, "o", "WaIHEacj63wnNIBROHeqa\r"] +[71.471996, "o", "WaIHEacj63wnNIBROHeqb\r"] +[71.583845, "o", "WaIHEacj63wnNIBROHeqc\r"] +[71.697102, "o", "WaIHEacj63wnNIBROHeqd\r"] +[71.806595, "o", "WaIHEacj63wnNIBROHeqe\r"] +[71.919147, "o", "WaIHEacj63wnNIBROHeqf\r"] +[72.029215, "o", "WaIHEacj63wnNIBROHeqg\r"] +[72.14082, "o", "WaIHEacj63wnNIBROHeqh\r"] +[72.255111, "o", "WaIHEacj63wnNIBROHeqi\r"] +[72.363975, "o", "WaIHEacj63wnNIBROHeqia\r"] +[72.484869, "o", "WaIHEacj63wnNIBROHeqib\r"] +[72.602468, "o", "WaIHEacj63wnNIBROHeqic\r"] +[72.712748, "o", "WaIHEacj63wnNIBROHeqid\r"] +[72.835887, "o", "WaIHEacj63wnNIBROHeqie\r"] +[72.946331, "o", "WaIHEacj63wnNIBROHeqif\r"] +[73.061057, "o", "WaIHEacj63wnNIBROHeqig\r"] +[73.175652, "o", "WaIHEacj63wnNIBROHeqih\r"] +[73.286176, "o", "WaIHEacj63wnNIBROHeqii\r"] +[73.40231, "o", "WaIHEacj63wnNIBROHeqij\r"] +[73.516568, "o", "WaIHEacj63wnNIBROHeqik\r"] +[73.626788, "o", "WaIHEacj63wnNIBROHeqil\r"] +[73.737427, "o", "WaIHEacj63wnNIBROHeqim\r"] +[73.847108, "o", "WaIHEacj63wnNIBROHeqin\r"] +[73.957578, "o", "WaIHEacj63wnNIBROHeqio\r"] +[74.063922, "o", "WaIHEacj63wnNIBROHeqip\r"] +[74.174593, "o", "WaIHEacj63wnNIBROHeqiq\r"] +[74.287929, "o", "WaIHEacj63wnNIBROHeqir\r"] +[74.405804, "o", "WaIHEacj63wnNIBROHeqis\r"] +[74.515119, "o", "WaIHEacj63wnNIBROHeqit\r"] +[74.643575, "o", "WaIHEacj63wnNIBROHeqiu\r"] +[74.759404, "o", "WaIHEacj63wnNIBROHeqiv\r"] +[74.871738, "o", "WaIHEacj63wnNIBROHeqiw\r"] +[75.004769, "o", "WaIHEacj63wnNIBROHeqix\r"] +[75.116872, "o", "WaIHEacj63wnNIBROHeqiy\r"] +[75.235311, "o", "WaIHEacj63wnNIBROHeqiz\r"] +[75.359481, "o", "WaIHEacj63wnNIBROHeqiA\r"] +[75.474593, "o", "WaIHEacj63wnNIBROHeqiB\r"] +[75.587189, "o", "WaIHEacj63wnNIBROHeqiC\r"] +[75.694629, "o", "WaIHEacj63wnNIBROHeqiD\r"] +[75.809216, "o", "WaIHEacj63wnNIBROHeqiE\r"] +[75.927478, "o", "WaIHEacj63wnNIBROHeqiF\r"] +[76.03506, "o", "WaIHEacj63wnNIBROHeqiG\r"] +[76.148514, "o", "WaIHEacj63wnNIBROHeqiH\r"] +[76.287922, "o", "WaIHEacj63wnNIBROHeqiI\r"] +[76.394781, "o", "WaIHEacj63wnNIBROHeqiJ\r"] +[76.509342, "o", "WaIHEacj63wnNIBROHeqiK\r"] +[76.621212, "o", "WaIHEacj63wnNIBROHeqiL\r"] +[76.759362, "o", "WaIHEacj63wnNIBROHeqiM\r"] +[76.879878, "o", "WaIHEacj63wnNIBROHeqiN\r"] +[77.023138, "o", "WaIHEacj63wnNIBROHeqiO\r"] +[77.260298, "o", "WaIHEacj63wnNIBROHeqiP\r"] +[77.407325, "o", "WaIHEacj63wnNIBROHeqiQ\r"] +[77.567064, "o", "WaIHEacj63wnNIBROHeqiR\r"] +[77.712041, "o", "WaIHEacj63wnNIBROHeqiS\r"] +[77.894354, "o", "WaIHEacj63wnNIBROHeqiT\r"] +[78.004425, "o", "WaIHEacj63wnNIBROHeqiU\r"] +[78.111865, "o", "WaIHEacj63wnNIBROHeqiV\r"] +[78.217033, "o", "WaIHEacj63wnNIBROHeqiW\r"] +[78.328785, "o", "WaIHEacj63wnNIBROHeqiX\r"] +[78.436027, "o", "WaIHEacj63wnNIBROHeqiY\r"] +[78.545813, "o", "WaIHEacj63wnNIBROHeqiZ\r"] +[78.658592, "o", "WaIHEacj63wnNIBROHeqi0\r"] +[78.795194, "o", "WaIHEacj63wnNIBROHeqi1\r"] +[78.910231, "o", "WaIHEacj63wnNIBROHeqi2\r"] +[79.01901, "o", "WaIHEacj63wnNIBROHeqi3\r"] +[79.124284, "o", "WaIHEacj63wnNIBROHeqi3a\r"] +[79.236629, "o", "WaIHEacj63wnNIBROHeqi3b\r"] +[79.343957, "o", "WaIHEacj63wnNIBROHeqi3c\r"] +[79.469634, "o", "WaIHEacj63wnNIBROHeqi3d\r"] +[79.58128, "o", "WaIHEacj63wnNIBROHeqi3e\r"] +[79.689454, "o", "WaIHEacj63wnNIBROHeqi3f\r"] +[79.797959, "o", "WaIHEacj63wnNIBROHeqi3g\r"] +[79.9053, "o", "WaIHEacj63wnNIBROHeqi3h\r"] +[80.021441, "o", "WaIHEacj63wnNIBROHeqi3i\r"] +[80.129906, "o", "WaIHEacj63wnNIBROHeqi3j\r"] +[80.245136, "o", "WaIHEacj63wnNIBROHeqi3k\r"] +[80.354549, "o", "WaIHEacj63wnNIBROHeqi3l\r"] +[80.464892, "o", "WaIHEacj63wnNIBROHeqi3m\r"] +[80.572775, "o", "WaIHEacj63wnNIBROHeqi3n\r"] +[80.684795, "o", "WaIHEacj63wnNIBROHeqi3o\r"] +[80.796347, "o", "WaIHEacj63wnNIBROHeqi3p\r"] +[80.906119, "o", "WaIHEacj63wnNIBROHeqi3pa\r"] +[81.015162, "o", "WaIHEacj63wnNIBROHeqi3pb\r"] +[81.126729, "o", "WaIHEacj63wnNIBROHeqi3pc\r"] +[81.235186, "o", "WaIHEacj63wnNIBROHeqi3pd\r"] +[81.345873, "o", "WaIHEacj63wnNIBROHeqi3pe\r"] +[81.460209, "o", "WaIHEacj63wnNIBROHeqi3pf\r"] +[81.574424, "o", "WaIHEacj63wnNIBROHeqi3pg\r"] +[81.698308, "o", "WaIHEacj63wnNIBROHeqi3ph\r"] +[81.815257, "o", "WaIHEacj63wnNIBROHeqi3pi\r"] +[81.924806, "o", "WaIHEacj63wnNIBROHeqi3pj\r"] +[82.038298, "o", "WaIHEacj63wnNIBROHeqi3pk\r"] +[82.148059, "o", "WaIHEacj63wnNIBROHeqi3pl\r"] +[82.400866, "o", "WaIHEacj63wnNIBROHeqi3pm\r"] +[82.604465, "o", "WaIHEacj63wnNIBROHeqi3pn\r"] +[82.77887, "o", "WaIHEacj63wnNIBROHeqi3po\r"] +[82.926838, "o", "WaIHEacj63wnNIBROHeqi3pp\r"] +[83.190428, "o", "WaIHEacj63wnNIBROHeqi3pq\r"] +[83.334429, "o", "WaIHEacj63wnNIBROHeqi3pr\r"] +[83.466321, "o", "WaIHEacj63wnNIBROHeqi3ps\r"] +[83.603587, "o", "WaIHEacj63wnNIBROHeqi3pt\r"] +[83.716789, "o", "WaIHEacj63wnNIBROHeqi3pu\r"] +[83.842677, "o", "WaIHEacj63wnNIBROHeqi3pv\r"] +[83.958217, "o", "WaIHEacj63wnNIBROHeqi3pw\r"] +[84.063552, "o", "WaIHEacj63wnNIBROHeqi3px\r"] +[84.170718, "o", "WaIHEacj63wnNIBROHeqi3py\r"] +[84.27705, "o", "WaIHEacj63wnNIBROHeqi3pz\r"] +[84.388126, "o", "WaIHEacj63wnNIBROHeqi3pA\r"] +[84.499336, "o", "WaIHEacj63wnNIBROHeqi3pB\r"] +[84.606151, "o", "WaIHEacj63wnNIBROHeqi3pC\r"] +[84.718215, "o", "WaIHEacj63wnNIBROHeqi3pD\r"] +[84.829607, "o", "WaIHEacj63wnNIBROHeqi3pE\r"] +[84.960707, "o", "WaIHEacj63wnNIBROHeqi3pF\r"] +[85.070123, "o", "WaIHEacj63wnNIBROHeqi3pG\r"] +[85.17823, "o", "WaIHEacj63wnNIBROHeqi3pH\r"] +[85.293522, "o", "WaIHEacj63wnNIBROHeqi3pI\r"] +[85.417048, "o", "WaIHEacj63wnNIBROHeqi3pJ\r"] +[85.529531, "o", "WaIHEacj63wnNIBROHeqi3pK\r"] +[85.64381, "o", "WaIHEacj63wnNIBROHeqi3pL\r"] +[85.759208, "o", "WaIHEacj63wnNIBROHeqi3pM\r"] +[85.873474, "o", "WaIHEacj63wnNIBROHeqi3pN\r"] +[85.984084, "o", "WaIHEacj63wnNIBROHeqi3pO\r"] +[86.098335, "o", "WaIHEacj63wnNIBROHeqi3pP\r"] +[86.250006, "o", "WaIHEacj63wnNIBROHeqi3pQ\r"] +[86.3721, "o", "WaIHEacj63wnNIBROHeqi3pR\r"] +[86.52324, "o", "WaIHEacj63wnNIBROHeqi3pS\r"] +[86.704508, "o", "WaIHEacj63wnNIBROHeqi3pT\r"] +[86.814217, "o", "WaIHEacj63wnNIBROHeqi3pU\r"] +[86.938933, "o", "WaIHEacj63wnNIBROHeqi3pV\r"] +[87.127656, "o", "WaIHEacj63wnNIBROHeqi3pW\r"] +[87.249451, "o", "WaIHEacj63wnNIBROHeqi3pX\r"] +[87.368663, "o", "WaIHEacj63wnNIBROHeqi3pY\r"] +[87.497511, "o", "WaIHEacj63wnNIBROHeqi3pZ\r"] +[87.616168, "o", "WaIHEacj63wnNIBROHeqi3p0\r"] +[87.728707, "o", "WaIHEacj63wnNIBROHeqi3p1\r"] +[87.842837, "o", "WaIHEacj63wnNIBROHeqi3p2\r"] +[87.957047, "o", "WaIHEacj63wnNIBROHeqi3p3\r"] +[88.070037, "o", "WaIHEacj63wnNIBROHeqi3p4\r"] +[88.202037, "o", "WaIHEacj63wnNIBROHeqi3p5\r"] +[88.347508, "o", "WaIHEacj63wnNIBROHeqi3p6\r"] +[88.469328, "o", "WaIHEacj63wnNIBROHeqi3p7\r"] +[88.580032, "o", "WaIHEacj63wnNIBROHeqi3p8\r"] +[88.687974, "o", "WaIHEacj63wnNIBROHeqi3p9\r"] +[88.80586, "o", "WaIHEacj63wnNIBROHeqi3p9a\r"] +[88.917666, "o", "WaIHEacj63wnNIBROHeqi3p9b\r"] +[89.028919, "o", "WaIHEacj63wnNIBROHeqi3p9c\r"] +[89.142387, "o", "WaIHEacj63wnNIBROHeqi3p9d\r"] +[89.25246, "o", "WaIHEacj63wnNIBROHeqi3p9e\r"] +[89.361839, "o", "WaIHEacj63wnNIBROHeqi3p9f\r"] +[89.476245, "o", "WaIHEacj63wnNIBROHeqi3p9g\r"] +[89.595032, "o", "WaIHEacj63wnNIBROHeqi3p9h\r"] +[89.709214, "o", "WaIHEacj63wnNIBROHeqi3p9i\r"] +[89.829913, "o", "WaIHEacj63wnNIBROHeqi3p9j\r"] +[89.953806, "o", "WaIHEacj63wnNIBROHeqi3p9k\r"] +[90.097799, "o", "WaIHEacj63wnNIBROHeqi3p9l\r"] +[90.20857, "o", "WaIHEacj63wnNIBROHeqi3p9m\r"] +[90.318157, "o", "WaIHEacj63wnNIBROHeqi3p9n\r"] +[90.429952, "o", "WaIHEacj63wnNIBROHeqi3p9o\r"] +[90.546059, "o", "WaIHEacj63wnNIBROHeqi3p9p\r"] +[90.656114, "o", "WaIHEacj63wnNIBROHeqi3p9q\r"] +[90.767636, "o", "WaIHEacj63wnNIBROHeqi3p9r\r"] +[90.881998, "o", "WaIHEacj63wnNIBROHeqi3p9s\r"] +[90.994918, "o", "WaIHEacj63wnNIBROHeqi3p9t\r"] +[91.108953, "o", "WaIHEacj63wnNIBROHeqi3p9ta\r"] +[91.231586, "o", "WaIHEacj63wnNIBROHeqi3p9tb\r"] +[91.342023, "o", "WaIHEacj63wnNIBROHeqi3p9tc\r"] +[91.460042, "o", "WaIHEacj63wnNIBROHeqi3p9td\r"] +[91.570418, "o", "WaIHEacj63wnNIBROHeqi3p9te\r"] +[91.681983, "o", "WaIHEacj63wnNIBROHeqi3p9tf\r"] +[91.790781, "o", "WaIHEacj63wnNIBROHeqi3p9tg\r"] +[91.902463, "o", "WaIHEacj63wnNIBROHeqi3p9th\r"] +[92.024506, "o", "WaIHEacj63wnNIBROHeqi3p9ti\r"] +[92.135972, "o", "WaIHEacj63wnNIBROHeqi3p9tj\r"] +[92.254485, "o", "WaIHEacj63wnNIBROHeqi3p9tk\r"] +[92.37181, "o", "WaIHEacj63wnNIBROHeqi3p9tl\r"] +[92.515269, "o", "WaIHEacj63wnNIBROHeqi3p9tm\r"] +[92.642655, "o", "WaIHEacj63wnNIBROHeqi3p9tn\r"] +[92.759878, "o", "WaIHEacj63wnNIBROHeqi3p9to\r"] +[92.874407, "o", "WaIHEacj63wnNIBROHeqi3p9tp\r"] +[92.984763, "o", "WaIHEacj63wnNIBROHeqi3p9tq\r"] +[93.104709, "o", "WaIHEacj63wnNIBROHeqi3p9tr\r"] +[93.271709, "o", "WaIHEacj63wnNIBROHeqi3p9ts\r"] +[93.439198, "o", "WaIHEacj63wnNIBROHeqi3p9tt\r"] +[93.554788, "o", "WaIHEacj63wnNIBROHeqi3p9tu\r"] +[93.668859, "o", "WaIHEacj63wnNIBROHeqi3p9tv\r"] +[93.783041, "o", "WaIHEacj63wnNIBROHeqi3p9tw\r"] +[93.898665, "o", "WaIHEacj63wnNIBROHeqi3p9tx\r"] +[94.008727, "o", "WaIHEacj63wnNIBROHeqi3p9ty\r"] +[94.123223, "o", "WaIHEacj63wnNIBROHeqi3p9tz\r"] +[94.234441, "o", "WaIHEacj63wnNIBROHeqi3p9tA\r"] +[94.34994, "o", "WaIHEacj63wnNIBROHeqi3p9tB\r"] +[94.46206, "o", "WaIHEacj63wnNIBROHeqi3p9tC\r"] +[94.577177, "o", "WaIHEacj63wnNIBROHeqi3p9tD\r"] +[94.686097, "o", "WaIHEacj63wnNIBROHeqi3p9tE\r"] +[94.805711, "o", "WaIHEacj63wnNIBROHeqi3p9tF\r"] +[94.922315, "o", "WaIHEacj63wnNIBROHeqi3p9tG\r"] +[95.040296, "o", "WaIHEacj63wnNIBROHeqi3p9tH\r"] +[95.150587, "o", "WaIHEacj63wnNIBROHeqi3p9tI\r"] +[95.26193, "o", "WaIHEacj63wnNIBROHeqi3p9tJ\r"] +[95.373, "o", "WaIHEacj63wnNIBROHeqi3p9tK\r"] +[95.489345, "o", "WaIHEacj63wnNIBROHeqi3p9tL\r"] +[95.60612, "o", "WaIHEacj63wnNIBROHeqi3p9tM\r"] +[95.717256, "o", "WaIHEacj63wnNIBROHeqi3p9tN\r"] +[95.838385, "o", "WaIHEacj63wnNIBROHeqi3p9tO\r"] +[95.949347, "o", "WaIHEacj63wnNIBROHeqi3p9tP\r"] +[96.059814, "o", "WaIHEacj63wnNIBROHeqi3p9tQ\r"] +[96.171687, "o", "WaIHEacj63wnNIBROHeqi3p9tR\r"] +[96.280627, "o", "WaIHEacj63wnNIBROHeqi3p9tS\r"] +[96.400084, "o", "WaIHEacj63wnNIBROHeqi3p9tT\r"] +[96.538573, "o", "WaIHEacj63wnNIBROHeqi3p9tU\r"] +[96.658706, "o", "WaIHEacj63wnNIBROHeqi3p9tV\r"] +[96.809565, "o", "WaIHEacj63wnNIBROHeqi3p9tW\r"] +[96.92244, "o", "WaIHEacj63wnNIBROHeqi3p9tX\r"] +[97.174186, "o", "WaIHEacj63wnNIBROHeqi3p9tY\r"] +[97.308367, "o", "WaIHEacj63wnNIBROHeqi3p9tZ\r"] +[97.422232, "o", "WaIHEacj63wnNIBROHeqi3p9t0\r"] +[97.536238, "o", "WaIHEacj63wnNIBROHeqi3p9t0a\r"] +[97.651367, "o", "WaIHEacj63wnNIBROHeqi3p9t0b\r"] +[97.761385, "o", "WaIHEacj63wnNIBROHeqi3p9t0c\r"] +[97.871952, "o", "WaIHEacj63wnNIBROHeqi3p9t0d\r"] +[97.982241, "o", "WaIHEacj63wnNIBROHeqi3p9t0e\r"] +[98.095963, "o", "WaIHEacj63wnNIBROHeqi3p9t0f\r"] +[98.240594, "o", "WaIHEacj63wnNIBROHeqi3p9t0g\r"] +[98.434711, "o", "WaIHEacj63wnNIBROHeqi3p9t0h\r"] +[98.589058, "o", "WaIHEacj63wnNIBROHeqi3p9t0i\r"] +[98.723554, "o", "WaIHEacj63wnNIBROHeqi3p9t0j\r"] +[98.879272, "o", "WaIHEacj63wnNIBROHeqi3p9t0k\r"] +[99.056785, "o", "WaIHEacj63wnNIBROHeqi3p9t0l\r"] +[99.212232, "o", "WaIHEacj63wnNIBROHeqi3p9t0m\r"] +[99.326977, "o", "WaIHEacj63wnNIBROHeqi3p9t0ma\r"] +[99.435341, "o", "WaIHEacj63wnNIBROHeqi3p9t0mb\r"] +[99.546671, "o", "WaIHEacj63wnNIBROHeqi3p9t0mc\r"] +[99.659544, "o", "WaIHEacj63wnNIBROHeqi3p9t0md\r"] +[99.770395, "o", "WaIHEacj63wnNIBROHeqi3p9t0me\r"] +[99.889733, "o", "WaIHEacj63wnNIBROHeqi3p9t0mf\r"] +[100.020111, "o", "WaIHEacj63wnNIBROHeqi3p9t0mg\r"] +[100.166435, "o", "WaIHEacj63wnNIBROHeqi3p9t0mh\r"] +[100.333609, "o", "WaIHEacj63wnNIBROHeqi3p9t0mi\r"] +[100.449191, "o", "WaIHEacj63wnNIBROHeqi3p9t0mj\r"] +[100.55967, "o", "WaIHEacj63wnNIBROHeqi3p9t0mk\r"] +[100.669729, "o", "WaIHEacj63wnNIBROHeqi3p9t0ml\r"] +[100.781091, "o", "WaIHEacj63wnNIBROHeqi3p9t0mm\r"] +[100.902855, "o", "WaIHEacj63wnNIBROHeqi3p9t0mn\r"] +[101.020696, "o", "WaIHEacj63wnNIBROHeqi3p9t0mo\r"] +[101.131869, "o", "WaIHEacj63wnNIBROHeqi3p9t0mp\r"] +[101.251713, "o", "WaIHEacj63wnNIBROHeqi3p9t0mq\r"] +[101.369188, "o", "WaIHEacj63wnNIBROHeqi3p9t0mr\r"] +[101.47791, "o", "WaIHEacj63wnNIBROHeqi3p9t0ms\r"] +[101.5864, "o", "WaIHEacj63wnNIBROHeqi3p9t0mt\r"] +[101.71143, "o", "WaIHEacj63wnNIBROHeqi3p9t0mu\r"] +[101.827447, "o", "WaIHEacj63wnNIBROHeqi3p9t0mv\r"] +[101.942925, "o", "WaIHEacj63wnNIBROHeqi3p9t0mw\r"] +[102.068938, "o", "WaIHEacj63wnNIBROHeqi3p9t0mx\r"] +[102.191378, "o", "WaIHEacj63wnNIBROHeqi3p9t0my\r"] +[102.301813, "o", "WaIHEacj63wnNIBROHeqi3p9t0mz\r"] +[102.410637, "o", "WaIHEacj63wnNIBROHeqi3p9t0mA\r"] +[102.54169, "o", "WaIHEacj63wnNIBROHeqi3p9t0mB\r"] +[102.656134, "o", "WaIHEacj63wnNIBROHeqi3p9t0mC\r"] +[102.770313, "o", "WaIHEacj63wnNIBROHeqi3p9t0mD\r"] +[102.885243, "o", "WaIHEacj63wnNIBROHeqi3p9t0mE\r"] +[102.999158, "o", "WaIHEacj63wnNIBROHeqi3p9t0mF\r"] +[103.112292, "o", "WaIHEacj63wnNIBROHeqi3p9t0mG\r"] +[103.225335, "o", "WaIHEacj63wnNIBROHeqi3p9t0mH\r"] +[103.339264, "o", "WaIHEacj63wnNIBROHeqi3p9t0mI\r"] +[103.448769, "o", "WaIHEacj63wnNIBROHeqi3p9t0mJ\r"] +[103.656135, "o", "WaIHEacj63wnNIBROHeqi3p9t0mK\r"] +[103.771612, "o", "WaIHEacj63wnNIBROHeqi3p9t0mL\r"] +[103.885581, "o", "WaIHEacj63wnNIBROHeqi3p9t0mM\r"] +[104.005395, "o", "WaIHEacj63wnNIBROHeqi3p9t0mN\r"] +[104.124079, "o", "WaIHEacj63wnNIBROHeqi3p9t0mO\r"] +[104.239434, "o", "WaIHEacj63wnNIBROHeqi3p9t0mP\r"] +[104.352601, "o", "WaIHEacj63wnNIBROHeqi3p9t0mQ\r"] +[104.466115, "o", "WaIHEacj63wnNIBROHeqi3p9t0mR\r"] +[104.576828, "o", "WaIHEacj63wnNIBROHeqi3p9t0mS\r"] +[104.691093, "o", "WaIHEacj63wnNIBROHeqi3p9t0mT\r"] +[104.804355, "o", "WaIHEacj63wnNIBROHeqi3p9t0mU\r"] +[104.909589, "o", "WaIHEacj63wnNIBROHeqi3p9t0mV\r"] +[105.028598, "o", "WaIHEacj63wnNIBROHeqi3p9t0mW\r"] +[105.169417, "o", "WaIHEacj63wnNIBROHeqi3p9t0mX\r"] +[105.284342, "o", "WaIHEacj63wnNIBROHeqi3p9t0mY\r"] +[105.398273, "o", "WaIHEacj63wnNIBROHeqi3p9t0mZ\r"] +[105.511249, "o", "WaIHEacj63wnNIBROHeqi3p9t0m0\r"] +[105.629402, "o", "WaIHEacj63wnNIBROHeqi3p9t0m1\r"] +[105.750983, "o", "WaIHEacj63wnNIBROHeqi3p9t0m2\r"] +[105.865764, "o", "WaIHEacj63wnNIBROHeqi3p9t0m3\r"] +[105.995437, "o", "WaIHEacj63wnNIBROHeqi3p9t0m4\r"] +[106.109996, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5\r"] +[106.238878, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5a\r"] +[106.354383, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5b\r"] +[106.465166, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5c\r"] +[106.574389, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5d\r"] +[106.694287, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5e\r"] +[106.81056, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5f\r"] +[106.968627, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5g\r"] +[107.163355, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5h\r"] +[107.280714, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5i\r"] +[107.401439, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5j\r"] +[107.540477, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5k\r"] +[107.653687, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5l\r"] +[107.79548, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5m\r"] +[107.912701, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5n\r"] +[108.025991, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5na\r"] +[108.134131, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nb\r"] +[108.24212, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nc\r"] +[108.3581, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nd\r"] +[108.472376, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5ne\r"] +[108.598352, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nf\r"] +[108.708879, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5ng\r"] +[108.822847, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nh\r"] +[108.9362, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nha\r"] +[109.056791, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhb\r"] +[109.168738, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhc\r"] +[109.280796, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhd\r"] +[109.39064, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhe\r"] +[109.505713, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhf\r"] +[109.618462, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhg\r"] +[109.757837, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhh\r"] +[109.917552, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhi\r"] +[110.080528, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhj\r"] +[110.288417, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhk\r"] +[110.403705, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhl\r"] +[110.518902, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhm\r"] +[110.647548, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhma\r"] +[110.769018, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmb\r"] +[110.923544, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmc\r"] +[111.066284, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmd\r"] +[111.186248, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhme\r"] +[111.305981, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmf\r"] +[111.417305, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmg\r"] +[111.531663, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh\r"] +[111.645435, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmha\r"] +[111.757333, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhb\r"] +[111.871789, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhc\r"] +[111.985815, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhd\r"] +[112.096496, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhe\r"] +[112.420086, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhf\r"] +[112.562942, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhg\r"] +[112.670804, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhh\r"] +[112.782681, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhi\r"] +[112.901662, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhj\r"] +[113.013113, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhk\r"] +[113.129113, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhl\r"] +[113.24117, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhm\r"] +[113.351367, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhn\r"] +[113.4702, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmho\r"] +[113.58122, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhp\r"] +[113.694052, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhq\r"] +[113.806747, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhr\r"] +[113.920761, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhs\r"] +[114.036549, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmht\r"] +[114.175399, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhu\r"] +[114.287062, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhv\r"] +[114.404998, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhw\r"] +[114.53895, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhx\r"] +[114.667972, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhy\r"] +[114.809763, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhz\r"] +[114.92051, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhA\r"] +[115.036659, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhB\r"] +[115.145543, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhC\r"] +[115.255593, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhD\r"] +[115.406741, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhE\r"] +[115.521245, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhF\r"] +[115.638502, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhG\r"] +[115.7614, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhH\r"] +[115.877822, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhI\r"] +[115.990451, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhJ\r"] +[116.106667, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhK\r"] +[116.236325, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhL\r"] +[116.351852, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhM\r"] +[116.467964, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhN\r"] +[116.58084, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhO\r"] +[116.690103, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhP\r"] +[116.820359, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhQ\r"] +[116.968091, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhR\r"] +[117.11214, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhS\r"] +[117.276912, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhT\r"] +[117.392146, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhU\r"] +[117.571671, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhV\r"] +[117.681953, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhW\r"] +[117.791551, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhX\r"] +[117.903702, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhY\r"] +[118.01898, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhZ\r"] +[118.147232, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh0\r"] +[118.257858, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh1\r"] +[118.371968, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh2\r"] +[118.491103, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh3\r"] +[118.621615, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh4\r"] +[118.732378, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh5\r"] +[118.862697, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh6\r"] +[118.984901, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh7\r"] +[119.100212, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh8\r"] +[119.217738, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh9\rWaIHEacj63wnNIBROHeqi3p9t0m5nhmh \r\n"] +[119.223245, "o", "pappy\u0001\u001b[33m\u0002> \u0001\u001b[0m\u0002"] +[121.816272, "o", "\u001b[0m"] +[121.858093, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] +[121.889572, "o", "\u001b[?1004h"] +[122.082478, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[44m \u001b[30m  Projects  natas \u001b[49m\u001b[37m\u001b[00m\u001b[34m\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m⁣\u001b[K\u001b[111C\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[111D"] +[122.082873, "o", "\u001b[5 q"] +[122.083358, "o", "\u001b[5 q"] +[122.084297, "o", "\u001b[?1h\u001b="] +[122.085432, "o", "\u001b[?2004h"] +[122.343785, "o", "\u001b[?2004l\r\r\n"] diff --git a/assets/pappy/password-brute.gif b/assets/pappy/password-brute.gif new file mode 100644 index 0000000..2994cb4 Binary files /dev/null and b/assets/pappy/password-brute.gif differ diff --git a/assets/prompt/focus.png b/assets/prompt/focus.png new file mode 100644 index 0000000..21684f2 Binary files /dev/null and b/assets/prompt/focus.png differ diff --git a/assets/rev-shell/reverse-shell.cast b/assets/rev-shell/reverse-shell.cast new file mode 100644 index 0000000..1fb95a6 --- /dev/null +++ b/assets/rev-shell/reverse-shell.cast @@ -0,0 +1,97 @@ +{"version": 2, "width": 122, "height": 59, "timestamp": 1591023257, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}} +[0.010627, "o", "\u001b[5 q"] +[0.01119, "o", "\u001b]4;0;rgb:1d/20/21\u001b\\\u001b]4;1;rgb:fb/49/34\u001b\\\u001b]4;2;rgb:b8/bb/26\u001b\\\u001b]4;3;rgb:fa/bd/2f\u001b\\\u001b]4;4;rgb:83/a5/98\u001b\\\u001b]4;5;rgb:d3/86/9b\u001b\\\u001b]4;6;rgb:8e/c0/7c\u001b\\\u001b]4;7;rgb:d5/c4/a1\u001b\\\u001b]4;8;rgb:66/5c/54\u001b\\\u001b]4;9;rgb:fb/49/34\u001b\\\u001b]4;10;rgb:b8/bb/26\u001b\\\u001b]4;11;rgb:fa/bd/2f\u001b\\\u001b]4;12;rgb:83/a5/98\u001b\\\u001b]4;13;rgb:d3/86/9b\u001b\\\u001b]4;14;rgb:8e/c0/7c\u001b\\\u001b]4;15;rgb:fb/f1/c7\u001b\\\u001b]4;16;rgb:fe/80/19\u001b\\\u001b]4;17;rgb:d6/5d/0e\u001b\\\u001b]4;18;rgb:3c/38/36\u001b\\\u001b]4;19;rgb:50/49/45\u001b\\\u001b]4;20;rgb:bd/ae/93\u001b\\\u001b]4;21;rgb:eb/db/b2\u001b\\\u001b]10;rgb:d5/c4/a1\u001b\\\u001b]11;rgb:1d/20/21\u001b\\\u001b]12;7\u001b\\"] +[0.088068, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] +[0.111666, "o", "\u001b[?1004h"] +[0.222681, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[44m \u001b[30m \u001b[49m\u001b[37m\u001b[00m\u001b[34m\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m⁣\u001b[K\u001b[116C\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[116D"] +[0.222999, "o", "\u001b[5 q"] +[0.223593, "o", "\u001b[5 q"] +[0.224508, "o", "\u001b[?1h\u001b="] +[0.225888, "o", "\u001b[?2004h"] +[0.653773, "o", "\u001b[1m\u001b[31mn\u001b[0m\u001b[39m\u001b[90mc -lvnp 4444\u001b[39m\u001b[12D"] +[0.715379, "o", "\b\u001b[0m\u001b[32mn\u001b[32mc\u001b[39m"] +[1.183971, "o", "\u001b[39m \u001b[39m-\u001b[39ml\u001b[39mv\u001b[39mn\u001b[39mp\u001b[39m \u001b[39m4\u001b[39m4\u001b[39m4\u001b[39m4"] +[1.446216, "o", "\u001b[?1l\u001b>"] +[1.449347, "o", "\u001b[?2004l"] +[1.458011, "o", "\r\r\n"] +[1.459486, "o", "\u001b[5 q"] +[1.465154, "o", "\u001b[?1004l"] +[1.468709, "o", "Listening on 0.0.0.0 4444\r\n"] +[4.077191, "o", "Connection received on 127.0.0.1 51870\r\n"] +[4.082998, "o", "sh-5.0$ "] +[5.685101, "o", "p"] +[5.91109, "o", "y"] +[6.124298, "o", "t"] +[6.188237, "o", "h"] +[6.335567, "o", "o"] +[6.396019, "o", "n"] +[6.590799, "o", " "] +[6.759803, "o", "-"] +[6.852531, "o", "c"] +[6.930206, "o", " "] +[7.866017, "o", "'"] +[8.109001, "o", "i"] +[8.253435, "o", "m"] +[8.381997, "o", "p"] +[8.515866, "o", "o"] +[8.637957, "o", "r"] +[8.663153, "o", "t"] +[9.413798, "o", " "] +[9.514598, "o", "p"] +[9.739548, "o", "t"] +[9.850342, "o", "y"] +[10.387176, "o", ";"] +[10.535847, "o", " "] +[10.658542, "o", "p"] +[10.891197, "o", "t"] +[11.006384, "o", "y"] +[11.357107, "o", "."] +[11.671752, "o", "s"] +[11.875899, "o", "p"] +[12.077258, "o", "a"] +[12.297662, "o", "w"] +[12.411224, "o", "n"] +[13.250654, "o", "("] +[13.460459, "o", "\""] +[14.358715, "o", "/"] +[14.599401, "o", "b"] +[14.655787, "o", "i"] +[14.727939, "o", "n"] +[14.942566, "o", "/"] +[15.157211, "o", "b"] +[15.347137, "o", "a"] +[15.559204, "o", "s"] +[15.597834, "o", "h"] +[16.70838, "o", "\""] +[16.780863, "o", ")"] +[18.121027, "o", "'"] +[18.81927, "o", "\r\n"] +[18.820547, "o", "python -c 'import pty; pty.spawn(\"/bin/bash\")'\r\n"] +[18.863345, "o", "bash: /home/jonathan/.dotfiles/shells/aliases: No such file or directory\r\r\nbash: /home/jonathan/.dotfiles/shells/functions: No such file or directory\r\r\n"] +[18.880476, "o", "\u001b[H\u001b[2J\u001b[3J"] +[18.981871, "o", "\u001b]0;jonathan@jonathanhodgson-laptop:/\u0007"] +[18.982154, "o", "\u001b]0;jonathan@jonathanhodgson-laptop: /\u0007\u001b[48;5;240m\u001b[38;5;250m\u001b[48;5;240m jonathan \u001b[48;5;237m\u001b[38;5;240m\u001b[38;5;250m\u001b[48;5;237m / \u001b[48;5;124m\u001b[38;5;237m\u001b[38;5;254m\u001b[48;5;124m  \u001b[48;5;236m\u001b[38;5;124m\u001b[38;5;15m\u001b[48;5;236m $ \u001b[0m\u001b[38;5;236m\u001b[0m "] +[25.099666, "o", "^Z"] +[25.100201, "o", "\r\nzsh: suspended nc -lvnp 4444\r\n\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] +[25.184509, "o", "\u001b[?1004h"] +[25.382763, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[44m \u001b[30m \u001b[49m\u001b[37m\u001b[00m\u001b[34m\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m⁣\u001b[K\u001b[110C\u001b[49m\u001b[37m\u001b[00m \u001b[31m-\u001b[00m\u001b[01;31m148\u001b[00m\u001b[31m-\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[116D"] +[25.383048, "o", "\u001b[5 q"] +[25.383524, "o", "\u001b[5 q"] +[25.384242, "o", "\u001b[?1h\u001b="] +[25.385297, "o", "\u001b[?2004h"] +[25.921348, "o", "[1] continued nc -lvnp 4444\n"] +[27.435219, "o", "stty rows 59 cols 122\r\n\r export TERM=\"xterm-256color\"\r\n\r"] +[28.19776, "o", "\u001b[A\r\n"] +[28.304585, "o", "\u001b]0;jonathan@jonathanhodgson-laptop:/\u0007"] +[28.396087, "o", "\u001b]0;jonathan@jonathanhodgson-laptop:/\u0007"] +[28.478125, "o", "\u001b]0;jonathan@jonathanhodgson-laptop:/\u0007\u001b]0;jonathan@jonathanhodgson-laptop: /\u0007\u001b[48;5;240m\u001b[38;5;250m\u001b[48;5;240m jonathan \u001b[48;5;237m\u001b[38;5;240m\u001b[38;5;250m\u001b[48;5;237m / \u001b[48;5;124m\u001b[38;5;237m\u001b[38;5;254m\u001b[48;5;124m  \u001b[48;5;236m\u001b[38;5;124m\u001b[38;5;15m\u001b[48;5;236m $ \u001b[0m\u001b[38;5;236m\u001b[0m "] +[29.070472, "o", "l"] +[29.132573, "o", "s"] +[29.29781, "o", "\r\n"] +[29.302113, "o", "bin boot dev\tetc home lib\tlib64 lost+found media mnt opt proc root\trun sbin srv\tsys tmp usr var\r\n"] +[29.426522, "o", "\u001b]0;jonathan@jonathanhodgson-laptop:/\u0007"] +[29.42666, "o", "\u001b]0;jonathan@jonathanhodgson-laptop: /\u0007\u001b[48;5;240m\u001b[38;5;250m\u001b[48;5;240m jonathan \u001b[48;5;237m\u001b[38;5;240m\u001b[38;5;250m\u001b[48;5;237m / \u001b[48;5;124m\u001b[38;5;237m\u001b[38;5;254m\u001b[48;5;124m  \u001b[48;5;236m\u001b[38;5;124m\u001b[38;5;15m\u001b[48;5;236m $ \u001b[0m\u001b[38;5;236m\u001b[0m "] +[31.708368, "o", "exit\r\n"] +[31.725334, "o", "sh-5.0$ "] +[31.945243, "o", "exit\n"] +[32.551323, "o", "\u001b[?2004l\r\n"] diff --git a/assets/rev-shell/reverse-shell.gif b/assets/rev-shell/reverse-shell.gif new file mode 100644 index 0000000..2471fb6 Binary files /dev/null and b/assets/rev-shell/reverse-shell.gif differ diff --git a/assets/word-complete/currentWordComplete.gif b/assets/word-complete/currentWordComplete.gif new file mode 100644 index 0000000..1720e02 Binary files /dev/null and b/assets/word-complete/currentWordComplete.gif differ diff --git a/assets/wordpress/login-username-enumeration.png b/assets/wordpress/login-username-enumeration.png new file mode 100644 index 0000000..0c56376 Binary files /dev/null and b/assets/wordpress/login-username-enumeration.png differ diff --git a/build.sh b/build.sh index 637e62c..fbad021 100755 --- a/build.sh +++ b/build.sh @@ -12,7 +12,7 @@ blog(){ find content/ -type f -name '*.md' $newer | while read file; do newFileName=$(getBlogSlug "$file") mkdir -p "public_html/${newFileName%/*}" - pandoc --template=templates/blog.html -f markdown -t html5 "$file" > "public_html/$newFileName" + pandoc --template=templates/blog.html -f markdown -t html5 -M comments "$file" > "public_html/$newFileName" done touch tmp/lastBlogUpdate } diff --git a/content/blog/001-fuzzy-search-hashcat-modes.md b/content/blog/001-fuzzy-search-hashcat-modes.md index 671b998..302cf4c 100644 --- a/content/blog/001-fuzzy-search-hashcat-modes.md +++ b/content/blog/001-fuzzy-search-hashcat-modes.md @@ -4,6 +4,7 @@ tags: - Pentesting - FZF - Linux + - ZSH description: Hashcat is an amazing tool for cracking hashes but the syntax leaves a bit to be desired. This article explains one way to improve the experience of selecting modes by overriding ZSH's built in tab-completion using FZF. date: 2020-02-24 --- diff --git a/content/blog/002-the-switch-to-zsh.md b/content/blog/002-the-switch-to-zsh.md index fcbb629..022eb91 100644 --- a/content/blog/002-the-switch-to-zsh.md +++ b/content/blog/002-the-switch-to-zsh.md @@ -3,6 +3,7 @@ title: The switch to ZSH tags: - Pentesting - Linux + - ZSH description: ZSH is great shell but in this blog I explain some of the annoyances I've had with it, as well as some of the benefits. date: 2020-02-29 --- @@ -62,3 +63,5 @@ If you try this in ZSH, it won't work. Why? Because ZSH's implementation resets ```zsh stty raw -echo; fg ``` + +[Read more about upgrading shells](/blog/upgrading-reverse-shells.html) diff --git a/content/blog/003-exchange-mutt.md b/content/blog/003-exchange-mutt.md index eabff3b..efdff8e 100644 --- a/content/blog/003-exchange-mutt.md +++ b/content/blog/003-exchange-mutt.md @@ -5,11 +5,15 @@ tags: - Vim - Mutt - FZF -description: Like many organisations, the company I work at uses an Exchange server for email and calendar. My preferred email client is NeoMutt. I use Davmail to make these two work together. +description: Many companies use an Exchange server for email and calendar. My preferred email client is NeoMutt. You can use Davmail to make these two work together. date: 2020-03-10 --- -[Mutt](http://www.mutt.org/) is an extremely powerful, vim like email client. Unfortunately, like many, the company I work for uses Exchange for email and calenders. As a Linux user, I can't (and don't want) to install outlook and I don't want to have to open a web browser, every time I want to check an email. My mission was to find a way to manage my work emails using Mutt. +**Update:** Although everything in this post is (to the best of my knowledge) +correct, a more comprehensive setup guide for mutt and exchange can be found +here: . + +[Mutt](http://www.mutt.org/) is an extremely powerful, vim like email client. If your company uses Exchange for email and calenders, you may have a hard time making them work together. As a Linux user, I can't (and don't want) to install outlook and I don't want to have to open a web browser, every time I want to check an email. My mission was to find a way to manage my work emails using Mutt. For the purpose of this blog, I assume that you cannot connect to the Exchange server directly with IMAP or SMTP. If you are unsure, check at `yourdomain.com/owa/#path=/options/popandimap`. If you can use IMAP natively, use it. diff --git a/content/blog/004-tools-that-make-my-life-easier.md b/content/blog/004-tools-that-make-my-life-easier.md index 4d22c51..e3150cc 100644 --- a/content/blog/004-tools-that-make-my-life-easier.md +++ b/content/blog/004-tools-that-make-my-life-easier.md @@ -61,9 +61,9 @@ This results in Using your shell as a programming language could easily make a blog post by itself. When that is paired with the fact that you can write these as scripts in separate files (shell scripts) and call them on demand as needed makes this the single largest productivity boost for me. A lot of common tasks can be automated with shell scripts. Here are a few of my favourite: -* [Organise photos into portrait or landscape folders](https://git.jonathanh.co.uk/Jab2870/dotfiles/blob/master/bin/.bin/images/lanPortImages) -* [Add up the length of all audio tracks in a folder](https://git.jonathanh.co.uk/Jab2870/dotfiles/blob/master/bin/.bin/albumDuration) -* [Encode text in multiple different ways at once](https://git.jonathanh.co.uk/Jab2870/dotfiles/blob/master/bin/.bin/encode) +* [Organise photos into portrait or landscape folders](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/bin/.bin/images/lanPortImages) +* [Add up the length of all audio tracks in a folder](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/bin/.bin/albumDuration) +* [Encode text in multiple different ways at once](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/bin/.bin/encode) ## Vim diff --git a/content/blog/005-keyboard-driven-firefox.md b/content/blog/005-keyboard-driven-firefox.md index 8715a79..fdb294c 100644 --- a/content/blog/005-keyboard-driven-firefox.md +++ b/content/blog/005-keyboard-driven-firefox.md @@ -12,7 +12,7 @@ We spend a lot of time these days in a browser. Given that , I thought it might Since using Qutebrowser, I have loved having the ability to browse the web from my keyboard. There are times that I use the mouse, but they are rare now. Until recently, I was using [a fork of Vim Vixen](https://git.jonathanh.co.uk/jab2870/Vim-Vixen). This fork didn't do much more than change the colour scheme and I added the ability to set a proxy server using it. However, I have recently been experimenting with [Tridactyl](https://github.com/tridactyl/tridactyl). I plan to write a blog post about it in the near future but if you are looking for a browser plugin to give you Vim-like navigation, both Vim-Vixen and Tridactyl are excellent choices. -I think it is fair to say that Tridactyl does more, that isn't always a benefit though. A tool with fewer features is far more likely to contain serious bugs. However, for me, the ability to easily call external scripts was enough to make the switch. +I think it is fair to say that Tridactyl does more, that isn't always a benefit though. A tool with fewer features is far less likely to contain serious bugs. However, for me, the ability to easily call external scripts was enough to make the switch. ## Custom Stylesheets diff --git a/content/blog/007-mutt-setup.md b/content/blog/007-mutt-setup.md index 2f77159..bd5050e 100644 --- a/content/blog/007-mutt-setup.md +++ b/content/blog/007-mutt-setup.md @@ -11,7 +11,7 @@ My email system is based around my email client of choice, [Mutt](http://www.mut In this blog post I will document how Mutt and the many surrounding cogs interlock, to get my emails the way I like them. My goals for setting up my email were as follows: -* **Exchange** - Like many companies, my work emails are handled by MS Exchange. Obviously, it is important that I can read my work email. +* **Exchange** - Many companies use Exchange. This post will cater for that situation * **Offline** - It is fairly common for me to work in remote locations, often resulting in the need to check my emails before I am connected to the internet. * **Powerful filtering** - I get a lot of emails and keeping them organised can be a lot of work. The more this can be automated, the better. * **Terminal based** - I spend a lot of time in the terminal. If email can be done in the terminal, I would like to. @@ -506,7 +506,7 @@ After setting the environment variable, you can just run `notmuch setup` and it After running the setup command, you can simply run `notmuch new` in order to index your emails. Depending on the size of your mailbox, this could take a while. -Once it is done, you can test it out on the command line. The search options here are even more powerful, for a full list type `neomutt help search-terms`. As an example though, the following will show me all messages that contain the word exam in the body that have been sent / received in the past 2 weeks. +Once it is done, you can test it out on the command line. The search options here are even more powerful, for a full list type `notmuch help search-terms`. As an example though, the following will show me all messages that contain the word exam in the body that have been sent / received in the past 2 weeks. ```bash notmuch search 'body:exam date:-2weeks..now' diff --git a/content/blog/008-current-word-completion.md b/content/blog/008-current-word-completion.md new file mode 100644 index 0000000..490c629 --- /dev/null +++ b/content/blog/008-current-word-completion.md @@ -0,0 +1,149 @@ +--- +title: Current Word Completion +date: 2020-05-26 +description: ZSH's tab completion is excellent, although limited to completing based on your command. With this, I can also make completions based on my current word. +tags: + - ZSH + - FZF +--- + +Tab completion is one of the main reasons I decided to make the switch to ZSH. Being able to see descriptions and cycle between options makes finding options a breeze: + +![ZSH Tab Completion](/assets/switch-to-zsh/zsh-tab-complete.gif) + +However, there are times that I would prefer to have completion options based on the current word I have typed, regardless of the command I am running. I suppose this is more like an extension of ZSH's global aliases, but with the ability to choose from multiple options. An example of this is for word lists. There are a lot of commands I use that require word lists and it is a pain to write out the full path before I am able to tab-complete. My solution is what I have been calling Current Word Completion. My current iteration of it relies on [FZF](https://github.com/junegunn/fzf) for the completions, although in the long term, I would like to make it work with ZSH's built in completion system. Here is a demonstration using `wl` for wordlists and `myip` for my local machines ip addresses. + +![Current Word Completion](/assets/word-complete/currentWordComplete.gif) + +You can see that it doesn't stop ZSH's normal completion from working and it can work multiple times on any command. + +As with tab-completion, I have it bound to my tab key. + +If all you want to do is implement it yourself, you can find the source code [here](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/shells/zsh/includes/currentwordcompletion.zsh). Simply source the file in your `.zshrc` and you should be good to go. You can add new options to the `word_replace` function. + +If you are interested in how it works, keep reading. + +## Overriding tab key + +The tab key is interpreted by the terminal as ctrl+i for [legacy reasons](https://bestasciitable.com/). That is why I am binding to `^I`. + +The code below will check what ctrl+i is currently bound to and store it. This means we can override the tab key in such a way that if we are not on a word that should be expanded, we can fall back to whatever tab used to do. + +We then bind ctrl+i to a new function that will spawn a notification and then run whatever ctrl+i used to be bound to. + +```zsh +currentwordcomplete(){ + notify-send "Yay, it works" + zle ${currentword_default_completion:-expand-or-complete} +} + +# Record what ctrl+i is currently set to +# That way we can call it if currentword_default_completion doesn't result in anything +[ -z "$currentword_default_completion" ] && { + binding=$(bindkey '^I') + [[ $binding =~ 'undefined-key' ]] || currentword_default_completion=$binding[(s: :w)2] + unset binding +} +zle -N currentwordcomplete +bindkey '^I' currentwordcomplete +``` + +You can check this works by sourcing the file and pushing tab. You should get a notification and then normal tab completion should work. + +## Splitting up the current line + +The `LBUFFER` variable in a ZSH widget contains a string equal to everything before your cursor in the buffer. We can use expansion built into ZSH to turn that into an array of words. + +```zsh +tokens=(${(z)LBUFFER}) +``` + +The `z` flag here will expand the string using shell parsing to split the string into arguments. This takes into account quotes and escaped spaces. Full details can be found in [the documentation](http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags). + +This means that we have an array of words. The word we are currently on will be the last: + +```zsh +lastWord="${tokens[-1]}" +``` + +I also get the first argument which is normally going to be the command currently being run. Although I don't use this at the moment, I thought it might be useful to be able to exclude certain commands from completion. + +```zsh +cmd="${tokens[1]}" +``` + +## Word Replace + +I have a function called `word_replace` that takes the word that should be replaced and the command, and prints what it should be replaced with. It also returns 0 on success (there was a replacement found). + +```zsh +word_replace(){ + local ret=1 + local word="$1" + local cmd="$2" + case "$word" in + wl) wordlistSelect; return 0 ;; + myip) ip route | grep -oE '(dev|src) [^ ]+' | sed 'N;s/\n/,/;s/src //;s/dev //' | awk -F',' '{print $2 " " $1}' | sort -u | fzf -1 --no-preview | cut -d' ' -f1; return 0 ;; + esac + return "$ret" +} +``` + +In this case, it is a simple switch statement. An interesting side note is the use of `-1` in the FZF command for `myip`. This will prevent FZF from running if there is only 1 option fed to it. So, if I am only connected on one interface, it will simply fill my ip address rather than prompting me to choose one. + +Obviously, the logic used here could be as simple or complex as you wish. + +## Getting the completion + +Inside the `currentwordcomplete` function, I get the output of the `word_replace` function which is passed the current word. If that doesn't result in a completion, I will run the `word_replace` function again, using only the part of the word that comes after an `=` sign (if there is one). + +In either case, a variable called swap will contain what the current word should be replaced with. + +There will also be a variable called `ret` that will be equal to 0 if the replacement should be made. + +```zsh +currentwordcomplete(){ + ... + # Check we haven't pushed space + if [ "${LBUFFER[-1]}" != " " ]; then + swap="$(word_replace "$lastWord" "$cmd")" + ret="$?" + + # This part checks if the part after an = is completable + if [ "$ret" -ne "0" ]; then + local afterEqual="${lastWord##*=}" + local beforeEqual="${lastWord%=*}" + # If they are different, there is an equals in the word + if [ "$afterEqual" != "$lastWord" ]; then + swap="${beforeEqual}=$(word_replace "$afterEqual" "$cmd")" + ret="$?" + fi + fi + fi + ... +} +``` + +## Making the change + +Finally, I check if the completion should be made. If it shouldn't, I call whatever function the tab key used to be bound to. If it should, I change the last item of the tokens array that we created earlier. I then set the LBUFFER variable to the changed string. + +```zsh + if [ "$ret" -eq "0" ]; then + if [ -n "$swap" ]; then + tokens[-1]="$swap" + LBUFFER="${tokens[@]}" + fi + zle reset-prompt + return 0 + else + zle ${currentword_default_completion:-expand-or-complete} + return + fi +``` + +## Conclusion + +This is a relatively un-intrusive addition to ZSH that I use most days. I don't use a huge number of these but the two I mentioned here, word lists and my ip, I use a lot. + +You can find the [full source here](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/shells/zsh/includes/currentwordcompletion.zsh). If you are interested in my full [ZSH config is here](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/shells/zsh/). diff --git a/content/blog/009-upgrading-reverse-shells.md b/content/blog/009-upgrading-reverse-shells.md new file mode 100644 index 0000000..5fd7b35 --- /dev/null +++ b/content/blog/009-upgrading-reverse-shells.md @@ -0,0 +1,230 @@ +--- +title: Upgrading reverse shells +date: 2020-06-01 +description: Once you've got a reverse shell, there are a number of things you can do to make it nicer to work with. I go through those and at the end, automate the annoying bit with zsh. +tags: + - ZSH + - Pentesting + - Linux +--- + +So, you've managed to get a reverse shell through one means or another. Unfortunately, it's pretty basic. You can't use your arrow keys, the line gets overwritten if your command is too long and you can't backspace properly. All in all, it's not a nice experience. + +## Pseudo terminal + +The first thing I like to do is spawn a TTY. This tells terminal tools that they can be run interactively. For example, if you run `ls` in a normal terminal, you are likely to see it output the files in columns: + +```bash +localhost$ ls + burppro Desktop GitRepos Pictures +'Calibre Library' Documents go Templates + Contacts Downloads Music Videos + ``` + + However, in your reverse shell, you won't see the output in columns + +```bash +reverseshell$ ls +burppro +'Calibre Library' +Contacts +Desktop +Documents +Downloads +GitRepos +go +Music +Pictures +Templates +Videos + ``` + +This is because in the first instance, ls "knows" that it is being used in an interactive session. However, in the reverse shell, ls doesn't know that it is being used interactively, so it gives the most simple output possible. If you were to pipe ls to another program, it would do the same. + + +```bash +localhost$ ls | cat +burppro +'Calibre Library' +Contacts +Desktop +Documents +Downloads +GitRepos +go +Music +Pictures +Templates +Videos + ``` + +This is why you can use ls with tools like `grep` without worrying about joining all the columns. + +It is possible to spawn a tty (or at least a pseudo tty) with python2 or 3 with the same command: + +```bash +python 'import pty; pty.spawn("/bin/bash")' +python2 'import pty; pty.spawn("/bin/bash")' +python3 'import pty; pty.spawn("/bin/bash")' +``` + +On most Linux boxes you come across, one of these should work. If `/bin/bash` isn't available, you could try `/bin/sh`, although this is more limited than bash. + +## Setting the window size + +On our reverse shell, the width and height are not set and, as a result, default to 80x24. This is usable, but not particularly nice. To change it, we will background the reverse shell and take a note of the actual terminal size. + +To background, simply press ctrl+z. + +```bash +reverseshell$ ^Z +zsh: suspended nc -lvnp 4444 +localhost$ +``` + +To get the current size of your terminal window (in rows and columns), you can run the command: + +```bash +localhost$ stty -a +speed 38400 baud; rows 59; columns 136; line = 0; +intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; +rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; +-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts +-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 +opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 +isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc +``` + +The important part here is on the first line, in this example, I have 59 rows and 136 columns. Your values are likely to be different. + +We could foreground the session by typing `fg` and running the command + +```bash +stty rows 59 columns 136 +``` + +However, while we have the session backgrounded, there is some more stuff we can do. + +## Special keys and correct size + +Special key codes, such as escape and key cords that begin with ctrl won't work. This makes using programs like vim almost impossible. + +In order to rectify this, we need to make our local shell send the raw characters through netcat. Hopefully, you still have the netcat session backgrounded, if not, you can just push ctrl+z again. + +We can then run the following command in order to make our shell pass the raw characters and prevent it from echoing those characters. + +```bash +stty raw -echo +``` + +In order to get the reverse shell back, type `fg`, although you won't see this on the screen as we have asked the terminal not echo commands (that is what the `-echo` does). + +:::{.tip} +If your local shell is zsh, you will have to run the fg command before the prompt is re-drawn, otherwise the `-echo` option will be reset. If you are interested in why, read about it [here](https://www.zsh.org/mla/workers/2014/msg00870.html). + +The remediation is simply this: + +```zsh +stty raw -echo; fg +``` +::: + +We now simply need to tell the shell running on the remote server what the window size is. This is done with another stty command: + +```bash +stty rows 59 columns 136 +``` + +By this point, you should have a pretty nice terminal. You can use programs such as vim or tmux that take over the whole terminal and rely on being able to hijack specific keys. + +## Terminfo + +Teaminfo is a database that describes the capabilities of terminals. This covers things like the ability to display colour or italics. + +It is unlikely that your specific terminal has entries in the servers terminfo database, so a good choice is to set your `TERM` variable to `xterm-256color`. + +This is a common setting that is very likely to be on servers, it also enables a lot of the capabilities that most people want out of a terminal, including colour support. + +To do so, run: + +```bash +EXPORT TERM="xterm-256color" +``` + +## Making it easier + +By this point you should have quite a nice terminal to use. You can use your arrow keys, vim, tmux (if it's installed) and just about anything else. Importantly, you will also be able to use sudo or su which can ask for user input whilst running. + +However, I would like to share with you my method that automates a significant part of this. You will need to be using zsh on your host machine for this to work. It may be possible in bash, I have just never spent the time trying to implement it. + +Firstly, I took and adapted the [widget used by Greg Hurrell](https://github.com/wincent/wincent/blob/d6c52ed5528f353e652799e50d0e9250f1bec6ce/aspects/dotfiles/files/.zshrc#L280-L289) uses to foreground tasks with `ctrl+z`. + +```zsh +function fg-bg() { + if [[ $#BUFFER -eq 0 ]]; then + fg + fi +} +zle -N fg-bg +bindkey '^Z' fg-bg +``` + +This means that after pushing ctrl+z to background a task, you can then push ctrl+z again to foreground it. + +However, if we have backgrounded netcat, I would like to perform some extra steps. In the code below I check if the program is `nc`, `ncat` or `netcat`. + +```zsh +local backgroundProgram="$(jobs | tail -n 1 | awk '{print $4}')" +case "$backgroundProgram" in + "nc"|"ncat"|"netcat") + # Our NC logic needs to go here + ;; + *) + fg + ;; +esac +``` + +Inside the netcat case, I get the rows and columns, put the commands that need running on the server on my clipboard and run the `stty raw -echo` command on my host. That looks like this: + +```zsh +# Make sure that /dev/tty is given to the stty command by doing /author/admin/`. However, you can also access them by +manually specifying the users ID. For example `/?author=1` will redirect the visitor to +`/author/admin/`, this gives the attacker an easy way to get usernames. + +```bash +for i in {1..5}; do + curl -s -o /dev/null -w "%{redirect_url}\n" "example-wordpress.local/?author=$i" +done +``` + +In a default WordPress installation, you will get something like this: + +``` +http://example-wordpress.local/author/admin/ +http://example-wordpress.local/author/user1/ +http://example-wordpress.local/author/user2/ +http://example-wordpress.local/author/user3/ +``` + +We have just found 3 new usernames. + +One solution to this is to simply prevent WordPress queries from being able to look up a user by ID. + +```php +set_404(); + status_header(404); + nocache_headers(); + + $template = get_404_template(); + if ($template && file_exists($template)) { + include($template); + } + exit; + } + return $query_vars; +} +add_action('request', 'do_404_author_query'); +``` + +## Rest API + +Out of the box, WordPress gives out a lot of information out about its users through the Rest API. + +I can pull out a list of all usernames with the following: + +```bash +curl -s example-wordpress.local/wp-json/wp/v2/users | jq '.[].name' +``` + +The easiest way to mitigate this is simply to remove the user endpoints. + +```php +function remove_users_endpoints( $endpoints ) { + return array_filter( $endpoints, function($endpoint){ + return (0 === preg_match( '/^\/wp\/v2\/users/', $endpoint )); + } , ARRAY_FILTER_USE_KEY); +} +add_filter( 'rest_endpoints', 'remove_users_endpoints' ); +``` + +## oEmbed + +Oembed is a protocol that allows websites to embed content from other sites. WordPress supports both +embedding and being embedded. When a site requests to embed a page, it makes a request that looks +like the following: `/wp-json/oembed/1.0/embed?url=http%3A%2F%2F/a-post-by-user-3/`. + +The WordPress server then returns something like this: + +```json +{ + "version": "1.0", + "provider_name": "Example Wordpress", + "provider_url": "http://example-wordpress.local", + "author_name": "user3", + "author_url": "http://example-wordpress.local/author/user3/", + "title": "a post by user 3", + "type": "rich", + "width": 600, + "height": 338, + "html": "" +} +``` + +This includes the author's name and a url for the author archive. In order to prevent wordpress from +including this information in the oembed response, add the following to a plugin or to your themes +functions.php file: + +```php +, I +could do the following: + +```bash +$ curl http://example-wordpress.local/a-post-by-user-2/ | hq '.post-author a' attr href' +http://example-wordpress.local/author/user2/ +``` + +Here we see the author is `user2`. + +However, sites often have hundreds or thousands of pages so doing this manually would be tedious. +Once again, we can turn to the rest api. + +The following will go through the first 100 posts on the site and attempt to get the author's link +from it. + +```bash +$ curl http://example-wordpress.local/wp-json/wp/v2/posts?per_page=100 | jq ‘.[].id’ | while read i; do + curl -L …/?p=$i | hq '.post-author a' attr href +done +``` + +It is worth noting here that the wordpress rest api limits requests to 100 results per request. This +means that if a site has more posts / pages than that, you might need to use the `page=n` parameter +which will give you the nth page of results. + +I don't normally find this necessary since it is normally the earliest pages that are created by +high privileged accounts. + +The easiest way to rectify this is simply not to include the author's details in the page, although +instructions on how to do this will vary depending on the theme in use. However, you may wish to be +able to group blog posts by author. In this case, I would suggest only publishing content using low +privileged accounts (author or contributor). This will mean that in the event that one of these +accounts is compromised, the damage an attacker can do is limited. + +--- + +These steps should prevent most attempts at user enumeration although remember that security is not +a plugin or a few lines of code copied from a blog on the internet. There are many layers that +should be implemented and this is but one. For details on how best to secure your website, you +should consult with an expert. + + diff --git a/content/blog/011-my-setup-jan-2021.md b/content/blog/011-my-setup-jan-2021.md new file mode 100644 index 0000000..1e26be3 --- /dev/null +++ b/content/blog/011-my-setup-jan-2021.md @@ -0,0 +1,140 @@ +--- +title: My Setup at the beginning of 2021 +tags: + - FZF + - Linux + - ZSH +description: How I work at the beginning of 2021 +date: 2021-01-08 +--- + +Inspired by [The Orange One's State of the +Apps](https://theorangeone.net/posts/state-of-the-apps-2021/), I thought I would +document the tools I use to get my job done. If for no other reason than to look +back next year and see what has changed. + +## OS + +I'm running [Arch Linux](https://archlinux.org/) on all my computers. This is +because it works well for me. All the packages I could ever need are available +and there is no reason for me to change. + +For other people's computers that I maintain ( parents, wife etc. ), I normally +put Manjaro on there. It is quick to set up and if I ever need to ssh in to fix +or install something, I can use the same commands I do on my personal machines. + +## Desktop Environment + +[DWM](https://git.jonathanh.co.uk/jab2870/dwm). I don't understand why tiling +window managers aren't the default. I remember when Windows (Vista?) introduced +their window snapping and thinking at the time that this was how computers +should work. + +[i3](https://i3wm.org/) is another great tiling window manager that I used to +use and I normally still recommend to people who want to try one. + +I use [Rofi](https://github.com/davatorium/rofi) as my program launcher and for +various other scripts. In the coming year, I may look to switch this to dmenu or +fzf. I am happy with rofi and have no real reason to change other than +curiosity. + +## Editor + +[Neovim](https://github.com/neovim/neovim). This year saw me make the switch +from Vim to Neovim as my primary editor. Initially, the thing that convinced me +to make the switch was [Deoplete](https://github.com/Shougo/deoplete.nvim) +although since moving I have also taken advantage of neovim's excellent language +server support. + +In terms of plugins for vim / neovim, I try to keep it to a minimum. As I +mentioned, I have deoplete with a couple of completion sources. I have a couple +of language definitions and a colour scheme. + +One plugin I do use and rely on heavily is +[FZF](https://github.com/junegunn/fzf.vim) which provides fuzzy searching of +files, help pages, buffers or anything else I give it. + +## Shell + +I use ZSH as my shell. During this last year I have moved away from oh-my-zsh. +In doing this, I have noticed a significant speed increase in my shell. + +If you're interested, you can read about [why I choose +ZSH](https://jonathanh.co.uk/blog/the-switch-to-zsh.html). + +## Browser + +I use a [customized version of +Firefox](https://jonathanh.co.uk/blog/keyboard-driven-firefox.html). The most +significant changes I have made to it are the hiding of the top bar and the use +of [Tridactyl](https://github.com/tridactyl/tridactyl) which adds vim-like +bindings to Firefox. A recent addition I made was +[Firevim](https://github.com/glacambre/firenvim) which embeds a neovim client +into text areas. + +## Email + +My personal email provider is [Protonmail](https://protonmail.com/). I am very +happy with it. My [email setup](https://jonathanh.co.uk/blog/mutt-setup.html) +consists of neomutt, vim, mbsync, notmuch and imapfilter. + +## Calender + +I have recently come across [Remind](https://dianne.skoll.ca/projects/remind/) +which has replaced [Calcurse](https://www.calcurse.org/) as my calender +application of choice. It is configured, and reminders are added using a text +file (or a collection of text files). These can then be version controlled. + +It allows for complex reminder logic to be specified. I may well write a blog +post about it in the future but, for now, just know that you can use many +programming constructs like if statements when defining events. + +For a more detailed introduction, I strongly recommend [Tim Chase's post on +Remind](https://blog.thechases.com/posts/remind/). + +## RSS + +This is pretty simple. I use [Newsboat](https://newsboat.org/). It does +everything I need it to, it's configurable and has vim-like key bindings. + +Incidentally, this is also how I manage my YouTube subscriptions. Any new videos +come into my RSS reader, I watch them using MPV and then I stop watching +youtube. This has been one of the biggest increases to my productivity. I no +longer get youtube suggestions so I don't find myself getting lost in the +endless rabbit holes of youtube. I watch what I want to watch and then I get on +with something else. + +## Notes + +I just use Vim. I am currently working on a shell script to help me better index +my folder of notes although I'll write a blog post about that when it is nearer +a first stable release. + +## Online Hosting / File Sync + +I host in instance of [Nextcloud](https://nextcloud.com/) that provides me with +file sync, online editing and sync for contacts, calender etc. + +## Keyboard + +I still use the [Colemak](https://colemak.com/) keyboard layout which has been +designed for ergonomic typing. I do the majority of my typing on an [Ergodox +EZ](https://ergodox-ez.com/). + +## Passwords + +I use [Pass](https://www.passwordstore.org/) which is a thin wrapper around Git +and gnupg. Passwords are stored in an encrypted text file and version controlled +with Git. On my phone I use [Password Store](https://f-droid.org/en/packages/dev.msfjarvis.aps/) which works in almost the same way. + +## Phone + +I currently use a rooted, de-googled Samsung Note 8. There is not much to say +really except almost all my apps come from F-droid. I have been unhappy for a +while with the current state of phones, although that is starting to change with +the advent of new GNU/Linux phones. I have a Pinephone being delivered soon and +have ordered a [FX Tech Pro1 +X](https://www.indiegogo.com/projects/pro1-x-smartphone-functionality-choice-control#/). +Both of these ship Linux and I'm hoping that I'll be able to replace my android +handset as my daily driver. + diff --git a/content/blog/012-starting-out-with-homeassistant.md b/content/blog/012-starting-out-with-homeassistant.md new file mode 100644 index 0000000..766d6e1 --- /dev/null +++ b/content/blog/012-starting-out-with-homeassistant.md @@ -0,0 +1,110 @@ +--- +title: Before you start with Home Assistant +tags: + - Home Assistant +description: I use Home Assistant for my home automation setup. I plan do write some more blogs about it in the future. This is supposed to help those out who are considering starting out. It is not supposed to be a setup guide, rather some things to consider before starting out. +date: 2021-03-19 +--- + +If you are considering getting into home automation, [Home +Assistant](https://www.home-assistant.io/) is a great way to start. My current +setup consists mostly of lighting, sensors and buttons, and a few small +appliances. I Before you start, there are a few things that you might want +to consider. + +## Server + +So, currently, I have home assistant installed on an old laptop that works as a +server. Alternatively, you could use a Raspberry PI or any similar single board +computer. + +Home Assistant sells a single board computers which are a bit more powerful than +a Raspberry PIs and all the needed software is pre installed: + + + +What you end up doing will probably depend on your budget, what you have lying +around and how DIY you want the solution to be. + +## Celling Lighting + +One of the easiest / cheapest things to start with is lighting. It also brings +some of the (IMHO) biggest advantages. To do lighting, you have 2 options. Smart +switches or smart bulbs (or both, I guess that makes three). + +### Smart Switches + +This is (probably) the easiest and cheapest starting point, however comes with a +pretty big caveat. You'll need to check that your wall socket has a ground or +neutral wire (probably green and yellow sleeve in the UK). If not, this option +probably won't work for you. I am not an electrician so if you are in doubt, +find someone who knows what they are taking about. *SERIOUSLY*. If you electrocute +yourself, that is generally bad and not on me. + +I use these [switches from +Sonoff](https://www.banggood.com/SONOFF-T1-EU-or-UK-AC-100-240V-1-or-2-or-3-Gang-TX-Series-WIFI-Wall-Switch-433Mhz-RF-Remote-Controlled-Wifi-Switch-Smart-Home-Switch-Works-With-Alexa-Google-Home-p-1470883.html?rmmds=myorder&cur_warehouse=UK&ID=6278514). +They can be flashed with open firmware so you can be sure they are not talking +back to their mother ship. + +It can be useful to get a switch panel with extra switches. That way you can use +the extra buttons for triggering automations or turning on other things other +than the celling lights. + +### Smart Bulbs + +Smart bulbs are a generally a bit more expensive than smart switches. However, +they often come with the advantage that you can change the brightness / colour +etc. + +Unfortunately, you'll need to leave the switch on all the time if you want the +advantage of being able to turn them on with your phone or on a timer. + +I use these [bulbs from BlitzWolf](https://www.banggood.com/BlitzWolf-BW-LT21-RGBWW-10W-E27-APP-Smart-LED-Light-Bulb-Work-With-Amazon-Alexa-Google-Assistant-AC100-240V-p-1551059.html?rmmds=myorder&cur_warehouse=CN). +These can also be flashed with with open firmware. + +### What I do + +Anywhere I have a smart bulb, I also have smart switches. This is so I can leave +the power to the bulb on at all times. You don't want (and your wife definitely +won't want) to have to get your phones out every time you want to turn the light +on or off. If you have a smart switch, it can "ask" the bulb to turn off but +without cutting its power. This means you can turn the bulb on with your phone +or a switch or an automation. + +In some places, I only have a smart switch and dumb bulbs. This is basically +just the bathroom and kitchen where we have loads of spot lights and it's not +worth the cost to make each bulb smart + +I can still turn the lights on / off with the switch or our phones or with +automations. + +## Other small appliances + +I also have things like lamps attached these to [Sonoff +Basics](https://www.banggood.com/SONOFF-BASICR2-10A-2200W-WIFI-Wireless-Smart-Switch-Remote-Control-Socket-APP-Timer-AC90-250V-50-or-60Hz-Works-with-Amazon-Alexa-Google-Home-Assistant-IFTTT-p-1019971.html?cur_warehouse=CN&rmmds=search). +They work in basically the same way as a smart switch with a dumb bulb. It means +that I can turn them off with smart buttons, my phone or any automations. + +Lastly, I have some [Sonoff +S26](https://www.banggood.com/SONOFF-S26-10A-AC90V-250V-Smart-WIFI-Socket-CN-or-US-or-UK-or-AU-or-DE-or-FR-or-BR-or-CH-or-IL-or-IT-Wireless-Plug-Power-Sockets-Smart-Home-Switch-Work-With-Alexa-Google-Assistant-IFTTT-p-1308841.html?cur_warehouse=CN&ID=3426&rmmds=search)s. +I use these for appliances such as my kettle that are used around water and I +want to play it safe. You could probably use a Sonoff basic for this, but they +don't come with any water certification. At least these are kept above surfaces +that might have water on them. + +I'm happy to pay a bit extra and just not risk electrocuting myself. + +## Firmware + +Everything I have linked above use a chip called an ESP8266 (or variations of +it) which mean it can be flashed with open source firmware called +[esphome](https://esphome.io/). This way, I am happy to buy cheep Chinese bulbs +and I am confident that the bulbs are not talking back to China. + +If you are interested I can talk to you about flashing it at a later date. +Different devices require it to be done in different ways. + +----- + +Hopefully that should be enough to get you started, I will be writing more posts +on home automation in the future. diff --git a/content/card.curl b/content/card.curl index 3173915..93f2411 100755 --- a/content/card.curl +++ b/content/card.curl @@ -40,10 +40,15 @@ drawInBox(){ } echo -e " -${RED}Jonathan Hodgson${NC} +${LRED}Jonathan Hodgson${NC} +${RED}CONTACT${NC} ${ORANGE}Email: ${GREEN}jonathan@jonathanh.co.uk${NC} -${ORANGE}Website: ${GREEN}https://jonathanh.co.uk${NC} -${ORANGE}GitRepos: ${GREEN}https://git.jonathanh.co.uk${NC} +${ORANGE}Dotfiles: ${GREEN}https://jn.hn/dots/${NC} +${ORANGE}Blog: ${GREEN}https://jn.hn${NC} + +${RED}Public Keys${NC} +${ORANGE}Primary ECC: ${GREEN}https://jn.hn/pubkey/${NC} +${ORANGE}Secondary RSA: ${GREEN}https://jn.hn/pubkey-rsa/${NC} " | drawInBox diff --git a/content/other-stuff-you-might-like.md b/content/other-stuff-you-might-like.md index ae6f3ad..3c1f90f 100644 --- a/content/other-stuff-you-might-like.md +++ b/content/other-stuff-you-might-like.md @@ -71,7 +71,7 @@ Another podcast discussing hacking and related fields ## General Tech -### Computerfile +### Computerphile Informative videos about different computing topics. @@ -111,7 +111,7 @@ Science videos. Mostly physics and applied maths. * [Lbry](https://open.lbry.com/@MinutePhysics:5?r=Cwnz9X9qaNkaYo8TbcVaFFZMBx7SsyfV) -### Numberfile +### Numberphile Videos about maths. diff --git a/templates/blog.html b/templates/blog.html index 792c6bc..79ee352 100644 --- a/templates/blog.html +++ b/templates/blog.html @@ -50,6 +50,8 @@ $body$ + +
$endif$ $endif$