Save Exploit and Plugin/Kernel Loader for Cookie Clicker.
Shortbread utilises an exploit in Game.modSaveData
where mod names are not sanitized. This allows XSS to be run using an <img src=x onerror=[ARBITRARY CODE EXECUTION HERE]>
statement. Shortbread utilises this to allow mod 'kernels' to activate. Pressing on 'Check mod data' in settings activates this exploit.
Run this in your devconsole:
Game.modSaveData['<img src=//0.0.0.0 onerror=eval(atob("dmFyIGRlZmF1bHRLZXJuZWxzID0gWw0KICAgIHsNCiAgICAgICAgbmFtZTogIkNDU0UiLA0KICAgICAgICBhdXRob3I6ICJrbGF0dG1vc2UiLA0KICAgICAgICB2ZXJzaW9uOiAiMi4wMzUra2VybmVsIiwNCiAgICAgICAgZGF0ZTogIjIwLzkvMjMiLA0KICAgICAgICBpZDogImlvLmdpdGh1Yi5rbGF0dG1vc2UuQ0NTRSIsDQogICAgICAgIHNhdmVJZDogIjhiMTZiZjdjIiwgLy8gQ1JDMzINCiAgICAgICAgYXZhaWxhYmxlOiB0cnVlLA0KICAgICAgICByZXM6IHsNCiAgICAgICAgICAgIG1haW46ICJodHRwczovL3JlZGJpZ3ouZ2l0aHViLmlvL1Nob3J0YnJlYWQtTG9hZGVyL2tlcm5lbHMvY2NzZWtlcm4vbWFpbi5qcyINCiAgICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgICBuYW1lOiAiU3RlYW0gV29ya3Nob3AiLA0KICAgICAgICBhdXRob3I6ICJSZWRCaWd6IiwNCiAgICAgICAgdmVyc2lvbjogInYxLjAiLA0KICAgICAgICBkYXRlOiAiNS8xMS8yMyIsDQogICAgICAgIGlkOiAiaW8ucmVkYmlnei53c2tlcm4iLA0KICAgICAgICBzYXZlSWQ6ICJ3ZWJzaG9wLTQwN2EzZDJjIiwNCiAgICAgICAgYXZhaWxhYmxlOiB0cnVlLA0KICAgICAgICByZXM6IHsNCiAgICAgICAgICAgIG1haW46ICJodHRwczovL3JlZGJpZ3ouZ2l0aHViLmlvL1Nob3J0YnJlYWQtTG9hZGVyL2tlcm5lbHMvd3NrZXJuL21haW4uanMiDQogICAgICAgIH0NCiAgICB9LA0KICAgIHsNCiAgICAgICAgbmFtZTogIk1hY2FkYW1pYSIsDQogICAgICAgIGF1dGhvcjogIlJlZEJpZ3oiLA0KICAgICAgICB2ZXJzaW9uOiAiMC4wLjFwcm90byIsDQogICAgICAgIGRhdGU6ICJUQkEiLA0KICAgICAgICBpZDogImlvLnJlZGJpZ3ouTWFjYWRhbWlhIiwNCiAgICAgICAgc2F2ZUlkOiAiMTEwNjdmNjEiLA0KICAgICAgICBhdmFpbGFibGU6IGZhbHNlLA0KICAgICAgICByZXM6IHsNCiAgICAgICAgICAgIG1haW46IG51bGwNCiAgICAgICAgfQ0KICAgIH0sDQpdOw0KDQoNCndpbmRvdy5zYm1fbG9hZEtlcm5lbCA9IChudW0pID0+IHsNCiAgICB2YXIga2VybiA9IGRlZmF1bHRLZXJuZWxzW251bV07DQoJR2FtZS5DbG9zZVByb21wdCgpOw0KCVBsYXlTb3VuZCgnc25kL3RpY2subXAzJyk7DQogICAgR2FtZS5TYXZlVG8gPSBrZXJuLnNhdmVJZDsNCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oR2FtZS5TYXZlVG8pKSB7IH0gZWxzZSB7DQogICAgICAgIEdhbWUuSGFyZFJlc2V0KDIpOw0KICAgICAgICBHYW1lLmNvb2tpZXMgPSAwOw0KICAgICAgICBHYW1lLldyaXRlU2F2ZSgpOw0KICAgIH0NCg0KICAgIEdhbWUuTG9hZFNhdmUoKTsNCg0KICAgIGlmIChrZXJuLnJlcy5tYWluKSB7DQogICAgICAgIEdhbWUuTG9hZE1vZChrZXJuLnJlcy5tYWluLCBudWxsLCAoZXJyKSA9PiB7R2FtZS5Qcm9tcHQoYEFuIGVycm9yIG9jY3VyZWQgd2hpbGUgbG9hZGluZyAke2tlcm4ucmVzLm1haW59Ljxicj48c21hbGw+JHtKU09OLnN0cmluZ2lmeShlcnIpfTwvc21hbGw+YCwgW1siUmVsb2FkIFBhZ2UiLCAibG9jYXRpb249bG9jYXRpb24iXV0pfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBzYm1fa2VybmVsU2VsZWN0KCkgew0KDQoJZnVuY3Rpb24ga2VybmVsQ29udGFpbmVyKGtlcm4sIG51bSkgew0KCQl2YXIgb2MgPSBrZXJuLmF2YWlsYWJsZSA/IGB3aW5kb3cuc2JtX2xvYWRLZXJuZWwoJHtudW19KWAgOiAiIjsNCgkJdmFyIHdhID0ga2Vybi5hdmFpbGFibGUgPyAiIiA6ICIgd2FybmluZyI7DQoNCgkJcmV0dXJuIGANCgkJPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtjbGVhcjpib3RoO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjRweCAwcHg7Ij4NCgkJCTxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7d2lkdGg6NDklO3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzpoaWRkZW47Ij4NCgkJCQk8Yj4ke2tlcm4ubmFtZX08L2I+PGJyPg0KCQkJCSR7a2Vybi5hdXRob3J9PGJyPg0KCQkJCTxzbWFsbD4ke2tlcm4udmVyc2lvbn0gfCAke2tlcm4uZGF0ZX08L3NtYWxsPg0KCQkJPC9kaXY+DQoJCQk8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDt3aWR0aDo0OSU7dGV4dC1hbGlnbjpyaWdodDtvdmVyZmxvdzpoaWRkZW47Ij4NCgkJCQkke2tlcm4uc2F2ZUlkfQ0KCQkJCTxhIGNsYXNzPSJvcHRpb24ke3dhfSIgc3R5bGU9InBhZGRpbmc6MHB4IDJweDtmb250LXNpemU6MTBweDttYXJnaW46MHB4O3ZlcnRpY2FsLWFsaWduOnRvcDsiIG9uY2xpY2s9IiR7b2N9Ij5Mb2FkPC9hPg0KCQkJPC9kaXY+DQoJCTwvZGl2Pg0KCQlgOw0KCX0NCg0KCXZhciBrZXJucyA9ICIiOw0KCWZvciAobnVtIGluIGRlZmF1bHRLZXJuZWxzKSB7DQoJCWtlcm5zICs9IGtlcm5lbENvbnRhaW5lcihkZWZhdWx0S2VybmVsc1tudW1dLCBudW0pOw0KCX0NCg0KCUdhbWUuUHJvbXB0KA0KCQlgDQoJCTxoMz5zaG9ydGJyZWFkPC9oMz48YnI+DQogICAgICAgIDxzbWFsbD5ieSByZWRiaWd6PC9zbWFsbD48YnI+DQoJCSR7a2VybnN9DQoJCTxzbWFsbCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Ij5lYWNoIGtlcm5lbCB1c2VzIGEgZGlmZmVyZW50IHNhdmUgZmlsZS4geW91ciBtYWluIGdhbWUgaXMgbmV2ZXIgdG91Y2hlZCwgb3RoZXIgdGhhbiB0aGUgc2hvcnRicmVhZCBleHBsb2l0J3MgcmVzaWRlbmNlIGluIHlvdXIgc2F2ZS48L3NtYWxsPg0KCQlgLA0KCQlbXQ0KCSk7DQoNCgkvLwk8YSBjbGFzcz0nb3B0aW9uJz5NYWNhZGFtaWEgKHVuYXZhaWxhYmxlKTwvYT48YnI+DQoJLy8JPGEgY2xhc3M9J29wdGlvbicgaWQ9J2tlcm5lbC1jY3NlJz5DQ1NFIChjb21wYXRpYmlsaXR5KTwvYT48YnI+PC9icj4NCg0KCS8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJrZXJuZWwtY2NzZSIpLm9uY2xpY2sgPSAoKSA9PiB7DQoNCgkvLyB9Ow0KfQ0Kc2JtX2tlcm5lbFNlbGVjdCgpOw=="))>']=" ";Game.WriteSave();location=location;
The mod replaces the "check mod data" button with the exploit. To access Shortbread, go to Settings > Check mod data.
Run this in your devconsole:
delete Game.modSaveData['<img src=//0.0.0.0 onerror=eval(atob("dmFyIGRlZmF1bHRLZXJuZWxzID0gWw0KICAgIHsNCiAgICAgICAgbmFtZTogIkNDU0UiLA0KICAgICAgICBhdXRob3I6ICJrbGF0dG1vc2UiLA0KICAgICAgICB2ZXJzaW9uOiAiMi4wMzUra2VybmVsIiwNCiAgICAgICAgZGF0ZTogIjIwLzkvMjMiLA0KICAgICAgICBpZDogImlvLmdpdGh1Yi5rbGF0dG1vc2UuQ0NTRSIsDQogICAgICAgIHNhdmVJZDogIjhiMTZiZjdjIiwgLy8gQ1JDMzINCiAgICAgICAgYXZhaWxhYmxlOiB0cnVlLA0KICAgICAgICByZXM6IHsNCiAgICAgICAgICAgIG1haW46ICJodHRwczovL3JlZGJpZ3ouZ2l0aHViLmlvL1Nob3J0YnJlYWQtTG9hZGVyL2tlcm5lbHMvY2NzZWtlcm4vbWFpbi5qcyINCiAgICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgICBuYW1lOiAiU3RlYW0gV29ya3Nob3AiLA0KICAgICAgICBhdXRob3I6ICJSZWRCaWd6IiwNCiAgICAgICAgdmVyc2lvbjogInYxLjAiLA0KICAgICAgICBkYXRlOiAiNS8xMS8yMyIsDQogICAgICAgIGlkOiAiaW8ucmVkYmlnei53c2tlcm4iLA0KICAgICAgICBzYXZlSWQ6ICJ3ZWJzaG9wLTQwN2EzZDJjIiwNCiAgICAgICAgYXZhaWxhYmxlOiB0cnVlLA0KICAgICAgICByZXM6IHsNCiAgICAgICAgICAgIG1haW46ICJodHRwczovL3JlZGJpZ3ouZ2l0aHViLmlvL1Nob3J0YnJlYWQtTG9hZGVyL2tlcm5lbHMvd3NrZXJuL21haW4uanMiDQogICAgICAgIH0NCiAgICB9LA0KICAgIHsNCiAgICAgICAgbmFtZTogIk1hY2FkYW1pYSIsDQogICAgICAgIGF1dGhvcjogIlJlZEJpZ3oiLA0KICAgICAgICB2ZXJzaW9uOiAiMC4wLjFwcm90byIsDQogICAgICAgIGRhdGU6ICJUQkEiLA0KICAgICAgICBpZDogImlvLnJlZGJpZ3ouTWFjYWRhbWlhIiwNCiAgICAgICAgc2F2ZUlkOiAiMTEwNjdmNjEiLA0KICAgICAgICBhdmFpbGFibGU6IGZhbHNlLA0KICAgICAgICByZXM6IHsNCiAgICAgICAgICAgIG1haW46IG51bGwNCiAgICAgICAgfQ0KICAgIH0sDQpdOw0KDQoNCndpbmRvdy5zYm1fbG9hZEtlcm5lbCA9IChudW0pID0+IHsNCiAgICB2YXIga2VybiA9IGRlZmF1bHRLZXJuZWxzW251bV07DQoJR2FtZS5DbG9zZVByb21wdCgpOw0KCVBsYXlTb3VuZCgnc25kL3RpY2subXAzJyk7DQogICAgR2FtZS5TYXZlVG8gPSBrZXJuLnNhdmVJZDsNCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oR2FtZS5TYXZlVG8pKSB7IH0gZWxzZSB7DQogICAgICAgIEdhbWUuSGFyZFJlc2V0KDIpOw0KICAgICAgICBHYW1lLmNvb2tpZXMgPSAwOw0KICAgICAgICBHYW1lLldyaXRlU2F2ZSgpOw0KICAgIH0NCg0KICAgIEdhbWUuTG9hZFNhdmUoKTsNCg0KICAgIGlmIChrZXJuLnJlcy5tYWluKSB7DQogICAgICAgIEdhbWUuTG9hZE1vZChrZXJuLnJlcy5tYWluLCBudWxsLCAoZXJyKSA9PiB7R2FtZS5Qcm9tcHQoYEFuIGVycm9yIG9jY3VyZWQgd2hpbGUgbG9hZGluZyAke2tlcm4ucmVzLm1haW59Ljxicj48c21hbGw+JHtKU09OLnN0cmluZ2lmeShlcnIpfTwvc21hbGw+YCwgW1siUmVsb2FkIFBhZ2UiLCAibG9jYXRpb249bG9jYXRpb24iXV0pfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBzYm1fa2VybmVsU2VsZWN0KCkgew0KDQoJZnVuY3Rpb24ga2VybmVsQ29udGFpbmVyKGtlcm4sIG51bSkgew0KCQl2YXIgb2MgPSBrZXJuLmF2YWlsYWJsZSA/IGB3aW5kb3cuc2JtX2xvYWRLZXJuZWwoJHtudW19KWAgOiAiIjsNCgkJdmFyIHdhID0ga2Vybi5hdmFpbGFibGUgPyAiIiA6ICIgd2FybmluZyI7DQoNCgkJcmV0dXJuIGANCgkJPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtjbGVhcjpib3RoO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjRweCAwcHg7Ij4NCgkJCTxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7d2lkdGg6NDklO3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzpoaWRkZW47Ij4NCgkJCQk8Yj4ke2tlcm4ubmFtZX08L2I+PGJyPg0KCQkJCSR7a2Vybi5hdXRob3J9PGJyPg0KCQkJCTxzbWFsbD4ke2tlcm4udmVyc2lvbn0gfCAke2tlcm4uZGF0ZX08L3NtYWxsPg0KCQkJPC9kaXY+DQoJCQk8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDt3aWR0aDo0OSU7dGV4dC1hbGlnbjpyaWdodDtvdmVyZmxvdzpoaWRkZW47Ij4NCgkJCQkke2tlcm4uc2F2ZUlkfQ0KCQkJCTxhIGNsYXNzPSJvcHRpb24ke3dhfSIgc3R5bGU9InBhZGRpbmc6MHB4IDJweDtmb250LXNpemU6MTBweDttYXJnaW46MHB4O3ZlcnRpY2FsLWFsaWduOnRvcDsiIG9uY2xpY2s9IiR7b2N9Ij5Mb2FkPC9hPg0KCQkJPC9kaXY+DQoJCTwvZGl2Pg0KCQlgOw0KCX0NCg0KCXZhciBrZXJucyA9ICIiOw0KCWZvciAobnVtIGluIGRlZmF1bHRLZXJuZWxzKSB7DQoJCWtlcm5zICs9IGtlcm5lbENvbnRhaW5lcihkZWZhdWx0S2VybmVsc1tudW1dLCBudW0pOw0KCX0NCg0KCUdhbWUuUHJvbXB0KA0KCQlgDQoJCTxoMz5zaG9ydGJyZWFkPC9oMz48YnI+DQogICAgICAgIDxzbWFsbD5ieSByZWRiaWd6PC9zbWFsbD48YnI+DQoJCSR7a2VybnN9DQoJCTxzbWFsbCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Ij5lYWNoIGtlcm5lbCB1c2VzIGEgZGlmZmVyZW50IHNhdmUgZmlsZS4geW91ciBtYWluIGdhbWUgaXMgbmV2ZXIgdG91Y2hlZCwgb3RoZXIgdGhhbiB0aGUgc2hvcnRicmVhZCBleHBsb2l0J3MgcmVzaWRlbmNlIGluIHlvdXIgc2F2ZS48L3NtYWxsPg0KCQlgLA0KCQlbXQ0KCSk7DQoNCgkvLwk8YSBjbGFzcz0nb3B0aW9uJz5NYWNhZGFtaWEgKHVuYXZhaWxhYmxlKTwvYT48YnI+DQoJLy8JPGEgY2xhc3M9J29wdGlvbicgaWQ9J2tlcm5lbC1jY3NlJz5DQ1NFIChjb21wYXRpYmlsaXR5KTwvYT48YnI+PC9icj4NCg0KCS8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJrZXJuZWwtY2NzZSIpLm9uY2xpY2sgPSAoKSA9PiB7DQoNCgkvLyB9Ow0KfQ0Kc2JtX2tlcm5lbFNlbGVjdCgpOw=="))>'];Game.WriteSave();location=location;
DISCLAIMER: Make sure you run this in your main save, the code will not uninstall unless you do so.
Just put this into a bookmark URL:
eval(atob("dmFyIGRlZmF1bHRLZXJuZWxzID0gWw0KICAgIHsNCiAgICAgICAgbmFtZTogIkNDU0UiLA0KICAgICAgICBhdXRob3I6ICJrbGF0dG1vc2UiLA0KICAgICAgICB2ZXJzaW9uOiAiMi4wMzUra2VybmVsIiwNCiAgICAgICAgZGF0ZTogIjIwLzkvMjMiLA0KICAgICAgICBpZDogImlvLmdpdGh1Yi5rbGF0dG1vc2UuQ0NTRSIsDQogICAgICAgIHNhdmVJZDogIjhiMTZiZjdjIiwgLy8gQ1JDMzINCiAgICAgICAgYXZhaWxhYmxlOiB0cnVlLA0KICAgICAgICByZXM6IHsNCiAgICAgICAgICAgIG1haW46ICJodHRwczovL3JlZGJpZ3ouZ2l0aHViLmlvL1Nob3J0YnJlYWQtTG9hZGVyL2tlcm5lbHMvY2NzZWtlcm4vbWFpbi5qcyINCiAgICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgICBuYW1lOiAiU3RlYW0gV29ya3Nob3AiLA0KICAgICAgICBhdXRob3I6ICJSZWRCaWd6IiwNCiAgICAgICAgdmVyc2lvbjogInYxLjAiLA0KICAgICAgICBkYXRlOiAiNS8xMS8yMyIsDQogICAgICAgIGlkOiAiaW8ucmVkYmlnei53c2tlcm4iLA0KICAgICAgICBzYXZlSWQ6ICJ3ZWJzaG9wLTQwN2EzZDJjIiwNCiAgICAgICAgYXZhaWxhYmxlOiB0cnVlLA0KICAgICAgICByZXM6IHsNCiAgICAgICAgICAgIG1haW46ICJodHRwczovL3JlZGJpZ3ouZ2l0aHViLmlvL1Nob3J0YnJlYWQtTG9hZGVyL2tlcm5lbHMvd3NrZXJuL21haW4uanMiDQogICAgICAgIH0NCiAgICB9LA0KICAgIHsNCiAgICAgICAgbmFtZTogIk1hY2FkYW1pYSIsDQogICAgICAgIGF1dGhvcjogIlJlZEJpZ3oiLA0KICAgICAgICB2ZXJzaW9uOiAiMC4wLjFwcm90byIsDQogICAgICAgIGRhdGU6ICJUQkEiLA0KICAgICAgICBpZDogImlvLnJlZGJpZ3ouTWFjYWRhbWlhIiwNCiAgICAgICAgc2F2ZUlkOiAiMTEwNjdmNjEiLA0KICAgICAgICBhdmFpbGFibGU6IGZhbHNlLA0KICAgICAgICByZXM6IHsNCiAgICAgICAgICAgIG1haW46IG51bGwNCiAgICAgICAgfQ0KICAgIH0sDQpdOw0KDQoNCndpbmRvdy5zYm1fbG9hZEtlcm5lbCA9IChudW0pID0+IHsNCiAgICB2YXIga2VybiA9IGRlZmF1bHRLZXJuZWxzW251bV07DQoJR2FtZS5DbG9zZVByb21wdCgpOw0KCVBsYXlTb3VuZCgnc25kL3RpY2subXAzJyk7DQogICAgR2FtZS5TYXZlVG8gPSBrZXJuLnNhdmVJZDsNCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oR2FtZS5TYXZlVG8pKSB7IH0gZWxzZSB7DQogICAgICAgIEdhbWUuSGFyZFJlc2V0KDIpOw0KICAgICAgICBHYW1lLmNvb2tpZXMgPSAwOw0KICAgICAgICBHYW1lLldyaXRlU2F2ZSgpOw0KICAgIH0NCg0KICAgIEdhbWUuTG9hZFNhdmUoKTsNCg0KICAgIGlmIChrZXJuLnJlcy5tYWluKSB7DQogICAgICAgIEdhbWUuTG9hZE1vZChrZXJuLnJlcy5tYWluLCBudWxsLCAoZXJyKSA9PiB7R2FtZS5Qcm9tcHQoYEFuIGVycm9yIG9jY3VyZWQgd2hpbGUgbG9hZGluZyAke2tlcm4ucmVzLm1haW59Ljxicj48c21hbGw+JHtKU09OLnN0cmluZ2lmeShlcnIpfTwvc21hbGw+YCwgW1siUmVsb2FkIFBhZ2UiLCAibG9jYXRpb249bG9jYXRpb24iXV0pfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBzYm1fa2VybmVsU2VsZWN0KCkgew0KDQoJZnVuY3Rpb24ga2VybmVsQ29udGFpbmVyKGtlcm4sIG51bSkgew0KCQl2YXIgb2MgPSBrZXJuLmF2YWlsYWJsZSA/IGB3aW5kb3cuc2JtX2xvYWRLZXJuZWwoJHtudW19KWAgOiAiIjsNCgkJdmFyIHdhID0ga2Vybi5hdmFpbGFibGUgPyAiIiA6ICIgd2FybmluZyI7DQoNCgkJcmV0dXJuIGANCgkJPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtjbGVhcjpib3RoO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjRweCAwcHg7Ij4NCgkJCTxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7d2lkdGg6NDklO3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzpoaWRkZW47Ij4NCgkJCQk8Yj4ke2tlcm4ubmFtZX08L2I+PGJyPg0KCQkJCSR7a2Vybi5hdXRob3J9PGJyPg0KCQkJCTxzbWFsbD4ke2tlcm4udmVyc2lvbn0gfCAke2tlcm4uZGF0ZX08L3NtYWxsPg0KCQkJPC9kaXY+DQoJCQk8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDt3aWR0aDo0OSU7dGV4dC1hbGlnbjpyaWdodDtvdmVyZmxvdzpoaWRkZW47Ij4NCgkJCQkke2tlcm4uc2F2ZUlkfQ0KCQkJCTxhIGNsYXNzPSJvcHRpb24ke3dhfSIgc3R5bGU9InBhZGRpbmc6MHB4IDJweDtmb250LXNpemU6MTBweDttYXJnaW46MHB4O3ZlcnRpY2FsLWFsaWduOnRvcDsiIG9uY2xpY2s9IiR7b2N9Ij5Mb2FkPC9hPg0KCQkJPC9kaXY+DQoJCTwvZGl2Pg0KCQlgOw0KCX0NCg0KCXZhciBrZXJucyA9ICIiOw0KCWZvciAobnVtIGluIGRlZmF1bHRLZXJuZWxzKSB7DQoJCWtlcm5zICs9IGtlcm5lbENvbnRhaW5lcihkZWZhdWx0S2VybmVsc1tudW1dLCBudW0pOw0KCX0NCg0KCUdhbWUuUHJvbXB0KA0KCQlgDQoJCTxoMz5zaG9ydGJyZWFkPC9oMz48YnI+DQogICAgICAgIDxzbWFsbD5ieSByZWRiaWd6PC9zbWFsbD48YnI+DQoJCSR7a2VybnN9DQoJCTxzbWFsbCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Ij5lYWNoIGtlcm5lbCB1c2VzIGEgZGlmZmVyZW50IHNhdmUgZmlsZS4geW91ciBtYWluIGdhbWUgaXMgbmV2ZXIgdG91Y2hlZCwgb3RoZXIgdGhhbiB0aGUgc2hvcnRicmVhZCBleHBsb2l0J3MgcmVzaWRlbmNlIGluIHlvdXIgc2F2ZS48L3NtYWxsPg0KCQlgLA0KCQlbXQ0KCSk7DQoNCgkvLwk8YSBjbGFzcz0nb3B0aW9uJz5NYWNhZGFtaWEgKHVuYXZhaWxhYmxlKTwvYT48YnI+DQoJLy8JPGEgY2xhc3M9J29wdGlvbicgaWQ9J2tlcm5lbC1jY3NlJz5DQ1NFIChjb21wYXRpYmlsaXR5KTwvYT48YnI+PC9icj4NCg0KCS8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJrZXJuZWwtY2NzZSIpLm9uY2xpY2sgPSAoKSA9PiB7DQoNCgkvLyB9Ow0KfQ0Kc2JtX2tlcm5lbFNlbGVjdCgpOw=="))