Overview

Differential expression analysis with 8hpa control and all replicates.

Replicated removed: ‘7hpf_2012_N1’, ‘7hpf_2013_17’, ‘2hpf_2012_N6’, ‘1hpf_2012_N7’, ‘6hpf_2012_N2’

Spearman Correlation

Spearman’s rank correlation coefficient is a nonparametric measure of rank correlation, recommended for data that does not necessarily come from a bivariate normal distribution (Wikipedia). Below, we plot the Spearman correlation of the RPM (reads per million) for all genes that have an average RPM ≥ 1.

Pairwise PCA

Principal component analysis (PCA) is a statistical procedure that uses an orthogonal transformation to convert a set of observations of possibly correlated variables into a set of values of linearly uncorrelated variables called principal components (Wikipedia). Below is a PCA of the 8hpf control versus the other developmental timepoints.

MA and Volcano plots

MA plot: The log2 fold change (M) plotted against the log2 average (A) of the normalized read count for each gene. Significantly differentially expressed genes are plotted in red.

Volcano plot: The log2 fold change (M) plotted against the -log10 (eg. 1e^-10 = 10) of the adjusted p-value.

1hpf/8hpf

2hpf/8hpf

3hpf/8hpf

4hpf/8hpf

5hpf/8hpf

6hpf/8hpf

7hpf/8hpf

Heatmaps

The first heatmap was made by hierarchically clustering the euclidean distances of the log2 fold change for genes with p-values less than 1e^-5 at any time point.

The second heatmap uses the same hierarchical method to cluster timepoints as well as genes.

