Apply structured JavaScript segment rewrite #1
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Apply structured JavaScript segment rewrite | ||
|
Check failure on line 1 in .github/workflows/apply-structured-javascript-segments.yml
|
||
| on: | ||
| push: | ||
| branches: | ||
| - security/structured-javascript-segments | ||
| permissions: | ||
| contents: write | ||
| jobs: | ||
| apply: | ||
| if: github.actor != 'github-actions[bot]' | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| with: | ||
| ref: security/structured-javascript-segments | ||
| fetch-depth: 0 | ||
| - name: Write implementation | ||
| env: | ||
| FILE_0_PATH: AdvancedCore/src/main/java/com/bencodez/advancedcore/api/javascript/JavascriptTextTemplate.java | ||
| FILE_0_DATA: cGFja2FnZSBjb20uYmVuY29kZXouYWR2YW5jZWRjb3JlLmFwaS5qYXZhc2NyaXB0OwoKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5GdW5jdGlvbjsKCi8qKgogKiBTcGxpdHMgY29uZmlndXJlZCB0ZXh0IGludG8gbGl0ZXJhbCB0ZXh0IGFuZCBKYXZhU2NyaXB0IHNlZ21lbnRzIGJlZm9yZSBhbnkKICogcGxhY2Vob2xkZXIgcmVwbGFjZW1lbnQgb2NjdXJzLgogKiA8cD4KICogT25seSB7QGNvZGUgW0phdmFzY3JpcHQ9Li4uXX0gbWFya2VycyBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCBpbnB1dCBiZWNvbWUKICogZXhlY3V0YWJsZSBzZWdtZW50cy4gTWFya2VyLWxvb2tpbmcgdGV4dCBwcm9kdWNlZCBsYXRlciBieSBhIHBsYWNlaG9sZGVyIG9yCiAqIEphdmFTY3JpcHQgcmVzdWx0IGlzIG5ldXRyYWxpemVkIGFuZCByZW1haW5zIG9yZGluYXJ5IHRleHQuCiAqLwpwdWJsaWMgZmluYWwgY2xhc3MgSmF2YXNjcmlwdFRleHRUZW1wbGF0ZSB7CiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFSS0VSID0gIltKYXZhc2NyaXB0PSI7CgogICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFNlZ21lbnQ+IHNlZ21lbnRzOwoKICAgIHByaXZhdGUgSmF2YXNjcmlwdFRleHRUZW1wbGF0ZShMaXN0PFNlZ21lbnQ+IHNlZ21lbnRzKSB7CiAgICAgICAgdGhpcy5zZWdtZW50cyA9IHNlZ21lbnRzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgSmF2YXNjcmlwdFRleHRUZW1wbGF0ZSBwYXJzZShTdHJpbmcgc291cmNlKSB7CiAgICAgICAgTGlzdDxTZWdtZW50PiBzZWdtZW50cyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCB8fCBzb3VyY2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHNlZ21lbnRzLmFkZChTZWdtZW50LnRleHQoc291cmNlKSk7CiAgICAgICAgICAgIHJldHVybiBuZXcgSmF2YXNjcmlwdFRleHRUZW1wbGF0ZShzZWdtZW50cyk7CiAgICAgICAgfQoKICAgICAgICBpbnQgY3Vyc29yID0gMDsKICAgICAgICB3aGlsZSAoY3Vyc29yIDwgc291cmNlLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIGludCBzdGFydCA9IGluZGV4T2ZJZ25vcmVDYXNlKHNvdXJjZSwgTUFSS0VSLCBjdXJzb3IpOwogICAgICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CiAgICAgICAgICAgICAgICBzZWdtZW50cy5hZGQoU2VnbWVudC50ZXh0KHNvdXJjZS5zdWJzdHJpbmcoY3Vyc29yKSkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChzdGFydCA+IGN1cnNvcikgewogICAgICAgICAgICAgICAgc2VnbWVudHMuYWRkKFNlZ21lbnQudGV4dChzb3VyY2Uuc3Vic3RyaW5nKGN1cnNvciwgc3RhcnQpKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGludCBib2R5U3RhcnQgPSBzdGFydCArIE1BUktFUi5sZW5ndGgoKTsKICAgICAgICAgICAgaW50IGVuZCA9IHNvdXJjZS5pbmRleE9mKCddJywgYm9keVN0YXJ0KTsKICAgICAgICAgICAgaWYgKGVuZCA8IDApIHsKICAgICAgICAgICAgICAgIHNlZ21lbnRzLmFkZChTZWdtZW50LnRleHQoc291cmNlLnN1YnN0cmluZyhzdGFydCkpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzZWdtZW50cy5hZGQoU2VnbWVudC5qYXZhc2NyaXB0KHNvdXJjZS5zdWJzdHJpbmcoc3RhcnQsIGJvZHlTdGFydCksCiAgICAgICAgICAgICAgICAgICAgc291cmNlLnN1YnN0cmluZyhib2R5U3RhcnQsIGVuZCkpKTsKICAgICAgICAgICAgY3Vyc29yID0gZW5kICsgMTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWdtZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgc2VnbWVudHMuYWRkKFNlZ21lbnQudGV4dChzb3VyY2UpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBKYXZhc2NyaXB0VGV4dFRlbXBsYXRlKHNlZ21lbnRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRyYW5zZm9ybXMgbGl0ZXJhbCBhbmQgSmF2YVNjcmlwdCBjb250ZW50IHdoaWxlIHByZXNlcnZpbmcgYXV0aG9yZWQgbWFya2VyCiAgICAgKiBib3VuZGFyaWVzLgogICAgICovCiAgICBwdWJsaWMgU3RyaW5nIHRyYW5zZm9ybShGdW5jdGlvbjxTdHJpbmcsIFN0cmluZz4gdGV4dFRyYW5zZm9ybWVyLAogICAgICAgICAgICBGdW5jdGlvbjxTdHJpbmcsIFN0cmluZz4gamF2YXNjcmlwdFRyYW5zZm9ybWVyKSB7CiAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgIGZvciAoU2VnbWVudCBzZWdtZW50IDogc2VnbWVudHMpIHsKICAgICAgICAgICAgaWYgKHNlZ21lbnQuamF2YXNjcmlwdCkgewogICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzZWdtZW50Lm1hcmtlclByZWZpeCkKICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChhcHBseShqYXZhc2NyaXB0VHJhbnNmb3JtZXIsIHNlZ21lbnQudmFsdWUpKQogICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCddJyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5ldXRyYWxpemVHZW5lcmF0ZWRNYXJrZXJzKGFwcGx5KHRleHRUcmFuc2Zvcm1lciwgc2VnbWVudC52YWx1ZSkpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFdmFsdWF0ZXMgYXV0aG9yZWQgSmF2YVNjcmlwdCBzZWdtZW50cyBhbmQgcmV0dXJucyBwbGFpbiB0ZXh0LiBBbnkgbWFya2VyCiAgICAgKiBwcm9kdWNlZCBieSB0cmFuc2Zvcm1lZCB0ZXh0IG9yIGEgc2NyaXB0IHJlc3VsdCBpcyBuZXV0cmFsaXplZCBzbyBhIHNlY29uZAogICAgICogcHJvY2Vzc2luZyBwYXNzIGNhbm5vdCBleGVjdXRlIGl0LgogICAgICovCiAgICBwdWJsaWMgU3RyaW5nIGV2YWx1YXRlKEZ1bmN0aW9uPFN0cmluZywgU3RyaW5nPiB0ZXh0VHJhbnNmb3JtZXIsCiAgICAgICAgICAgIEZ1bmN0aW9uPFN0cmluZywgU3RyaW5nPiBqYXZhc2NyaXB0RXZhbHVhdG9yKSB7CiAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgIGZvciAoU2VnbWVudCBzZWdtZW50IDogc2VnbWVudHMpIHsKICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gc2VnbWVudC5qYXZhc2NyaXB0CiAgICAgICAgICAgICAgICAgICAgPyBhcHBseShqYXZhc2NyaXB0RXZhbHVhdG9yLCBzZWdtZW50LnZhbHVlKQogICAgICAgICAgICAgICAgICAgIDogYXBwbHkodGV4dFRyYW5zZm9ybWVyLCBzZWdtZW50LnZhbHVlKTsKICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXV0cmFsaXplR2VuZXJhdGVkTWFya2VycyhyZXN1bHQudG9TdHJpbmcoKSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgbmV1dHJhbGl6ZUdlbmVyYXRlZE1hcmtlcnMoU3RyaW5nIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSBudWxsIHx8IHRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHJldHVybiB0ZXh0OwogICAgICAgIH0KCiAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcih0ZXh0Lmxlbmd0aCgpKTsKICAgICAgICBpbnQgY3Vyc29yID0gMDsKICAgICAgICB3aGlsZSAoY3Vyc29yIDwgdGV4dC5sZW5ndGgoKSkgewogICAgICAgICAgICBpbnQgc3RhcnQgPSBpbmRleE9mSWdub3JlQ2FzZSh0ZXh0LCBNQVJLRVIsIGN1cnNvcik7CiAgICAgICAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGV4dCwgY3Vyc29yLCB0ZXh0Lmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGV4dCwgY3Vyc29yLCBzdGFydCArIE1BUktFUi5sZW5ndGgoKSAtIDEpLmFwcGVuZCgiID0iKTsKICAgICAgICAgICAgY3Vyc29yID0gc3RhcnQgKyBNQVJLRVIubGVuZ3RoKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwbHkoRnVuY3Rpb248U3RyaW5nLCBTdHJpbmc+IHRyYW5zZm9ybWVyLCBTdHJpbmcgdmFsdWUpIHsKICAgICAgICBTdHJpbmcgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1lciA9PSBudWxsID8gdmFsdWUgOiB0cmFuc2Zvcm1lci5hcHBseSh2YWx1ZSk7CiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkID09IG51bGwgPyAiIiA6IHRyYW5zZm9ybWVkOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGludCBpbmRleE9mSWdub3JlQ2FzZShTdHJpbmcgdGV4dCwgU3RyaW5nIHRhcmdldCwgaW50IGZyb21JbmRleCkgewogICAgICAgIGludCBtYXggPSB0ZXh0Lmxlbmd0aCgpIC0gdGFyZ2V0Lmxlbmd0aCgpOwogICAgICAgIGZvciAoaW50IGkgPSBNYXRoLm1heCgwLCBmcm9tSW5kZXgpOyBpIDw9IG1heDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0ZXh0LnJlZ2lvbk1hdGNoZXModHJ1ZSwgaSwgdGFyZ2V0LCAwLCB0YXJnZXQubGVuZ3RoKCkpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgU2VnbWVudCB7CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGphdmFzY3JpcHQ7CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWFya2VyUHJlZml4OwogICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHZhbHVlOwoKICAgICAgICBwcml2YXRlIFNlZ21lbnQoYm9vbGVhbiBqYXZhc2NyaXB0LCBTdHJpbmcgbWFya2VyUHJlZml4LCBTdHJpbmcgdmFsdWUpIHsKICAgICAgICAgICAgdGhpcy5qYXZhc2NyaXB0ID0gamF2YXNjcmlwdDsKICAgICAgICAgICAgdGhpcy5tYXJrZXJQcmVmaXggPSBtYXJrZXJQcmVmaXg7CiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICAgICB9CgogICAgICAgIHByaXZhdGUgc3RhdGljIFNlZ21lbnQgdGV4dChTdHJpbmcgdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBTZWdtZW50KGZhbHNlLCBudWxsLCB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIHN0YXRpYyBTZWdtZW50IGphdmFzY3JpcHQoU3RyaW5nIG1hcmtlclByZWZpeCwgU3RyaW5nIHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgU2VnbWVudCh0cnVlLCBtYXJrZXJQcmVmaXgsIHZhbHVlKTsKICAgICAgICB9CiAgICB9Cn0K | ||
| FILE_1_PATH: AdvancedCore/src/main/java/com/bencodez/advancedcore/api/javascript/JavascriptPlaceholderValue.java | ||
| FILE_1_DATA: cGFja2FnZSBjb20uYmVuY29kZXouYWR2YW5jZWRjb3JlLmFwaS5qYXZhc2NyaXB0OwoKaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKaW1wb3J0IGphdmEudXRpbC5CYXNlNjQ7CgovKioKICogQ2FycmllcyBjdXN0b20gcGxhY2Vob2xkZXIgb3V0cHV0IHRocm91Z2ggYW4gYXV0aG9yZWQgSmF2YVNjcmlwdCBzZWdtZW50IGFzCiAqIGluZXJ0IGRhdGEgdW50aWwgdGhlIEphdmFTY3JpcHQgYmluZGVyIGNhbiBiaW5kIG9yIGVzY2FwZSBpdCBzYWZlbHkuCiAqLwpwdWJsaWMgZmluYWwgY2xhc3MgSmF2YXNjcmlwdFBsYWNlaG9sZGVyVmFsdWUgewogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZJWCA9ICIlX19hZHZhbmNlZGNvcmVfYm91bmRfIjsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVUZGSVggPSAiJSI7CgogICAgcHJpdmF0ZSBKYXZhc2NyaXB0UGxhY2Vob2xkZXJWYWx1ZSgpIHsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlbmNvZGUoU3RyaW5nIHZhbHVlKSB7CiAgICAgICAgU3RyaW5nIHNhZmVWYWx1ZSA9IHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlOwogICAgICAgIFN0cmluZyBlbmNvZGVkID0gQmFzZTY0LmdldFVybEVuY29kZXIoKS53aXRob3V0UGFkZGluZygpCiAgICAgICAgICAgICAgICAuZW5jb2RlVG9TdHJpbmcoc2FmZVZhbHVlLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpKTsKICAgICAgICByZXR1cm4gUFJFRklYICsgZW5jb2RlZCArIFNVRkZJWDsKICAgIH0KCiAgICBzdGF0aWMgU3RyaW5nIGRlY29kZShTdHJpbmcgdG9rZW4pIHsKICAgICAgICBpZiAodG9rZW4gPT0gbnVsbCB8fCAhdG9rZW4uc3RhcnRzV2l0aChQUkVGSVgpIHx8ICF0b2tlbi5lbmRzV2l0aChTVUZGSVgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBTdHJpbmcgZW5jb2RlZCA9IHRva2VuLnN1YnN0cmluZyhQUkVGSVgubGVuZ3RoKCksIHRva2VuLmxlbmd0aCgpIC0gU1VGRklYLmxlbmd0aCgpKTsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhCYXNlNjQuZ2V0VXJsRGVjb2RlcigpLmRlY29kZShlbmNvZGVkKSwgU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCk7CiAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlnbm9yZWQpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfQp9Cg== | ||
| FILE_2_PATH: AdvancedCore/src/main/java/com/bencodez/advancedcore/api/javascript/JavascriptPlaceholderBinder.java | ||
| FILE_2_DATA: cGFja2FnZSBjb20uYmVuY29kZXouYWR2YW5jZWRjb3JlLmFwaS5qYXZhc2NyaXB0OwoKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLk1hcDsKaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CmltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uQmlDb25zdW1lcjsKaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5GdW5jdGlvbjsKaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwppbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CgppbXBvcnQgb3JnLmJ1a2tpdC5PZmZsaW5lUGxheWVyOwppbXBvcnQgb3JnLm1vemlsbGEuamF2YXNjcmlwdC5Db21waWxlckVudmlyb25zOwppbXBvcnQgb3JnLm1vemlsbGEuamF2YXNjcmlwdC5Db250ZXh0OwppbXBvcnQgb3JnLm1vemlsbGEuamF2YXNjcmlwdC5QYXJzZXI7CmltcG9ydCBvcmcubW96aWxsYS5qYXZhc2NyaXB0LmFzdC5Bc3ROb2RlOwppbXBvcnQgb3JnLm1vemlsbGEuamF2YXNjcmlwdC5hc3QuQXN0Um9vdDsKaW1wb3J0IG9yZy5tb3ppbGxhLmphdmFzY3JpcHQuYXN0LkNvbW1lbnQ7CmltcG9ydCBvcmcubW96aWxsYS5qYXZhc2NyaXB0LmFzdC5SZWdFeHBMaXRlcmFsOwppbXBvcnQgb3JnLm1vemlsbGEuamF2YXNjcmlwdC5hc3QuU3RyaW5nTGl0ZXJhbDsKaW1wb3J0IG9yZy5tb3ppbGxhLmphdmFzY3JpcHQuYXN0LlRlbXBsYXRlQ2hhcmFjdGVyczsKCmltcG9ydCBjb20uYmVuY29kZXouYWR2YW5jZWRjb3JlLkFkdmFuY2VkQ29yZVBsdWdpbjsKCmltcG9ydCBtZS5jbGlwLnBsYWNlaG9sZGVyYXBpLlBsYWNlaG9sZGVyQVBJOwoKLyoqCiAqIFJlc29sdmVzIHBsYWNlaG9sZGVycyBpbnNpZGUgYSBrbm93biwgb3BlcmF0b3ItYXV0aG9yZWQgSmF2YVNjcmlwdCBzZWdtZW50LgogKiBEeW5hbWljIHZhbHVlcyBpbiBleGVjdXRhYmxlIGV4cHJlc3Npb24gY29udGV4dCBhcmUgZW5naW5lIGJpbmRpbmdzOyB2YWx1ZXMKICogaW5zaWRlIGV4aXN0aW5nIGxpdGVyYWxzIGFyZSBlc2NhcGVkIGZvciB0aGF0IGxpdGVyYWwuIFJoaW5vIHN1cHBsaWVzIHRoZSBBU1QKICogY2xhc3NpZmljYXRpb24sIHNvIEFkdmFuY2VkQ29yZSBkb2VzIG5vdCBtYWludGFpbiBhIEphdmFTY3JpcHQgbGV4ZXIuCiAqLwpwdWJsaWMgZmluYWwgY2xhc3MgSmF2YXNjcmlwdFBsYWNlaG9sZGVyQmluZGVyIHsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gUExBQ0VIT0xERVIgPSBQYXR0ZXJuLmNvbXBpbGUoIiUoW14lXFxcXHNdKyklfCg/PCFcXCQpXFxfKFtee30lXFxcXHNdKylcXF0iKTsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gSU5URUdFUiA9IFBhdHRlcm4uY29tcGlsZSgiWy0rXT9cXGQrIik7CiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIERFQ0lNQUwgPSBQYXR0ZXJuCiAgICAgICAgICAgIC5jb21waWxlKCJbLStdPyg/OlxcZCtcXC5cXGQqfFxcZCpcXC5cXGQrfFxcZCspKD86W2VFXVstK10/XFxkKyk/Iik7CiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFSSUFCTEVfUFJFRklYID0gIl9fYWR2YW5jZWRDb3JlUGxhY2Vob2xkZXIiOwoKICAgIHByaXZhdGUgSmF2YXNjcmlwdFBsYWNlaG9sZGVyQmluZGVyKCkgewogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJpbmQoU3RyaW5nIGV4cHJlc3Npb24sIE9mZmxpbmVQbGF5ZXIgcGxheWVyLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBsYWNlaG9sZGVycywKICAgICAgICAgICAgSmF2YXNjcmlwdEVuZ2luZSBlbmdpbmUpIHsKICAgICAgICByZXR1cm4gYmluZChleHByZXNzaW9uLCB0b2tlbiAtPiByZXNvbHZlKHRva2VuLCBwbGF5ZXIsIHBsYWNlaG9sZGVycyksCiAgICAgICAgICAgICAgICB2YWx1ZSAtPiByZXNvbHZlUGFwaVZhbHVlKHZhbHVlLCBwbGF5ZXIpLCBlbmdpbmU6OmFkZFRvRW5naW5lKTsKICAgIH0KCiAgICBzdGF0aWMgU3RyaW5nIGJpbmQoU3RyaW5nIGV4cHJlc3Npb24sIEZ1bmN0aW9uPFN0cmluZywgU3RyaW5nPiByZXNvbHZlciwgQmlDb25zdW1lcjxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3MpIHsKICAgICAgICByZXR1cm4gYmluZChleHByZXNzaW9uLCByZXNvbHZlciwgRnVuY3Rpb24uaWRlbnRpdHkoKSwgYmluZGluZ3MpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBiaW5kKFN0cmluZyBleHByZXNzaW9uLCBGdW5jdGlvbjxTdHJpbmcsIFN0cmluZz4gcmVzb2x2ZXIsCiAgICAgICAgICAgIEZ1bmN0aW9uPFN0cmluZywgU3RyaW5nPiBkZWNvZGVkUmVzb2x2ZXIsIEJpQ29uc3VtZXI8U3RyaW5nLCBPYmplY3Q+IGJpbmRpbmdzKSB7CiAgICAgICAgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCB8fCBleHByZXNzaW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbjsKICAgICAgICB9CgogICAgICAgIE1hdGNoZXIgbWF0Y2hlciA9IFBMQUNFSE9MREVSLm1hdGNoZXIoZXhwcmVzc2lvbik7CiAgICAgICAgTGlzdDxQbGFjZWhvbGRlck1hdGNoPiBtYXRjaGVzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgU3RyaW5nQnVpbGRlciBzYW5pdGl6ZWQgPSBuZXcgU3RyaW5nQnVpbGRlcihleHByZXNzaW9uKTsKICAgICAgICB3aGlsZSAobWF0Y2hlci5maW5kKCkpIHsKICAgICAgICAgICAgU3RyaW5nIHRva2VuID0gbWF0Y2hlci5ncm91cCgpOwogICAgICAgICAgICBTdHJpbmcgZGVjb2RlZCA9IEphdmFzY3JpcHRQbGFjZWhvbGRlclZhbHVlLmRlY29kZSh0b2tlbik7CiAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGRlY29kZWQgPT0gbnVsbCA/IHJlc29sdmVyLmFwcGx5KHRva2VuKSA6IGRlY29kZWRSZXNvbHZlci5hcHBseShkZWNvZGVkKTsKICAgICAgICAgICAgbWF0Y2hlcy5hZGQobmV3IFBsYWNlaG9sZGVyTWF0Y2gobWF0Y2hlci5zdGFydCgpLCBtYXRjaGVyLmVuZCgpLCB0b2tlbiwgdmFsdWUpKTsKCiAgICAgICAgICAgIGJvb2xlYW4gYnJhY2VQbGFjZWhvbGRlciA9IHRva2VuLmNoYXJBdCgwKSA9PSAneyc7CiAgICAgICAgICAgIGlmICghYnJhY2VQbGFjZWhvbGRlciB8fCAodmFsdWUgIT0gbnVsbCAmJiAhdmFsdWUuZXF1YWxzKHRva2VuKSkpIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtYXRjaGVyLnN0YXJ0KCk7IGkgPCBtYXRjaGVyLmVuZCgpOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBzYW5pdGl6ZWQuc2V0Q2hhckF0KGksICdwJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG1hdGNoZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHJldHVybiBleHByZXNzaW9uOwogICAgICAgIH0KCiAgICAgICAgSmF2YXNjcmlwdENvbnRleHRzIGNvbnRleHRzID0gSmF2YXNjcmlwdENvbnRleHRzLnBhcnNlKHNhbml0aXplZC50b1N0cmluZygpKTsKICAgICAgICBTdHJpbmdbXSByZXBsYWNlbWVudHMgPSBuZXcgU3RyaW5nW21hdGNoZXMuc2l6ZSgpXTsKICAgICAgICBpbnQgYmluZGluZ0luZGV4ID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hdGNoZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgUGxhY2Vob2xkZXJNYXRjaCBtYXRjaCA9IG1hdGNoZXMuZ2V0KGkpOwogICAgICAgICAgICBpZiAoY29udGV4dHMuY29udGFpbmluZyhjb250ZXh0cy5jb21tZW50cywgbWF0Y2guc3RhcnQpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50c1tpXSA9IG1hdGNoLnRva2VuOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG1hdGNoLnZhbHVlID09IG51bGwgfHwgbWF0Y2gudmFsdWUuZXF1YWxzKG1hdGNoLnRva2VuKSkgewogICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0gbWF0Y2gudG9rZW47CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgUmFuZ2UgcmVnZXggPSBjb250ZXh0cy5jb250YWluaW5nKGNvbnRleHRzLnJlZ2V4ZXMsIG1hdGNoLnN0YXJ0KTsKICAgICAgICAgICAgTGl0ZXJhbFJhbmdlIHN0cmluZyA9IGNvbnRleHRzLmNvbnRhaW5pbmdMaXRlcmFsKG1hdGNoLnN0YXJ0KTsKICAgICAgICAgICAgUmFuZ2UgdGVtcGxhdGVUZXh0ID0gY29udGV4dHMuY29udGFpbmluZyhjb250ZXh0cy50ZW1wbGF0ZVRleHQsIG1hdGNoLnN0YXJ0KTsKICAgICAgICAgICAgaWYgKHJlZ2V4ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50c1tpXSA9IGVzY2FwZVJlZ2V4KG1hdGNoLnZhbHVlLCBleHByZXNzaW9uLCByZWdleCwgbWF0Y2guc3RhcnQpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRlbXBsYXRlVGV4dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXBsYWNlbWVudHNbaV0gPSBlc2NhcGVUZW1wbGF0ZShtYXRjaC52YWx1ZSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaW5nICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50c1tpXSA9IGVzY2FwZVN0cmluZyhtYXRjaC52YWx1ZSwgc3RyaW5nLnF1b3RlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIFN0cmluZyB2YXJpYWJsZSA9IFZBUklBQkxFX1BSRUZJWCA rIGJpbmRpbmdJbmRleCsrOwogICAgICAgICAgICAgICAgYmluZGluZ3MuYWNjZXB0KHZhcmlhYmxlLCBjb2VyY2UobWF0Y2gudmFsdWUpKTsKICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50c1tpXSA9IHZhcmlhYmxlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWlsZGVyKGV4cHJlc3Npb24pOwogICAgICAgIGZvciAoaW50IGkgPSBtYXRjaGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIFBsYWNlaG9sZGVyTWF0Y2ggbWF0Y2ggPSBtYXRjaGVzLmdldChpKTsKICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2UobWF0Y2guc3RhcnQsIG1hdGNoLmVuZCwgcmVwbGFjZW1lbnRzW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyByZXNvbHZlKFN0cmluZyB0b2tlbiwgT2ZmbGluZVBsYXllciBwbGF5ZXIsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGxhY2Vob2xkZXJzKSB7CiAgICAgICAgaWYgKHBsYWNlaG9sZGVycyAhPSBudWxsKSB7CiAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdG9rZW4uc3Vic3RyaW5nKDEsIHRva2VuLmxlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgIGZvciAoRW50cnk8U3RyaW5nLCBTdHJpbmc+IGVudHJ5IDogcGxhY2Vob2xkZXJzLmVudHJ5U2V0KCkpIHsKICAgICAgICAgICAgICAgIGlmIChlbnRyeS5nZXRLZXkoKS5lcXVhbHNJZ25vcmVDYXNlKG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVQYXBpVmFsdWUoZW50cnkuZ2V0VmFsdWUoKSwgcGxheWVyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQWR2YW5jZWRDb3JlUGx1Z2luIHBsdWdpbiA9IEFkdmFuY2VkQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpOwogICAgICAgIGlmICh0b2tlbi5zdGFydHNXaXRoKCIlIikgJiYgcGxheWVyICE9IG51bGwgJiYgcGx1Z2luICE9IG51bGwgJiYgcGx1Z2luLmlzUGxhY2VIb2xkZXJBUFJFbmFibGVkKCkpIHsKICAgICAgICAgICAgU3RyaW5nIHJlc29sdmVkID0gUGxhY2Vob2xkZXJBUFkuc2V0UGxhY2Vob2xkZXJzKHBsYXllciwgdG9rZW4pOwogICAgICAgICAgICBpZiAocmVzb2x2ZWQgIT0gbnVsbCAmJiAhcmVzb2x2ZWQuZXF1YWxzKHRva2VuKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZVBhcGlWYWx1ZShTdHJpbmcgdmFsdWUsIE9mZmxpbmVQbGF5ZXIgcGxheWVyKSB7CiAgICAgICAgQWR2YW5jZWRDb3JlUGx1Z2luIHBsdWdpbiA9IEFkdmFuY2VkQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpOwogICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHBsYXllciAhPSBudWxsICYmIHBsdWdpbiAhPSBudWxsICYmIHBsdWdpbi5pc1BsYWNlSG9sZGVyQVBJRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIFN0cmluZyByZXNvbHZlZCA9IFBsYWNlaG9sZGVyQVBJLnNldFBsYWNlaG9sZGVycyhwbGF5ZXIsIHZhbHVlKTsKICAgICAgICAgICAgaWYgKHJlc29sdmVkICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0IGNvZXJjZShTdHJpbmcgdmFsdWUpIHsKICAgICAgICBpZiAodmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpIHx8IHZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoImZhbHNlIikpIHsKICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4udmFsdWVPZih2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChJTlRFR0VSLm1hdGNoZXIodmFsdWUpLm1hdGNoZXMoKSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIExvbmcudmFsdWVPZih2YWx1ZSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKERFQ0lNQUwubWF0Y2hlcih2YWx1ZSkubWF0Y2hlcygpKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRG91YmxlLnZhbHVlT2YodmFsdWUpOwogICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWdub3JlZCkgewogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXNjYXBlU3RyaW5nKFN0cmluZyB2YWx1ZSwgY2hhciBxdW90ZSkgewogICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIodmFsdWUubGVuZ3RoKCkpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICBjaGFyIGN1cnJlbnQgPSB2YWx1ZS5jaGFyQXQoaSk7CiAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudCkgewogICAgICAgICAgICBjYXNlICdcXCc6CiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcXFxcXFwiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdcbic6CiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcXG4iKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdccic6CiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcXHIiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdcdTIwMjgnOgogICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXFx1MjAyOCIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ1x1MjAyOSc6CiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcXHUyMDI5Iik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IHF1b3RlKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXFwnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY3VycmVudCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGVzY2FwZVRlbXBsYXRlKFN0cmluZyB2YWx1ZSkgewogICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKCJcXFwiLCAiXFxcXFxcIikucmVwbGFjZSgiYCIsICJcXGAiKS5yZXBsYWNlKCIkeyIsICJcXCR7IikKICAgICAgICAgICAgICAgIC5yZXBsYWNlKCJcciIsICJcXHIiKS5yZXBsYWNlKCJcbiIsICJcXG4iKS5yZXBsYWNlKCJcdTIwMjgiLCAiXFx1MjAyOCIpCiAgICAgICAgICAgICAgICAucmVwbGFjZSgiXHUyMDI5IiwgIlxcdTIwMjkiKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXNjYXBlUmVnZXgoU3RyaW5nIHZhbHVlLCBTdHJpbmcgZXhwcmVzc2lvbiwgUmFuZ2UgcmVnZXgsIGludCBwbGFjZWhvbGRlclN0YXJ0KSB7CiAgICAgICAgYm9vbGVhbiBjaGFyYWN0ZXJDbGFzcyA9IGZhbHNlOwogICAgICAgIGJvb2xlYW4gZXNjYXBlZCA9IGZhbHNlOwogICAgICAgIGZvciAoaW50IGkgPSByZWdleC5zdGFydCArIDE7IGkgPCBwbGFjZWhvbGRlclN0YXJ0OyBpKyspIHsKICAgICAgICAgICAgY2hhciBjdXJyZW50ID0gZXhwcmVzc2lvbi5jaGFyQXQoaSk7CiAgICAgICAgICAgIGlmIChlc2NhcGVkKSB7CiAgICAgICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY3VycmVudCA9PSAnXFwnKSB7CiAgICAgICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09ICdbJykgewogICAgICAgICAgICAgICAgY2hhcmFjdGVyQ2xhc3MgPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gJ10nKSB7CiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJDbGFzcyA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBTdHJpbmcgc3BlY2lhbCA9IGNoYXJhY3RlckNsYXNzID8gIlxcXFwvXV4tIiA6ICJcXFwvLiorP14ke30oKXxbXSI7CiAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcih2YWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgIGNoYXIgY3VycmVudCA9IHZhbHVlLmNoYXJBdChpKTsKICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gJ1xuJykgewogICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXFxuIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAnXHInKSB7CiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcXHIiKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09ICdcdTIwMjgnKSB7CiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcXHUyMDI4Iik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAnXHUyMDI5JykgewogICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXFx1MjAyOSIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHNwZWNpYWwuaW5kZXhPZihjdXJyZW50KSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXFwnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY3VycmVudCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFBsYWNlaG9sZGVyTWF0Y2ggewogICAgICAgIHByaXZhdGUgZmluYWwgaW50IHN0YXJ0OwogICAgICAgIHByaXZhdGUgZmluYWwgaW50IGVuZDsKICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB0b2tlbjsKICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB2YWx1ZTsKCiAgICAgICAgcHJpdmF0ZSBQbGFjZWhvbGRlck1hdGNoKGludCBzdGFydCwgaW50IGVuZCwgU3RyaW5nIHRva2VuLCBTdHJpbmcgdmFsdWUpIHsKICAgICAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0OwogICAgICAgICAgICB0aGlzLmVuZCA9IGVuZDsKICAgICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuOwogICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFJhbmdlIHsKICAgICAgICBwcml2YXRlIGZpbmFsIGludCBzdGFydDsKICAgICAgICBwcml2YXRlIGZpbmFsIGludCBlbmQ7CgogICAgICAgIHByaXZhdGUgUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDsKICAgICAgICAgICAgdGhpcy5lbmQgPSBlbmQ7CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnMoaW50IHBvc2l0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiA+PSBzdGFydCAmJiBwb3NpdGlvbiA8IGVuZDsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgTGl0ZXJhbFJhbmdlIGV4dGVuZHMgUmFuZ2UgewogICAgICAgIHByaXZhdGUgZmluYWwgY2hhciBxdW90ZTsKCiAgICAgICAgcHJpdmF0ZSBMaXRlcmFsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBjaGFyIHF1b3RlKSB7CiAgICAgICAgICAgIHN1cGVyKHN0YXJ0LCBlbmQpOwogICAgICAgICAgICB0aGlzLnF1b3RlID0gcXVvdGU7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEphdmFzY3JpcHRDb250ZXh0cyB7CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PExpdGVyYWxSYW5nZT4gc3RyaW5ncyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIHByaXZhdGUgZmluYWwgTGlzdDxSYW5nZT4gcmVnZXhlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIHByaXZhdGUgZmluYWwgTGlzdDxSYW5nZT4gdGVtcGxhdGVUZXh0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFJhbmdlPiBjb21tZW50cyA9IG5ldyBBcnJheUxpc3Q8PigpOwoKICAgICAgICBwcml2YXRlIHN0YXRpYyBKYXZhc2NyaXB0Q29udGV4dHMgcGFyc2UoU3RyaW5nIHNvdXJjZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgQ29tcGlsZXJFbnZpcm9ucyBlbnZpcm9ucyA9IG5ldyBDb21waWxlckVudmlyb25zKCk7CiAgICAgICAgICAgICAgICBlbnZpcm9ucy5zZXRMYW5ndWFnZVZlcnNpb24oQ29udGV4dC5WRVJTSU9OX0VTNik7CiAgICAgICAgICAgICAgICBlbnZpcm9ucy5zZXRSZWNvcmRpbmdDb21tZW50cyh0cnVlKTsKICAgICAgICAgICAgICAgIGVudmlyb25zLnNldFJlY29yZGluZ0xvY2FsSnNEb2NDb21tZW50cyh0cnVlKTsKICAgICAgICAgICAgICAgIGVudmlyb25zLnNldFJlY292ZXJGcm9tRXJyb3JzKGZhbHNlKTsKCiAgICAgICAgICAgICAgICBBc3RSb290IHJvb3QgPSBuZXcgUGFyc2VyKGVudmlyb25zKS5wYXJzZShzb3VyY2UsICJBZHZhbmNlZENvcmUiLCAxKTsKICAgICAgICAgICAgICAgIEphdmFzY3JpcHRDb250ZXh0cyBjb250ZXh0cyA9IG5ldyBKYXZhc2NyaXB0Q29udGV4dHMoKTsKICAgICAgICAgICAgICAgIHJvb3QudmlzaXQobm9kZSAtPiB7CiAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gbm9kZS5nZXRBYnNvbHV0ZVBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgaW50IGVuZCA9IHN0YXJ0ICsgbm9kZS5nZXRMZW5ndGgoKTsKICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFN0cmluZ0xpdGVyYWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dHMuc3RyaW5ncy5hZGQobmV3IExpdGVyYWxSYW5nZShzdGFydCwgZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU3RyaW5nTGl0ZXJhbCkgbm9kZSkuZ2V0UXVvdGVDaGFyYWN0ZXIoKSkpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFJlZ0V4cExpdGVyYWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dHMucmVnZXhlcy5hZGQobmV3IFJhbmdlKHN0YXJ0LCBlbmQpKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBUZW1wbGF0ZUNoYXJhY3RlcnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dHMudGVtcGxhdGVUZXh0LmFkZChuZXcgUmFuZ2Uoc3RhcnQsIGVuZCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmIChyb290LmdldENvbW1lbnRzKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGZvciAoQ29tbWVudCBjb21tZW50IDogcm9vdC5nZXRDb21tZW50cygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCA9IGNvbW1lbnQuZ2V0QWJzb2x1dGVQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0cy5jb21tZW50cy5hZGQobmV3IFJhbmdlKHN0YXJ0LCBzdGFydCArIGNvbW1lbnQuZ2V0TGVuZ3RoKCkpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250ZXh0cy5zb3J0KCk7CiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dHM7CiAgICAgICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBzYWZlbHkgcGFyc2UgSmF2YVNjcmlwdCBjb250YWluaW5nIHBsYWNlaG9sZGVyczogIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBSYW5nZSBjb250YWluaW5nKExpc3Q8UmFuZ2U+IHJhbmdlcywgaW50IHBvc2l0aW9uKSB7CiAgICAgICAgICAgIGZvciAoUmFuZ2UgcmFuZ2UgOiByYW5nZXMpIHsKICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb250YWlucyhwb3NpdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIExpdGVyYWxSYW5nZSBjb250YWluaW5nTGl0ZXJhbChpbnQgcG9zaXRpb24pIHsKICAgICAgICAgICAgZm9yIChMaXRlcmFsUmFuZ2UgcmFuZ2UgOiBzdHJpbmdzKSB7CiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29udGFpbnMocG9zaXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSB2b2lkIHNvcnQoKSB7CiAgICAgICAgICAgIENvbXBhcmF0b3I8UmFuZ2U+IGNvbXBhcmF0b3IgPSBDb21wYXJhdG9yLmNvbXBhcmluZ0ludChyYW5nZSAtPiByYW5nZS5zdGFydCk7CiAgICAgICAgICAgIHN0cmluZ3Muc29ydChjb21wYXJhdG9yKTsKICAgICAgICAgICAgcmVnZXhlcy5zb3J0KGNvbXBhcmF0b3IpOwogICAgICAgICAgICB0ZW1wbGF0ZVRleHQuc29ydChjb21wYXJhdG9yKTsKICAgICAgICAgICAgY29tbWVudHMuc29ydChjb21wYXJhdG9yKTsKICAgICAgICB9CiAgICB9Cn0K | ||
| FILE_3_PATH: AdvancedCore/src/main/java/com/bencodez/advancedcore/api/javascript/JavascriptEngine.java | ||
| FILE_3_DATA: cGFja2FnZSBjb20uYmVuY29kZXouYWR2YW5jZWRjb3JlLmFwaS5qYXZhc2NyaXB0OwoKaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwppbXBvcnQgamF2YS51dGlsLk1hcDsKaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CgppbXBvcnQgamF2YXguc2NyaXB0LlNjcmlwdEVuZ2luZTsKaW1wb3J0IGphdmF4LnNjcmlwdC5TY3JpcHRFeGNlcHRpb247CgppbXBvcnQgb3JnLmJ1a2tpdC5CdWtraXQ7CmltcG9ydCBvcmcuYnVra2l0Lk9mZmxpbmVQbGF5ZXI7CmltcG9ydCBvcmcuYnVra2l0LmNvbW1hbmQuQ29tbWFuZFNlbmRlcjsKaW1wb3J0IG9yZy5idWtraXQuZW50aXR5LlBsYXllcjsKCmltcG9ydCBjb20uYmVuY29kZXouYWR2YW5jZWRjb3JlLkFkdmFuY2VkQ29yZVBsdWdpbjsKaW1wb3J0IGNvbS5iZW5jb2Rlei5hZHZhbmNlZGNvcmUuYXBpLnVzZXIuQWR2YW5jZWRDb3JlVXNlcjsKaW1wb3J0IGNvbS5iZW5jb2Rlei5zaW1wbGVhcGkubWVzc2FnZXMuTWVzc2FnZUFQSTsKCnB1YmxpYyBjbGFzcyBKYXZhc2NyaXB0RW5naW5lIHsK | ||
| ... | ||