Answers

Exercise 2-A

  • When the enrichment analysis is complete, a new tab titled STRING Enrichment will open in the Table Panel.



  • At the top left of the STRING enrichment tab, click the filter icon . Select GO Biological Process and check the Remove redundant terms check-box. Then click OK.

  • Next, add a split donut chart to the nodes representing the top terms by clicking on

  • Explore custom settings via in the top right of the STRING enrichment tab.


Export your Networks

Cytoscape provides a number of ways to save results and visualizations:

  • As a session: File → Save Session, File → Save Session As…
  • As an image: File → Export → Network to Image…
  • As a graph format file: File → Export → Network to File.
    • Formats:
    • CX JSON / CX2 JSON
    • Cytoscape.js JSON
    • GraphML

Exercise 2-B

  • Find significant expression changes in Cluster 1
    Hint: We are going to repeat step 4 with “Cluster 1 Mean log2FC” as the column. This represents the mean expression across the samples in cluster 1 (the leftmost cluster in the previous figure).

Open the Filter tab and setup two Column Filters for the “Cluster 1 Mean log2FC” column, one for up and one for down. Select the “Cluster 1 Mean log2FC” column and set the values to be between -5 and-1, then add a second filter (be sure to specify OR at the top) and set the values between 1 and 5. This should result in a selection of 192 nodes.


* Download the PPI from STRING From the above selection filter, we’ve identified 192 nodes that show an average Log2FC greater than 5 or less than 1, and selected those nodes. Now, we create a separate network that includes all of those 192 nodes by selecting the “Create Network from selected nodes and edges option” and then load the protein-protein interaction data from STRING. Note that only the selected nodes are shown in the Table Panel.

Select gene names from Table Panel.

  • Select everything in the name column by clicking into the first cell and then dragging down until you get to the bottom. Then, do a copy (Control-C or Apple-C).


  • Paste gene names into STRING network search. In the Network tab of the Control Panel at the top should be a text field with an icon at the left. Click on that icon and select STRING protein query. (If you don’t see any STRING options, the stringApp hasn’t been loaded and needs to be loaded from either the App store or Cytoscape options menu.) Then click into the text field and paste the list of genes.


  • Set STRING search parameters. Next to the text field is a menu with a list of options. Change the Confidence (score) cutoff to 0.8 and the Maximum additional interactors to 30. This will get only high quality results (80% confidence) and add 30 extra proteins to the network.

Create the network.

Click on the search icon (magnifying glass) to load the network. The network should appear similar to the figure below.



* Style the network to show differential expression. In this step, we’ll change the style of the network to highlight the differentially expressed genes.


Exercise 3-A

Walk-through exercise

For the exercise, we are going to use mRNA bladder cancer data generated from RNA-Seq platform. The data can be retrived from Robertson et al. Cell 2017 or downloaded from (Here..)