LS0tCnRpdGxlOiAiOGhwYSBDb250cm9sIC0gRml2ZSBSZXBsaWNhdGVzIFJlbW92ZWQiIAphdXRob3I6ICJLaXJzdGVuIEdvdHRpbmciCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICAgIHRvYzogdHJ1ZQogICAgICB0b2NfZGVwdGg6IDIKICAgICAgdG9jX2Zsb2F0OgogICAgICAgIGNvbGxhcHNlZDogZmFsc2UKLS0tCgoKYGBge3IgaW5pdGlhbGl6ZURhdGE4aHBhQ29udHJvbEZpdmVSZXBsaWNhdGVzUmVtb3ZlZCwgZWNobyA9IEZBTFNFLCByZXN1bHRzID0gImhpZGUiLCBtZXNzYWdlID0gRkFMU0UsIGVycm9yID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgY2FjaGUgPSBGQUxTRX0KCiMjIHVzZXIgaW5wdXQgdG8gJ0RFU2VxMkFsbC5SZGF0YScKCmxvYWQoIi4vb3V0cHV0L0RFU2VxMkFsbDVSUi5SZGF0YSIpCnNldHdkKCIuLyIpCgpwdmFsIDwtIGFzLm51bWVyaWMocHZhbCkKIyMgRmlyc3QgbGlzdCB0aGUgUiBsaWJyYXJpZXMgSSB3YW50IHRvIHVzZQpsaWJyYXJpZXMgICAgICAgIDwtIGMoIkRFU2VxMiIsICJncGxvdHMiLCAiUkNvbG9yQnJld2VyIiwgJ2tuaXRyJywgJ2dyaWQnLCAnZ3JpZEV4dHJhJywgInRpZHl2ZXJzZSIsICdraVJzdGVuJykKCiMjIE5vdyByZWFkIGluIHRoZSBsaWJyYXJpZXMKbGFwcGx5KGxpYnJhcmllcywgZnVuY3Rpb24oeCl7CiAgICBsaWJyYXJ5KHgsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSwgcXVpZXRseSA9IFRSVUUpCiAgICB9KQoKIyMgSW5pdGlhbGl6ZSBrbml0ciBvcHRpb25zCm9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHJlc3VsdHM9ImhpZGUiLCBmaWcua2VlcD0iYWxsIiwgd2FybmluZz1GQUxTRSwgZXJyb3I9RkFMU0UsIGZpZy5wYXRoPSJmaWd1cmVzLyIsIGNhY2hlID0gVFJVRSkKb3B0c19rbml0JHNldChyb290LmRpciA9ICIuLyIpCgoKYGBgCgojIE92ZXJ2aWV3CgpEaWZmZXJlbnRpYWwgZXhwcmVzc2lvbiBhbmFseXNpcyB3aXRoIDhocGEgY29udHJvbCBhbmQgYWxsIHJlcGxpY2F0ZXMuCgoKUmVwbGljYXRlZCByZW1vdmVkOiAnN2hwZl8yMDEyX04xJywgJzdocGZfMjAxM18xNycsICcyaHBmXzIwMTJfTjYnLCAnMWhwZl8yMDEyX043JywgJzZocGZfMjAxMl9OMicKCiNTcGVhcm1hbiBDb3JyZWxhdGlvbgoKU3BlYXJtYW4ncyByYW5rIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50IGlzIGEgbm9ucGFyYW1ldHJpYyBtZWFzdXJlIG9mIHJhbmsgY29ycmVsYXRpb24sIHJlY29tbWVuZGVkIGZvciBkYXRhIHRoYXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgY29tZSBmcm9tIGEgYml2YXJpYXRlIG5vcm1hbCBkaXN0cmlidXRpb24gKFdpa2lwZWRpYSkuIEJlbG93LCB3ZSBwbG90IHRoZSBTcGVhcm1hbiBjb3JyZWxhdGlvbiBvZiB0aGUgUlBNIChyZWFkcyBwZXIgbWlsbGlvbikgZm9yIGFsbCBnZW5lcyB0aGF0IGhhdmUgYW4gYXZlcmFnZSBSUE0gJiM4ODA1OyAxLgoKCmBgYHtyIHNwZWFybWFuX2NvcnJlbGF0aW9uOGhwYUNvbnRyb2xGaXZlUmVwbGljYXRlc1JlbW92ZWQsIGZpZy5jYXAgPSAiIn0KCiMjIE1ha2UgYSBzcGVhcm1hbiBwbG90CgoKZmlsdGVyZWRSUE1zIDwtIG5vcm1Db3VudHMgJT4lIGdyb3VwX2J5KElEKSAlPiUgbXV0YXRlKHJwbUZsYWcgPSBpZmVsc2UoKG1lYW4ocnBtKSA+PSAxKSwgeWVzID0gJ3llcycsIG5vID0gJ25vJykpICU+JSB1bmdyb3VwKCkgJT4lCiAgICBmaWx0ZXIocnBtRmxhZyA9PSAneWVzJykgJT4lIHNlbGVjdChJRCwgU2FtcGxlLCBycG0pICU+JSBzcHJlYWQoU2FtcGxlLCBycG0pCgoKCnJwbWZpbHQgICAgICAgIDwtIGRhdGEuZnJhbWUoc2VsZWN0KGZpbHRlcmVkUlBNcywgLUlEKSwgcm93Lm5hbWVzID0gZmlsdGVyZWRSUE1zJElELCBjaGVjay5uYW1lcyA9IEZBTFNFKQpzcGVhcm1hbiAgICAgICA8LSBkYXRhLmZyYW1lKGNvcihycG1maWx0LCBtZXRob2QgPSAnc3BlYXJtYW4nKSwgY2hlY2submFtZXMgPSBGQUxTRSkKc3BlYXJtYW4kSUQgICAgPC0gcm93bmFtZXMoc3BlYXJtYW4pCnNwZWFybWFuVGlkeSAgIDwtIHNwZWFybWFuICU+JSBnYXRoZXIoU2FtcGxlLCBjb3JyZWxhdGlvbiwgLUlEKQoKIyMgYW5kIHBsb3QgaXQhCgpnZ3Bsb3QoZGF0YSA9IHNwZWFybWFuVGlkeSwgYWVzKHggPSBJRCwgeSA9IFNhbXBsZSwgZmlsbCA9IGNvcnJlbGF0aW9uKSkgKyBnZW9tX3RpbGUoKSArCiAgICBzY2FsZV9maWxsX2dyYWRpZW50Mihsb3cgPSAieWVsbG93IiwgbWlkID0gJ3doaXRlJywgaGlnaCA9ICJwdXJwbGU0IiwgbWlkcG9pbnQgPSAwLjgsIGxpbWl0ID0gYygwLDEpKSArCiAgICAgICAgZ2d0aXRsZSgnU3BlYXJtYW4gQ29ycmVsYXRpb24gb2YgU2FtcGxlcycpICsgeGxhYignJykgKyB5bGFiKCcnKSArCiAgICAgICAgICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpCmBgYAoKCiMgUGFpcndpc2UgUENBCgpQcmluY2lwYWwgY29tcG9uZW50IGFuYWx5c2lzIChQQ0EpIGlzIGEgc3RhdGlzdGljYWwgcHJvY2VkdXJlIHRoYXQgdXNlcyBhbiBvcnRob2dvbmFsIHRyYW5zZm9ybWF0aW9uIHRvIGNvbnZlcnQgYSBzZXQgb2Ygb2JzZXJ2YXRpb25zIG9mIHBvc3NpYmx5IGNvcnJlbGF0ZWQgdmFyaWFibGVzIGludG8gYSBzZXQgb2YgdmFsdWVzIG9mIGxpbmVhcmx5IHVuY29ycmVsYXRlZCB2YXJpYWJsZXMgY2FsbGVkIHByaW5jaXBhbCBjb21wb25lbnRzIChXaWtpcGVkaWEpLiBCZWxvdyBpcyBhIFBDQSBvZiB0aGUgOGhwZiBjb250cm9sIHZlcnN1cyB0aGUgb3RoZXIgZGV2ZWxvcG1lbnRhbCB0aW1lcG9pbnRzLiAKCmBgYHtyIFBDQThocGFDb250cm9sRml2ZVJlcGxpY2F0ZXNSZW1vdmVkLCBmaWcuZnVsbHdpZHRoID0gVFJVRSwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSAxMH0KCnBjYXNfZGF0YSA8LSBsYXBwbHkoY29udHJhc3RfbmFtZXMsIGZ1bmN0aW9uKHgpewogICAgeSA8LSBwbG90UENBKHJsZF9hbGxbW3hdXSwgcmV0dXJuRGF0YSA9IFRSVUUsIG50b3AgPSAxMDAwMCkKICAgIHkkSUQgPC0geAogICAgeQp9KQoKcGNhX2RhdGEgPC0gYmluZF9yb3dzKHBjYXNfZGF0YSkKCmdncGxvdChkYXRhID0gcGNhX2RhdGEsIGFlcyh4ID0gUEMxLCB5ID0gUEMyLCBsYWJlbCA9IG5hbWUsIGNvbG91ciA9IGZhY3Rvcihjb25kaXRpb24pKSkgKwogICAgICAgICAgICBnZW9tX3BvaW50KHNpemUgPSAzKSArIHRoZW1lX2J3KCkgKyBnZW9tX3RleHQoaGp1c3QgPSAwLCB2anVzdCA9IC0wLjQpICsKICAgICAgICAgICAgeGxhYigiUEMgMSIpICsgeWxhYigiUEMgMiIpICsgCiAgICAgICAgICAgIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAuOTgsIDApKSAgKwogICAgICAgICAgICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLjIsIDApKSArCiAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpICsKICAgICAgICAgICAgZmFjZXRfd3JhcCh+IElELCBzY2FsZXMgPSAiZnJlZSIpCgpgYGAKCgoKIyBNQSBhbmQgVm9sY2FubyBwbG90cyB7LnRhYnNldH0KCk1BIHBsb3Q6IFRoZSBsb2cyIGZvbGQgY2hhbmdlIChNKSBwbG90dGVkIGFnYWluc3QgdGhlIGxvZzIgYXZlcmFnZSAoQSkgb2YgdGhlIG5vcm1hbGl6ZWQgcmVhZCBjb3VudCBmb3IgZWFjaCBnZW5lLiBTaWduaWZpY2FudGx5IGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBnZW5lcyBhcmUgcGxvdHRlZCBpbiByZWQuCgpWb2xjYW5vIHBsb3Q6IFRoZSBsb2cyIGZvbGQgY2hhbmdlIChNKSBwbG90dGVkIGFnYWluc3QgdGhlIC1sb2cxMCAoZWcuIDFlXi0xMCA9IDEwKSBvZiB0aGUgYWRqdXN0ZWQgcC12YWx1ZS4KCmBgYHtyIG1hdm9sOGhwYUNvbnRyb2xGaXZlUmVwbGljYXRlc1JlbW92ZWR9CgoKeCA8LSBjb250cmFzdF9uYW1lc1tbMV1dCgpwbG90cyA8LSBsYXBwbHkoY29udHJhc3RfbmFtZXMsIGZ1bmN0aW9uKHgpewogICAgZGYgICAgICA8LSBhbGxfcmVzdWx0c190aWR5REYgJT4lIGZpbHRlcihjb250cmFzdElEID09IHgpICU+JSBzcHJlYWQoZGVhX0lELCBkZWFfVmFsdWUpICU+JSBtdXRhdGUobG9nYmFzZU1lYW4gPSBsb2coYmFzZU1lYW4pKQogICAgcHZhbCAgICA8LSBhcy5udW1lcmljKHB2YWwpCiAgICBpZihpcy5udWxsKGRmKSl7CiAgICAgICAgbWVzc2FnZShwYXN0ZTAoIlB2YWx1ZSB0b28gc3RyaW5nZW50IGZvciAiLCBjb250cmFzdCwgIi4gTUEvVm9sY2FubyBwbG90IG9tbWl0ZWQuXG4iKSkKICAgIH0gZWxzZSB7CiAgICAgICAgcHZhbCAgICAgICAgICAgICAgICAgIDwtIGFzLm51bWVyaWMocHZhbCkKICAgICAgICBsb3dlcl9sYWJlbCAgICAgICAgICAgPC0gcGFzdGUwKCJHZW5lcyB3aXRoIENvdW50czogIiwgbnJvdyhkZiksICJcblVwOiAiLCNjcmVhdGUgdGhlIGxhYmVsIG9mIHRoZSBsZWdlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3coc3Vic2V0KGRmLCBsb2cyRm9sZENoYW5nZSA+IDAgJiBwYWRqIDwgcHZhbCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgRG93bjogIiwgbnJvdyhzdWJzZXQoZGYsIGxvZzJGb2xkQ2hhbmdlIDwgMCAmIHBhZGogPCBwdmFsKSksICJcbiIpCiAgCiAgICAgICAgZGYgPC0gZGYgJT4lIG11dGF0ZShzaWduaWZpY2FuY2VfZ3JvdXAgPSBpZmVsc2UocGFkaiA8PSBwdmFsLCB5ZXMgPSAneWVzJywgbm8gPSAnbm8nKSkKICAKICAgICAgICBsZWdlbmRfbGFiZWxzICAgICAgICA8LSBjKHBhc3RlMCgicGFkaiA+ICIsIHB2YWwsIjogIiwgbnJvdyhmaWx0ZXIoZGYsIHNpZ25pZmljYW5jZV9ncm91cCA9PSAnbm8nKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKCJwYWRqIDwgIiwgcHZhbCwiOiAiLCBucm93KGZpbHRlcihkZiwgc2lnbmlmaWNhbmNlX2dyb3VwID09ICd5ZXMnKSkpKQogICAgICAgIG1hLnBsb3QgPC0gICBnZ3Bsb3QoZGYsIGFlcyh4ID0gbG9nYmFzZU1lYW4sIHkgPSBsb2cyRm9sZENoYW5nZSwgZ3JvdXAgPSBzaWduaWZpY2FuY2VfZ3JvdXAsIGNvbG91ciA9IHNpZ25pZmljYW5jZV9ncm91cCkpICsKICAgICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoKSArIHRoZW1lX2J3KCkgKwogICAgICAgICAgICAgICAgICAgICAgZ2d0aXRsZSgnTUEgcGxvdCcpICsgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwgMCkpICsKICAgICAgICAgICAgICAgICAgICAgIHhsYWIoIkEgPSBNZWFuIG9mIGxvZzIoQWJ1bmRhbmNlKSIpICsgeWxhYigiTSA9IGxvZzIoRm9sZCBDaGFuZ2UpIikgKwogICAgICAgICAgICAgICAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImdyYXkyNCIsICJyZWQiKSwgbmFtZSA9IGxvd2VyX2xhYmVsLCBicmVha3MgPSBjKCJncmF5MjQiLCAicmVkIiksIGxhYmVscyA9IGxlZ2VuZF9sYWJlbHMpICsKICAgICAgICAgICAgICAgICAgICAgIGdlb21faGxpbmUoYWVzKHlpbnRlcmNlcHQgPSAwKSwgY29sb3VyID0gImJsYWNrIiwgbGluZXR5cGUgPSAiZGFzaGVkIikgKwogICAgICAgICAgICAgICAgICAgICAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IDEpLCBjb2xvdXIgPSAiZ3JheTY2IiwgbGluZXR5cGUgPSAiZGFzaGVkIikgKwogICAgICAgICAgICAgICAgICAgICAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IC0xKSwgY29sb3VyID0gImdyYXk2NiIsIGxpbmV0eXBlPSJkYXNoZWQiKSArCiAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnbm9uZScsIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0yMCkpCiAgICAgICAgdm9sY2Fuby5wbG90IDwtICAgZ2dwbG90KGRmLCBhZXMoeCA9IGxvZzJGb2xkQ2hhbmdlLCB5ID0gLWxvZyhwYWRqLCBiYXNlID0gYygxMCkpLCBncm91cCA9IHNpZ25pZmljYW5jZV9ncm91cCwgY29sb3VyID0gc2lnbmlmaWNhbmNlX2dyb3VwKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2d0aXRsZSgnVm9sY2FubyBwbG90JykgKwogICAgICAgICAgICAgICAgICAgICAgICAgIHhsYWIoIk0gPSBsb2cyKEZvbGQgQ2hhbmdlKSIpICsgeWxhYigiLWxvZzEwKEFkanVzdGVkIFAtVmFsdWUpIikgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZ3JheTI0IiwgInJlZCIpLCBsYWJlbHMgPSBsZWdlbmRfbGFiZWxzLCBuYW1lPWxvd2VyX2xhYmVsKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVfYncoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgZmFjZSA9ICJib2xkIiksIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MjApKQogICAgIGdyb2IgPC0gICBtYXJyYW5nZUdyb2IobGlzdChtYS5wbG90LAogICAgICAgICAgICAgICAgICAgICAgICAgIHZvbGNhbm8ucGxvdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gdGV4dEdyb2IoeCwgZ3AgPSBncGFyKGZvbnNpemUgPSA0MCwgZm9udGZhY2UgPSAnYm9sZCcsIGNleCA9IDIpLCBoanVzdCA9IDEuOCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdyA9IDEsIG5jb2wgPSAyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocz1jKDAuMzgsIDAuNjIpKQogICAgIGludmlzaWJsZShncm9iKQogICAgfQp9KQoKbmFtZXMocGxvdHMpIDwtIGNvbnRyYXN0X25hbWVzCmBgYAoKYGBge3IgcGxvdG1hdm9sOGhwYUNvbnRyb2xGaXZlUmVwbGljYXRlc1JlbW92ZWQsIGZpZy5rZWVwID0gImFsbCIsIGZpZy5oZWlnaHQgPSAxMCwgZmlnLndpZHRoID0gMjAsIGVjaG89RkFMU0UsIHJlc3VsdHM9J2FzaXMnfQoKZm9yKGkgaW4gY29udHJhc3RfbmFtZXMpewogIGNhdChwYXN0ZTAoIlxuXG5cbiMjIiwgaSwgIlxuIikpCiAgcHJpbnQocGxvdHNbW2ldXSkKfQoKYGBgCgoKI0hlYXRtYXBzCgoKClRoZSBmaXJzdCBoZWF0bWFwIHdhcyBtYWRlIGJ5IGhpZXJhcmNoaWNhbGx5IGNsdXN0ZXJpbmcgdGhlIGV1Y2xpZGVhbiBkaXN0YW5jZXMgb2YgdGhlIGxvZzIgZm9sZCBjaGFuZ2UgZm9yIGdlbmVzIHdpdGggcC12YWx1ZXMgbGVzcyB0aGFuICAxZV4tNSBhdCBhbnkgdGltZSBwb2ludC4KClRoZSBzZWNvbmQgaGVhdG1hcCB1c2VzIHRoZSBzYW1lIGhpZXJhcmNoaWNhbCBtZXRob2QgdG8gY2x1c3RlciB0aW1lcG9pbnRzIGFzIHdlbGwgYXMgZ2VuZXMuCgoKYGBge3IgcGFpcndpc2VIZWF0bWFwczhocGFDb250cm9sRml2ZVJlcGxpY2F0ZXNSZW1vdmVkLCByZXN1bHRzID0gImhpZGUiLCBmaWcuY2FwID0gIiIsIGZpZy5rZWVwID0gImhpZ2gifQoKCmxmY190YWJsZSA8LSBhbGxfcmVzdWx0c190aWR5REYgJT4lCiAgbXV0YXRlKHNpZ25pZmljYW50ID0gaWZlbHNlKGRlYV9JRCA9PSAncGFkaicgJiBkZWFfVmFsdWUgPD0gcHZhbCwgeWVzID0gVFJVRSwgbm8gPSBGQUxTRSkpICU+JSAjIGxhYmVsIGFsbCBzaWduaWZpY2FudCBnZW5lcwogIGdyb3VwX2J5KGNvbnRyYXN0SUQsIEdlbmUpICU+JSAjIGxhYmVsIHRoZSAjIG9mIHRpbWVzIGdlbmVzIHRoYXQgYXJlIHNpZ25pZmljYW50CiAgdW5ncm91cCgpICAlPiUKICBncm91cF9ieShHZW5lKSAlPiUKICBmaWx0ZXIoYW55KHNpZ25pZmljYW50KSwgZGVhX0lEID09ICdsb2cyRm9sZENoYW5nZScpICU+JQogIGRwbHlyOjpzZWxlY3QoLXNpZ25pZmljYW50KSAlPiUgCiAgdW5pdGUoY29sbmFtZSwgY29udHJhc3RJRCwgZGVhX0lEKSAlPiUgIyBtYWtlIHRoZSB0YWJsZSB3aWRlIGZvcm1hdHRlZAogIHNwcmVhZChjb2xuYW1lLCBkZWFfVmFsdWUpCgoKIyMgY3JlYXRlIGEgdGFibGUgb2Ygc2lnbmlmaWNhbnQgZ2VuZXMgd2l0aCB0aGUgY2x1c3RlciBjb2xvcnMgYXNzaWduZWQKCnNpZ24udGFibGUgPC0gYWxsX3Jlc3VsdHNfdGlkeURGICAlPiUgCiAgc3ByZWFkKGtleSA9IGRlYV9JRCwgdmFsdWUgPSBkZWFfVmFsdWUpICAlPiUgCiAgZmlsdGVyKEdlbmUgJWluJSBsZmNfdGFibGUkR2VuZSkgJT4lCiAgZ3JvdXBfYnkoY29udHJhc3RJRCwgR2VuZSkgJT4lIAogIG11dGF0ZShzb3J0YnkgPSAtbG9nKHBhZGosIGJhc2UgPSBjKDEwKSkqc2lnbihsb2cyRm9sZENoYW5nZSkpICU+JSAKICB1bmdyb3VwKCkgJT4lIGdhdGhlcihkZWFfSUQsIGRlYV9WYWx1ZSwgLUdlbmUsIC1jb250cmFzdElEKSAlPiUgCiAgdW5pdGUoaWRBbGwsIGNvbnRyYXN0SUQsIGRlYV9JRCkgJT4lIHNwcmVhZChrZXkgPSBpZEFsbCwgdmFsdWUgPSBkZWFfVmFsdWUpICU+JQogIGRwbHlyOjpyZW5hbWUoJ1RyYW5zY3JpcHRJRCcgPSBHZW5lKQoKCmhlYXRtYXAuaW5wdXQudGFibGUgICAgICAgICAgIDwtIGRhdGEuZnJhbWUobGZjX3RhYmxlKQpyb3duYW1lcyhoZWF0bWFwLmlucHV0LnRhYmxlKSA8LSBsZmNfdGFibGUkR2VuZQpoZWF0bWFwLmlucHV0LnRhYmxlJEdlbmUgICAgICA8LSBOVUxMCmhlYXRtYXAuaW5wdXQudGFibGUgICAgICAgICAgIDwtIG5hLm9taXQoZGF0YS5tYXRyaXgoaGVhdG1hcC5pbnB1dC50YWJsZVt3aGljaChyb3duYW1lcyhoZWF0bWFwLmlucHV0LnRhYmxlKSAlaW4lIHNpZ24udGFibGUkVHJhbnNjcmlwdElEKSwgXSkpCmNvbG5hbWVzKGhlYXRtYXAuaW5wdXQudGFibGUpIDwtIGNvbnRyYXN0X25hbWVzCgoKcHJldHR5Y29sb3JzICA8LSBjb2xvclJhbXBQYWxldHRlKHJldihicmV3ZXIucGFsKDExLCAiU3BlY3RyYWwiKSkpCmNvbC5icmVha3MgICAgPC0gc2VxKC0zLCAzLCBsZW5ndGgub3V0ID0gbmNvbChoZWF0bWFwLmlucHV0LnRhYmxlKSkKCgojIyBNYWtlIHR3byBoZWF0bWFwcywgYWxsb3cgY3VzdGltaXphYmxlIGdyYXBoaW5nCgpociA8LSBoY2x1c3QoZGlzdChoZWF0bWFwLmlucHV0LnRhYmxlKSwgbWV0aG9kPSJjb21wbGV0ZSIpICMgQ3JlYXRlcyByb3cgZGVuZHJvZ3JhbQpoYyA8LSBoY2x1c3QoZGlzdCh0KGhlYXRtYXAuaW5wdXQudGFibGUpKSwgbWV0aG9kPSJjb21wbGV0ZSIpICMgQ3JlYXRlcyBjb2x1bW4gZGVuZHJvZ3JhbQoKbXljbHIgICAgIDwtIGN1dHJlZShociwgayA9IDcpICMgc2V0IHVwIHdoZXJlIHRoZSBncm91cHMgd2lsbCBiZSwgY2hhbmdlICdrJyBmb3IgbW9yZSBvciBsZXNzIGdyb3VwcwpteWNvbHIgICAgPC0gYygiR3JlZW4iLCAiUmVkIiwgIkJsdWUiLCAiT3JhbmdlIiwgIlB1cnBsZSIsICJQaW5rIiwgIlllbGxvdyIpICMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGggYXMgJ2snCm15Y29sciAgICA8LSBteWNvbHJbYXMudmVjdG9yKG15Y2xyKV0gIyBwdWxsIG91dCB0aGUgY29sb3JzIGFzc2lnbmVkIHRvIGVhY2ggZ2VuZQpteWNvbHIuZGYgPC0gZGF0YS5mcmFtZShDbHVzdGVyX0NvbG9yID0gbXljb2xyLCBUcmFuc2NyaXB0SUQgPSBuYW1lcyhteWNscikpICMgY3JlYXRlIGEgZGF0YSBmcmFtZSBvZiB0aGUgY2x1c3RlciBjb2xvciBlYWNoIGdlbmUgYmVsb25ncyB0bwoKCmlmKG5jb2woaGVhdG1hcC5pbnB1dC50YWJsZSkgPiAxKXsKICAgICMjIE1ha2UgYSBoZWF0bWFwIHdpdGhvdXQgYSBjb2x1bW4gZGVuZHJvZ3JhbQogICAgY29sLmJyZWFrcyAgICA8LSBzZXEoLTMsIDMsIGxlbmd0aC5vdXQgPSBuY29sKGhlYXRtYXAuaW5wdXQudGFibGUpKQogICAgaGVhdG1hcCAgICAgICA8LSBoZWF0bWFwLjIoaGVhdG1hcC5pbnB1dC50YWJsZSwgbWFyZ2luID0gYygxNSw1KSwgY29sID0gcHJldHR5Y29sb3JzLCBkZW5kcm9ncmFtID0gJ3JvdycsIHRyYWNlID0gYygibm9uZSIpLCBSb3d2PWFzLmRlbmRyb2dyYW0oaHIpLCBDb2x2ID0gTkEsIGxhYlJvdyA9IEZBTFNFLCBrZXkgPSBUUlVFLCBicmVha3MgPSBjb2wuYnJlYWtzLCBrZXkueWxhYiA9ICJHZW5lIENvdW50Iiwga2V5LnhsYWIgPSAibG9nMkZvbGRDaGFuZ2UiLCBjZXhDb2wgPSAxLjUsIFJvd1NpZGVDb2xvcnMgPSBteWNvbHIpCiAgICB0aXRsZShtYWluID0gcGFzdGUwKCJDbHVzdGVyaW5nIG9mICIsIG5yb3coaGVhdG1hcC5pbnB1dC50YWJsZSksIiBHZW5lcyIpLCBsaW5lID0gMCkKICAgIHBhcihjZXgubWFpbj0wLjkpCn0KCgppZihuY29sKGhlYXRtYXAuaW5wdXQudGFibGUpID4gMikgewogICAgayA8LSBpZmVsc2UobmNvbChoZWF0bWFwLmlucHV0LnRhYmxlIDwgNSksIDMsIDUpCiAgICBteWNsYyAgPC0gY3V0cmVlKGhjLCBrID0gaykgIyBjcmVhdGUgZ3JvdXBpbmdzIGZvciB0aGUgY29sdW1uIGRlbmRyb2dyYW0KICAgIG15Y29sYyA8LSBjKCJHcmVlbiIsICJSZWQiLCAiQmx1ZSIsICJPcmFuZ2UiLCAiUHVycGxlIikKICAgIG15Y29sYyA8LSBteWNvbGNbYXMudmVjdG9yKG15Y2xjKV0KICAgICMjIE1ha2UgYSBoZWF0bWFwIG9mIHRoZSBsb2dmb2xkIGNoYW5nZXMgd2l0aCBjb2x1bW4gZGVuZHJvZ3JhbS4KICAgIGhlYXRtYXAgICAgICAgPC0gaGVhdG1hcC4yKGhlYXRtYXAuaW5wdXQudGFibGUsIG1hcmdpbiA9IGMoMTUsNSksIGRlbmRyb2dyYW0gPSAnYm90aCcsIFJvd3YgPSBhcy5kZW5kcm9ncmFtKGhyKSwgQ29sdiA9IGFzLmRlbmRyb2dyYW0oaGMpLCBjb2wgPSBwcmV0dHljb2xvcnMsIHRyYWNlID0gYygibm9uZSIpLCBsYWJSb3cgPSBGQUxTRSwga2V5ID0gVFJVRSwgYnJlYWtzID0gY29sLmJyZWFrcywgbWFpbiA9IHBhc3RlMCgiQ2x1c3RlcmluZyBvZiBUaW1lcG9pbnRzIG9uICIsIG5yb3coaGVhdG1hcC5pbnB1dC50YWJsZSksIiBHZW5lcyIpLCBrZXkueWxhYiA9ICJHZW5lIENvdW50Iiwga2V5LnhsYWIgPSAibG9nMkZvbGRDaGFuZ2UiLCBjZXhDb2wgPSAxLjUsIFJvd1NpZGVDb2xvcnMgPSBteWNvbHIsIENvbFNpZGVDb2xvcnMgPSBteWNvbGMpCn0KCmBgYAoKCgpgYGB7ciBzZXNzaW9uOGhwYUNvbnRyb2xGaXZlUmVwbGljYXRlc1JlbW92ZWQsIGVjaG89RkFMU0V9CndyaXRlTGluZXMoY2FwdHVyZS5vdXRwdXQoc2Vzc2lvbkluZm8oKSksICJzZXNzaW9uSW5mby84aHBhNVJSU2Vzc2lvbkluZm8udHh0IikKYGBgCgojW1Itc2Vzc2lvbiBpbmZvcm1hdGlvbl0oc2Vzc2lvbkluZm8vOGhwYTVSUlNlc3Npb25JbmZvLnR4dCkKCgo=

Privacy Policy

Terms of Use