Skip to content

Commit

Permalink
Some minor changes eg. sorting keywords and convert textile to markdo…
Browse files Browse the repository at this point in the history
…wn. Added utm-parameter for web analytics.
  • Loading branch information
wcz-txp committed May 5, 2020
1 parent 5bc6fda commit a221a46
Show file tree
Hide file tree
Showing 3 changed files with 190 additions and 61 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ A really simple and raw plugin for automatic posting new articles to [**Telegram
* **wcz_telegram_token**: the token of your Telegram bot. Talk to the [**BotFather**](https://core.telegram.org/bots#6-botfather).
* **wcz_telegram_chatid**: the chatid of your Telegram channel. You'll find some hints [**here**](https://stackoverflow.com/questions/45414021/get-telegram-channel-group-id).
* **wcz_telegram_iv** and **wcz_telegram_rhash**: If you have already a [**Telegram Instant View template**](https://instantview.telegram.org/#publishing-templates), but this is not really public, you should consider to use this option. Set it to `'1'` and copy the rhash, so Telegram users will see your article on their mobiles inside Telegram rendered with your template.
* **wcz_telegram_utm** add parameters to your link, so your web analytics software - eg. Google Analytic, Matomo/Piwik - has some stuff to identify Telegram as the source of your traffic.
* **wcz_telegram_debug**: If something doesn't work, switch it to `'1'` and you'll get the complete request inside of `textpattern/tmp/telegram_request.txt`
129 changes: 68 additions & 61 deletions wcz_telegram.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
<?php

/*
Partly inspired by Andy Carter's arc_twitter
http://andy-carter.com/txp/arc_twitter
*/

if (txpinterface == 'admin')
{
add_privs('wcz_telegram_post', '1');
Expand Down Expand Up @@ -38,99 +31,113 @@ function wcz_telegram() {

$article_id = empty($GLOBALS['ID']) ? gps('ID') : $GLOBALS['ID'];
$Status = empty($GLOBALS['Status']) ? gps('Status') : $GLOBALS['Status'];
$view = empty($GLOBALS['view']) ? gps('view') : $GLOBALS['view'];
$wcz_telegram__this = empty($GLOBALS['wcz_telegram__this']) ? gps('wcz_telegram__this') : $GLOBALS['wcz_telegram__this'];

if ($Status == 4 and $wcz_telegram__this == 1 and $view != "html" and $view != "preview")
if ($Status == 4 and $wcz_telegram__this == 1)
{


if (!empty($article_id))
{
if (!empty($article_id))
{

include_once txpath.'/publish/taghandlers.php';
include_once txpath.'/publish/taghandlers.php';

$article = safe_row("ID, Posted, LastMod, Title, Excerpt, Keywords, Status", 'textpattern',"ID={$article_id}");
}
$article = safe_row("ID, Posted, LastMod, Title, Excerpt, Keywords, Status", 'textpattern',"ID={$article_id}");
}


$article_url = permlinkurl($article);
$title = $article['Title'];
$excerpt = $article['Excerpt'];
$keywords = $article['Keywords'];
$article_url = permlinkurl($article);
$title = $article['Title'];
$excerpt = $article['Excerpt'];
$keywords = $article['Keywords'];

// the token of your Telegram bot
$wcz_telegram_token = '';
$wcz_telegram_token = '';

// the chatid of your Telegram channel
$wcz_telegram_chatid = '';
$wcz_telegram_chatid = '';

// If you have already a Telegram Instant View template (https://instantview.telegram.org/#publishing-templates), but this is not really public
// you should consider to use this option. Set it to '1' and copy the rhash, so Telegram users will see your article on their mobiles
// inside Telegram rendered with your template.
$wcz_telegram_iv = '0';
$wcz_telegram_rhash = '';
$wcz_telegram_iv = '0';
$wcz_telegram_rhash = '';

// give traffic analytics some stuff "&utm_source=tg&utm_medium=social"
$wcz_telegram_utm = '0';

// If something doesn't work, switch it to '1' and you'll get the complete request inside of textpattern/tmp/telegram_request.txt
$wcz_telegram_debug = '0';
$wcz_telegram_debug = '0';

if ($wcz_telegram_iv == '1')
{
$article_url = "https://t.me/iv?url=".$article_url."&rhash=".$wcz_telegram_rhash;
}
if ($wcz_telegram_iv == '1')
{
$article_url = "https://t.me/iv?url=".$article_url."&rhash=".$wcz_telegram_rhash;
}

if ($wcz_telegram_utm == '1')
{
if( strpos( $article_url, '?' ) !== false) {
$article_url = $article_url."&utm_source=tg&utm_medium=social";
} else {
$article_url = $article_url."?utm_source=tg&utm_medium=social";
}
}

// escape Markdown formatting character "_"
$article_url = str_replace("_","\_",$article_url);
$article_url = str_replace("_","\_",$article_url);

// convert Textile "??" to Markdown formatting character "_"
$excerpt = str_replace("??","_",$excerpt);

// prepare keywords
$keywords = explode(",",$keywords);
foreach ($keywords as &$keyword)
{
$keyword = preg_replace('/\s+/', '',mb_convert_case($keyword, MB_CASE_TITLE));
}
$keywords = explode(",",$keywords);
foreach ($keywords as &$keyword)
{
$keyword = preg_replace('/[\s_-]+/', '',mb_convert_case($keyword, MB_CASE_TITLE));
}

$keywords = implode(" ",preg_filter('/^/', '#', $keywords));
sort($keywords);

$keywords = implode(" ",preg_filter('/^/', '#', $keywords));

// 4096 characters is the maximum post length

$excerptlen = 4080 - strlen($title) - strlen($keywords) - strlen($article_url);
$excerptlen = 4080 - strlen($title) - strlen($keywords) - strlen($article_url);

if (strlen($excerpt) > $excerptlen)
{
$pos=strpos($excerpt, ' ', $excerptlen);
$excerpt = '"'.substr($excerpt,0,$pos).'" ...';
}
if (strlen($excerpt) > $excerptlen)
{
$pos=strpos($excerpt, ' ', $excerptlen);
$excerpt = '"'.substr($excerpt,0,$pos).'" ...';
}

$message = "*".$title."*\n\n".$excerpt."\n\n".$keywords."\n\n".$article_url;
$message = preg_replace('/\?\?/', '__',$message);

$url = 'https://api.telegram.org/bot'.$wcz_telegram_token.'/sendMessage?chat_id='.$wcz_telegram_chatid.'&parse_mode=Markdown&text=';
$url .= urlencode($message);
$message = "*".$title."*\n\n".$excerpt."\n\n".$keywords."\n\n".$article_url;

$url = 'https://api.telegram.org/bot'.$wcz_telegram_token.'/sendMessage?chat_id='.$wcz_telegram_chatid.'&parse_mode=Markdown&text=';
$url .= urlencode($message);


// some debug stuff
if ($wcz_telegram_debug == "1")
{
file_put_contents(txpath."/tmp/telegram_request.txt","Sent URL: \n".$url."\n\nPrepared message:\n".$message."\n\nExcerpt length:\n".$excerptlen."\n\nCurl output:\n");
}
if ($wcz_telegram_debug == "1")
{
file_put_contents(txpath."/tmp/telegram_request.txt","Sent URL: \n".$url."\n\nPrepared message:\n".$message."\n\nExcerpt length:\n".$excerptlen."\n\nCurl output:\n");
}


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// some debug stuff
if ($wcz_telegram_debug == "1")
{
curl_setopt($ch, CURLOPT_VERBOSE, true);
$curl_verbose = fopen(txpath.'/tmp/telegram_request.txt', 'a+');
curl_setopt($ch, CURLOPT_STDERR, $curl_verbose);
}
if ($wcz_telegram_debug == "1")
{
curl_setopt($ch, CURLOPT_VERBOSE, true);
$curl_verbose = fopen(txpath.'/tmp/telegram_request.txt', 'a+');
curl_setopt($ch, CURLOPT_STDERR, $curl_verbose);
}

$response = curl_exec($ch);
curl_close($ch);
$response = curl_exec($ch);
curl_close($ch);

}
}


?>
121 changes: 121 additions & 0 deletions wcz_telegram_v0.12.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# Name: wcz_telegram v0.12
# Type: Admin/AJAX plugin
# A simple plugin to post articles to Telegram
# Author: whocarez
# URL: https://github.com/wcz-txp/wcz_telegram
# Recommended load order: 5

# .....................................................................
# This is a plugin for Textpattern CMS - http://textpattern.com/
# To install: textpattern > admin > plugins
# Paste the following text into the 'Install plugin' box:
# .....................................................................

YToxMTp7czo0OiJuYW1lIjtzOjEyOiJ3Y3pfdGVsZWdyYW0iO3M6NjoiYXV0aG9yIjtzOjg6
Indob2NhcmV6IjtzOjEwOiJhdXRob3JfdXJpIjtzOjM5OiJodHRwczovL2dpdGh1Yi5jb20v
d2N6LXR4cC93Y3pfdGVsZWdyYW0iO3M6NzoidmVyc2lvbiI7czo0OiIwLjEyIjtzOjExOiJk
ZXNjcmlwdGlvbiI7czo0NDoiQSBzaW1wbGUgcGx1Z2luIHRvIHBvc3QgYXJ0aWNsZXMgdG8g
VGVsZWdyYW0iO3M6NDoiY29kZSI7czo0NDQ1OiJpZiAodHhwaW50ZXJmYWNlID09ICdhZG1p
bicpDQp7DQogICAgYWRkX3ByaXZzKCd3Y3pfdGVsZWdyYW1fcG9zdCcsICcxJyk7DQoNCiAg
ICByZWdpc3Rlcl9jYWxsYmFjaygnd2N6X3RlbGVncmFtJywgJ2FydGljbGUnLCAnZWRpdCcp
Ow0KDQogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ3djel90ZWxlZ3JhbV91aScsICdhcnRpY2xl
X3VpJywgJ3N0YXR1cycpOw0KDQp9DQoNCi8vIFJlZ2lzdGVyIHRhZ3MuDQpUeHA6OmdldCgn
XFRleHRwYXR0ZXJuXFRhZ1xSZWdpc3RyeScpDQogICAgLT5yZWdpc3Rlcignd2N6X3RlbGVn
cmFtJyk7DQoNCg0KDQoNCmZ1bmN0aW9uIHdjel90ZWxlZ3JhbV91aSgkZXZlbnQsICRzdGVw
LCAkZGF0YSwgJHJzMSkgew0KDQogICAgJHZhciA9IGdwcygnd2N6X3RlbGVncmFtX190aGlz
Jyk7DQogICAgJGNvbnRlbnQgID0gdGFnKHllc25vUmFkaW8oJ3djel90ZWxlZ3JhbV9fdGhp
cycsICcwJywgJycsICd3Y3pfdGVsZWdyYW1fX3RoaXMnKSwncCcpOw0KICAgIHJldHVybiAk
ZGF0YS5maWVsZHNldCgkY29udGVudCwgJ1NlbmQgdG8gVGVsZWdyYW0nLCAnd2N6X3RlbGVn
cmFtJyk7DQoNCn0NCg0KDQoNCg0KZnVuY3Rpb24gd2N6X3RlbGVncmFtKCkgew0KDQoNCiAg
ICAkYXJ0aWNsZV9pZCA9IGVtcHR5KCRHTE9CQUxTWydJRCddKSA/IGdwcygnSUQnKSA6ICRH
TE9CQUxTWydJRCddOw0KICAgICRTdGF0dXMgPSBlbXB0eSgkR0xPQkFMU1snU3RhdHVzJ10p
ID8gZ3BzKCdTdGF0dXMnKSA6ICRHTE9CQUxTWydTdGF0dXMnXTsNCiAgICAkd2N6X3RlbGVn
cmFtX190aGlzID0gZW1wdHkoJEdMT0JBTFNbJ3djel90ZWxlZ3JhbV9fdGhpcyddKSA/IGdw
cygnd2N6X3RlbGVncmFtX190aGlzJykgOiAkR0xPQkFMU1snd2N6X3RlbGVncmFtX190aGlz
J107DQoNCiAgICBpZiAoJFN0YXR1cyA9PSA0IGFuZCAkd2N6X3RlbGVncmFtX190aGlzID09
IDEpDQogICAgew0KDQoNCiAgICBpZiAoIWVtcHR5KCRhcnRpY2xlX2lkKSkgDQogICAgew0K
DQogICAgICAgIGluY2x1ZGVfb25jZSB0eHBhdGguJy9wdWJsaXNoL3RhZ2hhbmRsZXJzLnBo
cCc7DQoNCiAgICAgICAgJGFydGljbGUgPSBzYWZlX3JvdygiSUQsIFBvc3RlZCwgTGFzdE1v
ZCwgVGl0bGUsIEV4Y2VycHQsIEtleXdvcmRzLCBTdGF0dXMiLCAndGV4dHBhdHRlcm4nLCJJ
RD17JGFydGljbGVfaWR9Iik7DQogICAgfQ0KDQoNCiAgICAkYXJ0aWNsZV91cmwgPSBwZXJt
bGlua3VybCgkYXJ0aWNsZSk7DQogICAgJHRpdGxlID0gJGFydGljbGVbJ1RpdGxlJ107DQog
ICAgJGV4Y2VycHQgPSAkYXJ0aWNsZVsnRXhjZXJwdCddOw0KICAgICRrZXl3b3JkcyA9ICRh
cnRpY2xlWydLZXl3b3JkcyddOw0KDQovLyB0aGUgdG9rZW4gb2YgeW91ciBUZWxlZ3JhbSBi
b3QNCiAgICAkd2N6X3RlbGVncmFtX3Rva2VuID0gJyc7DQoNCi8vIHRoZSBjaGF0aWQgb2Yg
eW91ciBUZWxlZ3JhbSBjaGFubmVsDQogICAgJHdjel90ZWxlZ3JhbV9jaGF0aWQgPSAnJzsN
Cg0KLy8gSWYgeW91IGhhdmUgYWxyZWFkeSBhIFRlbGVncmFtIEluc3RhbnQgVmlldyB0ZW1w
bGF0ZSAoaHR0cHM6Ly9pbnN0YW50dmlldy50ZWxlZ3JhbS5vcmcvI3B1Ymxpc2hpbmctdGVt
cGxhdGVzKSwgYnV0IHRoaXMgaXMgbm90IHJlYWxseSBwdWJsaWMNCi8vIHlvdSBzaG91bGQg
Y29uc2lkZXIgdG8gdXNlIHRoaXMgb3B0aW9uLiBTZXQgaXQgdG8gJzEnIGFuZCBjb3B5IHRo
ZSByaGFzaCwgc28gVGVsZWdyYW0gdXNlcnMgd2lsbCBzZWUgeW91ciBhcnRpY2xlIG9uIHRo
ZWlyIG1vYmlsZXMNCi8vIGluc2lkZSBUZWxlZ3JhbSByZW5kZXJlZCB3aXRoIHlvdXIgdGVt
cGxhdGUuDQogICAgJHdjel90ZWxlZ3JhbV9pdiA9ICcwJzsNCiAgICAkd2N6X3RlbGVncmFt
X3JoYXNoID0gJyc7DQoNCi8vIGdpdmUgdHJhZmZpYyBhbmFseXRpY3Mgc29tZSBzdHVmZiAi
JnV0bV9zb3VyY2U9dGcmdXRtX21lZGl1bT1zb2NpYWwiDQogICAgJHdjel90ZWxlZ3JhbV91
dG0gPSAnMCc7DQoNCi8vIElmIHNvbWV0aGluZyBkb2Vzbid0IHdvcmssIHN3aXRjaCBpdCB0
byAnMScgYW5kIHlvdSdsbCBnZXQgdGhlIGNvbXBsZXRlIHJlcXVlc3QgaW5zaWRlIG9mIHRl
eHRwYXR0ZXJuL3RtcC90ZWxlZ3JhbV9yZXF1ZXN0LnR4dA0KICAgICR3Y3pfdGVsZWdyYW1f
ZGVidWcgPSAnMCc7DQoNCiAgICBpZiAoJHdjel90ZWxlZ3JhbV9pdiA9PSAnMScpIA0KICAg
IHsNCiAgICAgICAgJGFydGljbGVfdXJsID0gImh0dHBzOi8vdC5tZS9pdj91cmw9Ii4kYXJ0
aWNsZV91cmwuIiZyaGFzaD0iLiR3Y3pfdGVsZWdyYW1fcmhhc2g7DQogICAgfSANCg0KICAg
IGlmICgkd2N6X3RlbGVncmFtX3V0bSA9PSAnMScpIA0KICAgIHsNCiAgICAgICAgICAgIGlm
KCBzdHJwb3MoICRhcnRpY2xlX3VybCwgJz8nICkgIT09IGZhbHNlKSB7DQogICAgICAgICAg
ICAgICAgICAkYXJ0aWNsZV91cmwgPSAkYXJ0aWNsZV91cmwuIiZ1dG1fc291cmNlPXRnJnV0
bV9tZWRpdW09c29jaWFsIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg
ICRhcnRpY2xlX3VybCA9ICRhcnRpY2xlX3VybC4iP3V0bV9zb3VyY2U9dGcmdXRtX21lZGl1
bT1zb2NpYWwiOw0KICAgICAgICAgICAgIH0NCiAgICB9DQoNCi8vICBlc2NhcGUgTWFya2Rv
d24gZm9ybWF0dGluZyBjaGFyYWN0ZXIgIl8iDQogICAgJGFydGljbGVfdXJsID0gc3RyX3Jl
cGxhY2UoIl8iLCJcXyIsJGFydGljbGVfdXJsKTsNCg0KLy8gIGNvbnZlcnQgVGV4dGlsZSAi
Pz8iIHRvIE1hcmtkb3duIGZvcm1hdHRpbmcgY2hhcmFjdGVyICJfIg0KICAgICAgICAkZXhj
ZXJwdCA9IHN0cl9yZXBsYWNlKCI/PyIsIl8iLCRleGNlcnB0KTsNCg0KLy8gIHByZXBhcmUg
a2V5d29yZHMNCiAgICAka2V5d29yZHMgPSBleHBsb2RlKCIsIiwka2V5d29yZHMpOw0KICAg
IGZvcmVhY2ggKCRrZXl3b3JkcyBhcyAmJGtleXdvcmQpIA0KICAgIHsNCiAgICAgICAgJGtl
eXdvcmQgPSBwcmVnX3JlcGxhY2UoJy9bXHNfLV0rLycsICcnLG1iX2NvbnZlcnRfY2FzZSgk
a2V5d29yZCwgTUJfQ0FTRV9USVRMRSkpOw0KICAgIH0NCg0KICAgICAgICBzb3J0KCRrZXl3
b3Jkcyk7DQoNCiAgICAka2V5d29yZHMgPSBpbXBsb2RlKCIgIixwcmVnX2ZpbHRlcignL14v
JywgJyMnLCAka2V5d29yZHMpKTsNCg0KLy8gNDA5NiBjaGFyYWN0ZXJzIGlzIHRoZSBtYXhp
bXVtIHBvc3QgbGVuZ3RoDQoNCiAgICAkZXhjZXJwdGxlbiA9IDQwODAgLSBzdHJsZW4oJHRp
dGxlKSAtIHN0cmxlbigka2V5d29yZHMpIC0gc3RybGVuKCRhcnRpY2xlX3VybCk7DQoNCiAg
ICBpZiAoc3RybGVuKCRleGNlcnB0KSA+ICRleGNlcnB0bGVuKSANCiAgICB7DQogICAgICAg
ICRwb3M9c3RycG9zKCRleGNlcnB0LCAnICcsICRleGNlcnB0bGVuKTsNCiAgICAgICAgJGV4
Y2VycHQgPSAnIicuc3Vic3RyKCRleGNlcnB0LDAsJHBvcykuJyIgLi4uJzsNCiAgICB9DQoN
CiAgICAgICAgJG1lc3NhZ2UgPSBwcmVnX3JlcGxhY2UoJy9cP1w/LycsICdfXycsJG1lc3Nh
Z2UpOw0KDQogICAgJG1lc3NhZ2UgPSAiKiIuJHRpdGxlLiIqXG5cbiIuJGV4Y2VycHQuIlxu
XG4iLiRrZXl3b3Jkcy4iXG5cbiIuJGFydGljbGVfdXJsOw0KDQogICAgJHVybCA9ICdodHRw
czovL2FwaS50ZWxlZ3JhbS5vcmcvYm90Jy4kd2N6X3RlbGVncmFtX3Rva2VuLicvc2VuZE1l
c3NhZ2U/Y2hhdF9pZD0nLiR3Y3pfdGVsZWdyYW1fY2hhdGlkLicmcGFyc2VfbW9kZT1NYXJr
ZG93biZ0ZXh0PSc7DQogICAgJHVybCAuPSB1cmxlbmNvZGUoJG1lc3NhZ2UpOw0KDQoNCi8v
IHNvbWUgZGVidWcgc3R1ZmYNCiAgICBpZiAoJHdjel90ZWxlZ3JhbV9kZWJ1ZyA9PSAiMSIp
IA0KICAgIHsNCiAgICAgICAgZmlsZV9wdXRfY29udGVudHModHhwYXRoLiIvdG1wL3RlbGVn
cmFtX3JlcXVlc3QudHh0IiwiU2VudCBVUkw6IFxuIi4kdXJsLiJcblxuUHJlcGFyZWQgbWVz
c2FnZTpcbiIuJG1lc3NhZ2UuIlxuXG5FeGNlcnB0IGxlbmd0aDpcbiIuJGV4Y2VycHRsZW4u
IlxuXG5DdXJsIG91dHB1dDpcbiIpOw0KICAgIH0NCg0KDQogICAgJGNoID0gY3VybF9pbml0
KCk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJHVybCk7DQogICAgY3Vy
bF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsNCi8vIHNvbWUg
ZGVidWcgc3R1ZmYNCiAgICBpZiAoJHdjel90ZWxlZ3JhbV9kZWJ1ZyA9PSAiMSIpIA0KICAg
IHsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1ZFUkJPU0UsIHRydWUpOw0K
ICAgICAgICAkY3VybF92ZXJib3NlID0gZm9wZW4odHhwYXRoLicvdG1wL3RlbGVncmFtX3Jl
cXVlc3QudHh0JywgJ2ErJyk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9T
VERFUlIsICRjdXJsX3ZlcmJvc2UpOw0KICAgIH0NCg0KICAgICRyZXNwb25zZSA9IGN1cmxf
ZXhlYygkY2gpOw0KICAgIGN1cmxfY2xvc2UoJGNoKTsNCg0KICAgIH0NCn0NCiI7czo0OiJ0
eXBlIjtzOjE6IjQiO3M6NToib3JkZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIwIjtz
OjQ6ImhlbHAiO3M6OTM2OiJBIHJlYWxseSByYXcgcGx1Z2luIGZvciBhdXRvbWF0aWMgcG9z
dGluZyBuZXcgYXJ0aWNsZXMgdG8gdGVsZWdyYW0uIEFsbCB0aGUgcGFyYW1ldGVycyBhcmUg
eWV0IGluc2lkZSB0aGUgY29kZS4KCiogKndjel90ZWxlZ3JhbV90b2tlbio6IHRoZSB0b2tl
biBvZiB5b3VyIFRlbGVncmFtIGJvdAoqICp3Y3pfdGVsZWdyYW1fY2hhdGlkKjogdGhlIGNo
YXRpZCBvZiB5b3VyIFRlbGVncmFtIGNoYW5uZWwKKiAqd2N6X3RlbGVncmFtX2l2KiBhbmQg
Kndjel90ZWxlZ3JhbV9yaGFzaCo6IElmIHlvdSBoYXZlIGFscmVhZHkgYSAiKlRlbGVncmFt
IEluc3RhbnQgVmlldyB0ZW1wbGF0ZSoiOmh0dHBzOi8vaW5zdGFudHZpZXcudGVsZWdyYW0u
b3JnLyNwdWJsaXNoaW5nLXRlbXBsYXRlcywgYnV0IHRoaXMgaXMgbm90IHJlYWxseSBwdWJs
aWMgeW91IHNob3VsZCBjb25zaWRlciB0byB1c2UgdGhpcyBvcHRpb24uIFNldCBpdCB0byAn
MScgYW5kIGNvcHkgdGhlIHJoYXNoLCBzbyBUZWxlZ3JhbSB1c2VycyB3aWxsIHNlZSB5b3Vy
IGFydGljbGUgb24gdGhlaXIgbW9iaWxlcyBpbnNpZGUgVGVsZWdyYW0gcmVuZGVyZWQgd2l0
aCB5b3VyIHRlbXBsYXRlLgoqICoqd2N6X3RlbGVncmFtX3V0bSoqIGFkZCBwYXJhbWV0ZXJz
IHRvIHlvdXIgbGluaywgc28geW91ciB3ZWIgYW5hbHl0aWNzIHNvZnR3YXJlIC0gZWcuIEdv
b2dsZSBBbmFseXRpYywgTWF0b21vL1Bpd2lrIC0gaGFzIHNvbWUgc3R1ZmYgdG8gaWRlbnRp
ZnkgVGVsZWdyYW0gYXMgdGhlIHNvdXJjZSBvZiB5b3VyIHRyYWZmaWMuCiogKndjel90ZWxl
Z3JhbV9kZWJ1Zyo6IElmIHNvbWV0aGluZyBkb2Vzbid0IHdvcmssIHN3aXRjaCBpdCB0byAn
MScgYW5kIHlvdSdsbCBnZXQgdGhlIGNvbXBsZXRlIHJlcXVlc3QgaW5zaWRlIG9mIGJjLiB0
ZXh0cGF0dGVybi90bXAvdGVsZWdyYW1fcmVxdWVzdC50eHQiO3M6MzoibWQ1IjtzOjMyOiJi
YTU3NTNkM2EyNzcxN2E4YjlkYzUxMTlmNTRmMTZkNyI7fQ==

0 comments on commit a221a46

Please sign in to comment.