ClueGO settings

  • set the type of analysis: Compare Cluster
  • select the organism: Homo Sapiens and the the type of ids used: AccessionID
  • load sample gene lists:
    • choose Cluster #1: select Top_Down_genes_BLCA_Session3.txt - (Here..)
    • choose Cluster #2: Top_Up_genes_BLCA_Session3.txt - (Here..)
  • select the Ontologies:
    • GO BiologicalProcess,
    • KEGG Pathways and
    • BioCarta pathway reactome
  • select the statistical test: Enrichment/Deplection (Two sided hypergeometric test), FisherExactTest
  • select the correction method: Bonferroni
  • click Show Advanced Settings
  • set GO Tree Level: Min 4 and Max 5
  • set the selection criteria for the terms that have associated genes from cluster 1: min 2 genes/term and minimum 4% from all the Genes associated with the term
  • select OR (e.g. min 2 genes from cluster #1 or min 2 genes from cluster #2)
  • set is specific to 66% (if 66% or the genes associated with the term are from cluster #1, the term is considered specific for this cluster)
  • set the selection criteria for the terms that have associated genes from cluster 2: min 2 genes/term and minimum 4% from all the Genes associated with the term
  • select Use GO Term Grouping
  • select Fix Group coloring
  • select Leading Group Term based on Highest Significance
  • select Kappa Score grouping with 3 terms in initial group and 50% overlap for groups to merge
  • select ShowDifference
  • Start

Customize the network using Cytoscape features

  • select Style (Cytoscape Control Panel)
  • select Node Font Size
  • set the value of FALSE (size for the name of the terms) to 0.001 and press Enter
  • set the value of TRUE (size for the name of groups) to 26 and press Enter
  • select Layout (Cytoscape menu bar)
  • set scale to 1/3
  • zoom the image
  • change the position of the leading terms to make visible the name of the group
  • change the possition of notgrouped terms if due to rescaling they are too close to a group
  • for visualizing groups press Show Groups

  • Using the filters and style options above, develop a network by using cluster compare for the two bladder cancer conditions - Normal VS Tumor.

  • Save your network in two formats: (a) as a Cytoscape Session (.sys format), and (b) as a .png or .pdf figure.

    • The cytoscape session (.sys) will be used in the next section for CluePedia analysis.

More details on using specific options can be achieved by folowing the ClueGO documentation: http://www.ici.upmc.fr/cluego/ClueGODocumentation2019.pdf


LS0tCnRpdGxlOiAiQW5zd2VycyB0byBDb3Vyc2UgRXhlcmNpc2UiCmF1dGhvcjogIkFrc2hheSBCaGF0IgpkYXRlOiAnYHIgZm9ybWF0KFN5cy50aW1lKCksICJMYXN0IG1vZGlmaWVkOiAlZCAlYiAlWSIpYCcKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgICBjc3M6IHN0eWxlc2hlZXRzL3N0eWxlcy5jc3MKICBwZGZfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwotLS0KPGltZyBzcmM9ImltYWdlcy9sb2dvLXNtLnBuZyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDo0MHB4O3JpZ2h0OjEwcHg7IiB3aWR0aD0iMjAwIiAvPgoKIyBBbnN3ZXJzCgojIyBFeGVyY2lzZSAyLUEgCgoKKiBXaGVuIHRoZSBlbnJpY2htZW50IGFuYWx5c2lzIGlzIGNvbXBsZXRlLCBhIG5ldyB0YWIgdGl0bGVkICoqU1RSSU5HKiogKipFbnJpY2htZW50Kiogd2lsbCBvcGVuIGluIHRoZSAqKlRhYmxlIFBhbmVsKiouPGJyPjwvYnI+CiAgICA8YnI+PC9icj4KIVtdKGltYWdlcy9UYWJsZS1wYW5lLnBuZykKICA8YnI+PC9icj48YnI+PC9icj4KICAKICAKKiBBdCB0aGUgdG9wIGxlZnQgb2YgdGhlIFNUUklORyBlbnJpY2htZW50IHRhYiwgY2xpY2sgdGhlIGZpbHRlciBpY29uIGByIGljb25zOjpmb250YXdlc29tZSgiZmlsdGVyIiwgc3R5bGUgPSAic29saWQiKWAgLiBTZWxlY3QgKipHTyBCaW9sb2dpY2FsIFByb2Nlc3MqKiBhbmQgY2hlY2sgdGhlICoqUmVtb3ZlIHJlZHVuZGFudCB0ZXJtcyBjaGVjay1ib3gqKi4gVGhlbiBjbGljayAqKk9LLioqPGJyPjwvYnI+CiogTmV4dCwgYWRkIGEgc3BsaXQgZG9udXQgY2hhcnQgdG8gdGhlIG5vZGVzIHJlcHJlc2VudGluZyB0aGUgdG9wIHRlcm1zIGJ5IGNsaWNraW5nIG9uIDxicj48L2JyPgoqIEV4cGxvcmUgY3VzdG9tIHNldHRpbmdzIHZpYSAgIGluIHRoZSB0b3AgcmlnaHQgb2YgdGhlIFNUUklORyBlbnJpY2htZW50IHRhYi48YnI+PC9icj4KICAgIDxicj48L2JyPjxicj48L2JyPgogICAgIVtdKGltYWdlcy9TdHJpbmctQmlvbG9naWNhbFByb2Nlc3MucG5nKQogICAgCiMjIyBFeHBvcnQgeW91ciBOZXR3b3JrcwoKQ3l0b3NjYXBlIHByb3ZpZGVzIGEgbnVtYmVyIG9mIHdheXMgdG8gc2F2ZSByZXN1bHRzIGFuZCB2aXN1YWxpemF0aW9uczogPGJyPjwvYnI+CgoqIEFzIGEgc2Vzc2lvbjogKipGaWxlIOKGkiBTYXZlIFNlc3Npb24sIEZpbGUg4oaSIFNhdmUgU2Vzc2lvbiBBcy4uLioqIDxicj48L2JyPgoqIEFzIGFuIGltYWdlOiAqKkZpbGUg4oaSIEV4cG9ydCDihpIgTmV0d29yayB0byBJbWFnZS4uLioqIDxicj48L2JyPgoqIEFzIGEgZ3JhcGggZm9ybWF0IGZpbGU6ICoqRmlsZSDihpIgRXhwb3J0IOKGkiBOZXR3b3JrIHRvIEZpbGUuKiogPGJyPjwvYnI+CiAgKiAqKkZvcm1hdHM6KiogPGJyPjwvYnI+CiAgKiAgKipDWCBKU09OIC8gQ1gyIEpTT04qKiA8YnI+PC9icj4KICAqICoqQ3l0b3NjYXBlLmpzIEpTT04qKiA8YnI+PC9icj4KICAqICoqR3JhcGhNTCoqIDxicj48L2JyPgogICAgCgojIyBFeGVyY2lzZSAyLUIKCiogRmluZCBzaWduaWZpY2FudCBleHByZXNzaW9uIGNoYW5nZXMgaW4gKipDbHVzdGVyIDEqKiA8YnI+PC9icj4KKipIaW50OioqIFdlIGFyZSBnb2luZyB0byByZXBlYXQgc3RlcCA0IHdpdGggIkNsdXN0ZXIgMSBNZWFuIGxvZzJGQyIgYXMgdGhlIGNvbHVtbi4gVGhpcyByZXByZXNlbnRzIHRoZSBtZWFuIGV4cHJlc3Npb24gYWNyb3NzIHRoZSBzYW1wbGVzIGluIGNsdXN0ZXIgMSAodGhlIGxlZnRtb3N0IGNsdXN0ZXIgaW4gdGhlIHByZXZpb3VzIGZpZ3VyZSkuCgpPcGVuIHRoZSAqKkZpbHRlcioqIHRhYiBhbmQgc2V0dXAgdHdvICoqQ29sdW1uIEZpbHRlcnMqKiBmb3IgdGhlICoqIkNsdXN0ZXIgMSBNZWFuIGxvZzJGQyIqKiBjb2x1bW4sIG9uZSBmb3IgdXAgYW5kIG9uZSBmb3IgZG93bi4gU2VsZWN0IHRoZSAqKiJDbHVzdGVyIDEgTWVhbiBsb2cyRkMiKiogY29sdW1uIGFuZCBzZXQgdGhlIHZhbHVlcyB0byBiZSBiZXR3ZWVuICoqLTUgYW5kLTEqKiwgdGhlbiBhZGQgYSBzZWNvbmQgZmlsdGVyIChiZSBzdXJlIHRvIHNwZWNpZnkgKipPUiAqKmF0IHRoZSB0b3ApIGFuZCBzZXQgdGhlIHZhbHVlcyBiZXR3ZWVuICoqMSBhbmQgNSoqLgpUaGlzIHNob3VsZCByZXN1bHQgaW4gYSBzZWxlY3Rpb24gb2YgMTkyIG5vZGVzLgoKIVtdKGltYWdlcy9GaWx0ZXJfRXhlcmNpc2UucG5nKQo8YnI+PC9icj4KKiBEb3dubG9hZCB0aGUgUFBJIGZyb20gU1RSSU5HCkZyb20gdGhlIGFib3ZlIHNlbGVjdGlvbiBmaWx0ZXIsIHdl4oCZdmUgaWRlbnRpZmllZCAxOTIgbm9kZXMgdGhhdCBzaG93IGFuIGF2ZXJhZ2UgKipMb2cyRkMgZ3JlYXRlciB0aGFuIDUgb3IgbGVzcyB0aGFuIDEqKiwgYW5kIHNlbGVjdGVkIHRob3NlIG5vZGVzLiBOb3csIHdlIGNyZWF0ZSBhIHNlcGFyYXRlIG5ldHdvcmsgdGhhdCBpbmNsdWRlcyBhbGwgb2YgdGhvc2UgMTkyIG5vZGVzIGJ5IHNlbGVjdGluZyB0aGUgKioiQ3JlYXRlIE5ldHdvcmsgZnJvbSBzZWxlY3RlZCBub2RlcyBhbmQgZWRnZXMgb3B0aW9uIioqIGFuZCB0aGVuIGxvYWQgdGhlIHByb3RlaW4tcHJvdGVpbiBpbnRlcmFjdGlvbiBkYXRhIGZyb20gKipTVFJJTkcuKiogTm90ZSB0aGF0IG9ubHkgdGhlIHNlbGVjdGVkIG5vZGVzIGFyZSBzaG93biBpbiB0aGUgKipUYWJsZSBQYW5lbCoqLgoKCiMjICoqU2VsZWN0IGdlbmUgbmFtZXMgZnJvbSBUYWJsZSBQYW5lbC4qKiAKKiBTZWxlY3QgZXZlcnl0aGluZyBpbiB0aGUgKipuYW1lKiogY29sdW1uIGJ5IGNsaWNraW5nIGludG8gdGhlIGZpcnN0IGNlbGwgYW5kIHRoZW4gZHJhZ2dpbmcgZG93biB1bnRpbCB5b3UgZ2V0IHRvIHRoZSBib3R0b20uIFRoZW4sIGRvIGEgY29weSAqKihDb250cm9sLUMgb3IgQXBwbGUtQykuKioKCiFbXShpbWFnZXMvQ29weV9QUElfTmFtZXMucG5nKSAKPGJyPjwvYnI+CgoqICoqUGFzdGUgZ2VuZSBuYW1lcyBpbnRvIFNUUklORyBuZXR3b3JrIHNlYXJjaCoqLiBJbiB0aGUgKipOZXR3b3JrKiogdGFiIG9mIHRoZSAqKkNvbnRyb2wgUGFuZWwqKiBhdCB0aGUgdG9wIHNob3VsZCBiZSBhIHRleHQgZmllbGQgd2l0aCBhbiBpY29uIGF0IHRoZSBsZWZ0LiBDbGljayBvbiB0aGF0IGljb24gYW5kIHNlbGVjdCAqKlNUUklORyBwcm90ZWluIHF1ZXJ5KiouIChJZiB5b3UgZG9u4oCZdCBzZWUgYW55ICoqU1RSSU5HKiogb3B0aW9ucywgdGhlICoqc3RyaW5nQXBwKiogaGFzbuKAmXQgYmVlbiBsb2FkZWQgYW5kIG5lZWRzIHRvIGJlIGxvYWRlZCBmcm9tIGVpdGhlciB0aGUgQXBwIHN0b3JlIG9yIEN5dG9zY2FwZSBvcHRpb25zIG1lbnUuKSBUaGVuIGNsaWNrIGludG8gdGhlIHRleHQgZmllbGQgYW5kIHBhc3RlIHRoZSBsaXN0IG9mIGdlbmVzLgoKIVtdKGltYWdlcy9QYXN0ZV9TdHJpbmcucG5nKQo8YnI+PC9icj4KCiogKipTZXQgU1RSSU5HIHNlYXJjaCBwYXJhbWV0ZXJzLioqIE5leHQgdG8gdGhlIHRleHQgZmllbGQgaXMgYSBtZW51IHdpdGggYSBsaXN0IG9mIG9wdGlvbnMuIENoYW5nZSB0aGUgKipDb25maWRlbmNlIChzY29yZSkgY3V0b2ZmKiogdG8gMC44IGFuZCB0aGUgKipNYXhpbXVtIGFkZGl0aW9uYWwgaW50ZXJhY3RvcnMqKiB0byAzMC4gVGhpcyB3aWxsIGdldCBvbmx5IGhpZ2ggcXVhbGl0eSByZXN1bHRzICg4MCUgY29uZmlkZW5jZSkgYW5kIGFkZCAzMCBleHRyYSBwcm90ZWlucyB0byB0aGUgbmV0d29yay4KIVtdKGltYWdlcy9TdHJpbmdfUGFyYW1ldGVycy5wbmcpCjxicj48L2JyPgoKIyMgKipDcmVhdGUgdGhlIG5ldHdvcmsuKiogCkNsaWNrIG9uIHRoZSBzZWFyY2ggaWNvbiAobWFnbmlmeWluZyBnbGFzcykgdG8gbG9hZCB0aGUgbmV0d29yay4gVGhlIG5ldHdvcmsgc2hvdWxkIGFwcGVhciBzaW1pbGFyIHRvIHRoZSBmaWd1cmUgYmVsb3cuCgohW10oaW1hZ2VzL1NUUklOR19uZXR3b3JrLnBuZykgCjxicj48L2JyPjxicj48L2JyPgoqIFN0eWxlIHRoZSBuZXR3b3JrIHRvIHNob3cgZGlmZmVyZW50aWFsIGV4cHJlc3Npb24uCkluIHRoaXMgc3RlcCwgd2XigJlsbCBjaGFuZ2UgdGhlIHN0eWxlIG9mIHRoZSBuZXR3b3JrIHRvIGhpZ2hsaWdodCB0aGUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzLgoKPC9kaXY+IDxicj48L2JyPgoKCiMjIEV4ZXJjaXNlIDMtQQoKIyBXYWxrLXRocm91Z2ggZXhlcmNpc2UKCkZvciB0aGUgZXhlcmNpc2UsIHdlIGFyZSBnb2luZyB0byB1c2UgbVJOQSBibGFkZGVyIGNhbmNlciBkYXRhIGdlbmVyYXRlZCBmcm9tIFJOQS1TZXEgcGxhdGZvcm0uIFRoZSBkYXRhIGNhbiBiZSByZXRyaXZlZCBmcm9tIFJvYmVydHNvbiBldCBhbC4gQ2VsbCAyMDE3IG9yIGRvd25sb2FkZWQgZnJvbSAoW0hlcmUuLl0oaHR0cHM6Ly9naXRodWIuY29tL2ExYWtzL0N5dG9zY2FwZV9Db3Vyc2UvdHJlZS9tYWluL0RhdGFfRmlsZXMpKSAKCiMjIENsdWVHTyBzZXR0aW5ncwoKKiBzZXQgdGhlIHR5cGUgb2YgYW5hbHlzaXM6IENvbXBhcmUgQ2x1c3RlcgoqIHNlbGVjdCB0aGUgb3JnYW5pc206IEhvbW8gU2FwaWVucyBhbmQgdGhlIHRoZSB0eXBlIG9mIGlkcyB1c2VkOiBBY2Nlc3Npb25JRAoqIGxvYWQgc2FtcGxlIGdlbmUgbGlzdHM6CiAgKiAqKmNob29zZSBDbHVzdGVyICMxKio6IHNlbGVjdCBUb3BfRG93bl9nZW5lc19CTENBX1Nlc3Npb24zLnR4dCAtIChbSGVyZS4uXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYTFha3MvQ3l0b3NjYXBlX0NvdXJzZS9tYWluL0RhdGFfRmlsZXMvVG9wX0Rvd25fZ2VuZXNfQkxDQV9TZXNzaW9uMy50eHQpKQogICogKipjaG9vc2UgQ2x1c3RlciAjMioqOiBUb3BfVXBfZ2VuZXNfQkxDQV9TZXNzaW9uMy50eHQgLSAoW0hlcmUuLl0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2ExYWtzL0N5dG9zY2FwZV9Db3Vyc2UvbWFpbi9EYXRhX0ZpbGVzL1RvcF9VcF9nZW5lc19CTENBX1Nlc3Npb24zLnR4dCkpCiogc2VsZWN0IHRoZSBPbnRvbG9naWVzOgogICogR08gQmlvbG9naWNhbFByb2Nlc3MsCiAgKiBLRUdHIFBhdGh3YXlzICBhbmQKICAqIEJpb0NhcnRhIHBhdGh3YXkgcmVhY3RvbWUgCiogc2VsZWN0IHRoZSBzdGF0aXN0aWNhbCB0ZXN0OiAqKkVucmljaG1lbnQvRGVwbGVjdGlvbiAoVHdvIHNpZGVkIGh5cGVyZ2VvbWV0cmljIHRlc3QpKiosICoqRmlzaGVyRXhhY3RUZXN0KioKKiBzZWxlY3QgdGhlIGNvcnJlY3Rpb24gbWV0aG9kOiAqKkJvbmZlcnJvbmkqKgoqIGNsaWNrIFNob3cgQWR2YW5jZWQgU2V0dGluZ3MKKiBzZXQgR08gVHJlZSBMZXZlbDogTWluIDQgYW5kIE1heCA1Ciogc2V0IHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIHRoZSB0ZXJtcyB0aGF0IGhhdmUgYXNzb2NpYXRlZCBnZW5lcyBmcm9tIGNsdXN0ZXIgMTogbWluIDIgZ2VuZXMvdGVybQphbmQgbWluaW11bSA0JSBmcm9tIGFsbCB0aGUgR2VuZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXJtCiogc2VsZWN0IE9SIChlLmcuIG1pbiAyIGdlbmVzIGZyb20gY2x1c3RlciAjMSBvciBtaW4gMiBnZW5lcyBmcm9tIGNsdXN0ZXIgIzIpCiogc2V0IGlzIHNwZWNpZmljIHRvIDY2JSAoaWYgNjYlIG9yIHRoZSBnZW5lcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRlcm0gYXJlIGZyb20gY2x1c3RlciAjMSwgdGhlIHRlcm0KaXMgY29uc2lkZXJlZCBzcGVjaWZpYyBmb3IgdGhpcyBjbHVzdGVyKQoqIHNldCB0aGUgc2VsZWN0aW9uIGNyaXRlcmlhIGZvciB0aGUgdGVybXMgdGhhdCBoYXZlIGFzc29jaWF0ZWQgZ2VuZXMgZnJvbSBjbHVzdGVyIDI6IG1pbiAyIGdlbmVzL3Rlcm0KYW5kIG1pbmltdW0gNCUgZnJvbSBhbGwgdGhlIEdlbmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGVybQoqIHNlbGVjdCBVc2UgR08gVGVybSBHcm91cGluZwoqIHNlbGVjdCBGaXggR3JvdXAgY29sb3JpbmcKKiBzZWxlY3QgTGVhZGluZyBHcm91cCBUZXJtIGJhc2VkIG9uIEhpZ2hlc3QgU2lnbmlmaWNhbmNlCiogc2VsZWN0IEthcHBhIFNjb3JlIGdyb3VwaW5nIHdpdGggMyB0ZXJtcyBpbiBpbml0aWFsIGdyb3VwIGFuZCA1MCUgb3ZlcmxhcCBmb3IgZ3JvdXBzIHRvIG1lcmdlCiogc2VsZWN0IFNob3dEaWZmZXJlbmNlCiogU3RhcnQKCiFbXShpbWFnZXMvQ2x1ZUdPLUZpZ3VyZS5wbmcpCgoKIyMgQ3VzdG9taXplIHRoZSBuZXR3b3JrIHVzaW5nIEN5dG9zY2FwZSBmZWF0dXJlcwoKKiBzZWxlY3QgKipTdHlsZSoqIChDeXRvc2NhcGUgQ29udHJvbCBQYW5lbCkKKiBzZWxlY3QgTm9kZSBGb250IFNpemUKKiBzZXQgdGhlIHZhbHVlIG9mIEZBTFNFIChzaXplIGZvciB0aGUgbmFtZSBvZiB0aGUgdGVybXMpIHRvIDAuMDAxIGFuZCBwcmVzcyBFbnRlcgoqIHNldCB0aGUgdmFsdWUgb2YgVFJVRSAoc2l6ZSBmb3IgdGhlIG5hbWUgb2YgZ3JvdXBzKSB0byAyNiBhbmQgcHJlc3MgRW50ZXIKKiBzZWxlY3QgTGF5b3V0IChDeXRvc2NhcGUgbWVudSBiYXIpCiogc2V0IHNjYWxlIHRvIDEvMwoqIHpvb20gdGhlIGltYWdlCiogY2hhbmdlIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGVhZGluZyB0ZXJtcyB0byBtYWtlIHZpc2libGUgdGhlIG5hbWUgb2YgdGhlIGdyb3VwCiogY2hhbmdlIHRoZSBwb3NzaXRpb24gb2Ygbm90Z3JvdXBlZCB0ZXJtcyBpZiBkdWUgdG8gcmVzY2FsaW5nIHRoZXkgYXJlIHRvbyBjbG9zZSB0byBhIGdyb3VwCiogZm9yIHZpc3VhbGl6aW5nIGdyb3VwcyBwcmVzcyBTaG93IEdyb3VwcwoKIVtdKGltYWdlcy9DbHVlR08tQ3VzdG9taXplZEZpZ3VyZS5wbmcpCgohW10oaW1hZ2VzL0NsdWVHTy1DdXN0b21pemVkU2V0dGluZy5wbmcpCgoqIFVzaW5nIHRoZSBmaWx0ZXJzIGFuZCBzdHlsZSBvcHRpb25zIGFib3ZlLCBkZXZlbG9wIGEgbmV0d29yayBieSB1c2luZyBjbHVzdGVyIGNvbXBhcmUgZm9yIHRoZSB0d28gYmxhZGRlciBjYW5jZXIgY29uZGl0aW9ucyAtIE5vcm1hbCBWUyBUdW1vci4gCgoqIFNhdmUgeW91ciBuZXR3b3JrIGluIHR3byBmb3JtYXRzOiAoYSkgYXMgYSBDeXRvc2NhcGUgU2Vzc2lvbiAoKiouc3lzICoqIGZvcm1hdCksIGFuZCAgKGIpIGFzIGEgKioucG5nIG9yIC5wZGYqKiBmaWd1cmUuCiAgKiBUaGUgY3l0b3NjYXBlIHNlc3Npb24gKC5zeXMpIHdpbGwgYmUgdXNlZCBpbiB0aGUgbmV4dCBzZWN0aW9uIGZvciBDbHVlUGVkaWEgYW5hbHlzaXMuIAoKTW9yZSBkZXRhaWxzIG9uIHVzaW5nIHNwZWNpZmljIG9wdGlvbnMgY2FuIGJlIGFjaGlldmVkIGJ5IGZvbG93aW5nIHRoZSAqKkNsdWVHTyoqIGRvY3VtZW50YXRpb246IGh0dHA6Ly93d3cuaWNpLnVwbWMuZnIvY2x1ZWdvL0NsdWVHT0RvY3VtZW50YXRpb24yMDE5LnBkZgoKPC9kaXY+Cgo8YnI+PC9icj4KCgo=