<commit_before>section.col-xs-12.content(ng-controller="HistoryCtrl")

  //- Disconnected

  group.disconnected(ng-hide="connected")
    p.literal(l10n) You have to be online to see this screen

  group.disconnected(ng-hide="!connected || loadState.transactions")
    p.literal(l10n) Loading history...

  //- Show message if account has not been funded yet.
  .unfunded(ng-show="!account.Balance && connected")
    p.literal(l10n) You have to be funded before you can view history  

  //- Connected

  group.row(ng-show="connected && loadState.transactions && account.Balance")
    .filters.row-padding-small.col-md-3.col-sm-5.col-xs-12
      .filter.type-filter.row
        .col-xs-12.filters-wrapper
          a.filter-title(href="", ng-click="showFilterTxTypes=!showFilterTxTypes", l10n) Transaction type
            .fa.fa-caret-right(ng-show="showFilterTxTypes")
            .fa.fa-caret-down(ng-hide="showFilterTxTypes")
          .filter-choices(ng-hide="showFilterTxTypes")
            div(ng-repeat="name in orderedTypes")
              label(ng-class="{active: types[name].checked}")
                i.fa.fa-plus(ng-show="types[name].checked")
                i.fa.fa-minus(ng-hide="types[name].checked")
                span.name {{name}}
                //span.count {{typeUsage[name] || 0}}
                input(type="checkbox", name="type-filter", ng-model="types[name].checked")
        //- .filter.type-filter
        //-   a.filter-title(href="", ng-click="showFilterCurrencies=!showFilterCurrencies", l10n) Currencies
        //-     .fa.fa-caret-right(ng-hide="showFilterCurrencies")
        //-     .fa.fa-caret-down(ng-show="showFilterCurrencies")
        //-   .filter-choices(ng-show="showFilterCurrencies")
        //-     div(ng-repeat="(currency,obj) in filters.currencies")
        //-       label(ng-class="{active: obj.checked}")
        //-         i.fa.fa-plus(ng-show="obj.checked")
        //-         i.fa.fa-minus(ng-hide="obj.checked")
        //-         span.name {{currency}}
        //-         span.count {{currencyUsage[currency] || 0}}
        //-         input(type="checkbox", name="currency-filter", ng-model="obj.checked")
      .filter.date-filter.row
        .col-xs-12.filters-wrapper
          a.filter-title(href="", ng-click="showFilterDate=!showFilterDate", l10n) Date
            .fa.fa-caret-right(ng-show="showFilterDate")
            .fa.fa-caret-down(ng-hide="showFilterDate")
          div.row(ng-hide="showFilterDate")
            .col-xs-12
              .filter-description(l10n) Load history for specific date range
              .filter-form-wrapper
                form.filter-choices(ng-submit="submitDateRangeForm()")
                  .input-group.inline-inputs-group
                    .input-group-addon
                      i.fa.fa-calendar
                      span(l10n) &#32;From
                    .input-wrapper  
                      input.form-control(type="text", rp-datepicker, ng-model="dateMinView", readonly)
                  .input-group.inline-inputs-group
                    .input-group-addon
                      i.fa.fa-calendar
                      span(l10n) &#32;To
                    .input-wrapper  
                      input.form-control(type="text", rp-datepicker, ng-model="dateMaxView", readonly)
                  button.btn.btn-block.btn-primary.submit(type='submit', l10n) Filter
            //- .filter.amount-filter
            //-   a.filter-title(href="", ng-click="showFilterMinAmount=!showFilterMinAmount", l10n) Minimum Amount
            //-     .fa.fa-caret-right(ng-hide="showFilterMinAmount")
            //-     .fa.fa-caret-down(ng-show="showFilterMinAmount")
            //-   form.filter-choices.row.form-group(ng-submit="submitMinimumAmountForm()", ng-show="showFilterMinAmount")
            //-     .col-xs-8
            //-       input.form-control(type="text", ng-model="filters.minimumAmount")
            //-     .col-xs-4
            //-       button.btn.btn-block.btn-primary.submit(type='submit', l10n) Filter

    .transactions.col-md-9.col-sm-7.col-xs-12
      .head.row
        .col-md-9.hidden-sm
          .type
          .i
          .dt(l10n) Date
          .desc(l10n) Description
        .visible-sm.col-sm-5
        .col-md-3.col-sm-7.export-btn-wrapper.text-right
          a#csv.btn.btn-primary.btn-block.btn-sm(href='', ng-click="exportToCsv()", l10n) Export to CSV
      .message(ng-hide="historyState=='loading' || historyShow", l10n)
        | Sorry, no transactions match your current filter.
      ul
        li(class="{{entry.transaction.type}}", ng-repeat="entry in historyShow track by entry.hash"
            ng-click='details[entry.hash] = !details[entry.hash]'
            ng-class="{open: details[entry.hash]}"
            rp-pretty-amount-date="entry.dateRaw")
          .info
            .row.row-padding-small
              .col-sm-4
                span.type &nbsp;
                span.i(ng-hide="entry.details")
                  i.fa.fa-arrow-down(ng-show="entry.transaction.type=='received'")
                  i.fa.fa-arrow-up(ng-show="entry.transaction.type=='sent'")
                  i.fa.fa-download.fa-rotate-90(ng-show="entry.transaction.type=='trusted'")
                  i.fa.fa-download.fa-rotate-270(ng-show="entry.transaction.type=='trusting'")
                  i.fa.fa-exchange(ng-show="!entry.transaction.type || entry.transaction.type=='offernew' || entry.transaction.type=='offercancel' || entry.transaction.type=='exchange' || entry.transaction.type=='rippling'")
                  i.fa.fa-cogs(ng-show="entry.transaction.type=='accountset'")
                  i.fa.fa-cogs(ng-show="entry.transaction.type=='setregularkey'")
                  i.fa.fa-exclamation-triangle(ng-show="entry.transaction.type=='failed'")
                span.i(ng-show="entry.details")
                  i.fa.fa-arrow-down
                span.dt {{entry.date | date:'EEE, MMM d, h:mm:ss a'}}
              .col-sm-8
                span.desc(ng-hide="entry.details", ng-switch="entry.transaction.type")
                  span(ng-switch-when="sent")
                    span(l10n, rp-span-spacing) You sent
                      span.amount(rp-pretty-amount="entry.transaction.amountSent || entry.transaction.amount")
                      | to
                      span.address(rp-pretty-identity="entry.transaction.counterparty")
                    include ./history/_effects.jade
                  span(ng-switch-when="received")
                    span(l10n, rp-span-spacing)
                      span.address(rp-pretty-identity="entry.transaction.counterparty")
                      | sent you
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                    include ./history/_effects.jade
                  span(ng-switch-when="exchange")
                    span(l10n, rp-span-spacing) You requested to exchange
                      span.amount(rp-pretty-amount="entry.transaction.spent")
                      | to
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                    include ./history/_effects.jade
                  span(ng-switch-when="trusted")
                    span(l10n, rp-span-spacing)
                      span.address(title="{{entry.transaction.counterparty}}") {{entry.transaction.counterparty | rpcontactname}}
                      | now trusts you for
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                    include ./history/_effects.jade
                  span(ng-switch-when="trusting")
                    span(l10n, rp-span-spacing) You have now connected to the gateway&#32;
                      span.address(rp-pretty-identity="entry.transaction.counterparty")
                      span(l10n-inc) &#32;for&#32;
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                      | .
                    include ./history/_effects.jade
                  span(ng-switch-when="offernew")
                    span(ng-show="entry.transaction.sell", l10n, rp-span-spacing) You created an order to sell
                      span.amount(rp-pretty-amount="entry.transaction.gets")
                      | for
                      span.amount(rp-pretty-amount="entry.transaction.pays")
                    span(ng-hide="entry.transaction.sell", l10n, rp-span-spacing) You created an order to buy
                      span.amount(rp-pretty-amount="entry.transaction.pays")
                      | for
                      span.amount(rp-pretty-amount="entry.transaction.gets")
                    include ./history/_effects.jade
                  span(ng-switch-when="offercancel")
                    span(l10n, rp-span-spacing) You cancelled an order accepting&#32;
                      span.amount(rp-pretty-amount="entry.transaction.pays")
                      | for
                      span.amount(rp-pretty-amount="entry.transaction.gets")
                    include ./history/_effects.jade
                  span(ng-switch-when="accountset")
                    span(l10n) Account details have been changed
                    include ./history/_effects.jade
                  span(ng-switch-when="setregularkey")
                    span(l10n) Regular Key Changed
                    include ./history/_effects.jade
                  span(ng-switch-when="rippling")
                    span(l10n) Rippling
                    include ./history/_effects.jade
                  span(ng-switch-when="failed", l10n) Failed transaction
                  span(ng-switch-when="error")
                    strong(l10n) Unknown transaction
                    ul.effects(rp-if="details[entry.hash]")
                      li
                        span(l10n) The client failed to parse this transaction. The developers have been notified of the issue.
                  span(ng-switch-default)
                    include ./history/_effects.jade
                span.desc(ng-show="entry.details", ng-switch="entry.details.type")
                  span(ng-switch-when="giveaway")
                    span(l10n, rp-span-spacing)
                      span {{entry.details.app.name}}
                      |  sent you
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                      |  and activated your account!
                    include ./history/_effects.jade
                  span(ng-switch-when="deposit")
                    span(l10n, rp-span-spacing)
                      | You deposited
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                      |  using {{entry.details.app.name}}
                    include ./history/_effects.jade

          .details(ng-if="details[entry.hash]")
            .effects(ng-show="entry.balanceEffects")
              .title(l10n) Balance Changes
              .effect.header
                span.description(l10n) Description
                span.issuer(l10n) Issuer
                span.amount(l10n) Amount
                span.balance(l10n) Final balance
              .effect(ng-repeat="effect in entry.balanceEffects")
                span.description
                  span(ng-show="effect.type == 'balance_change'", data-label="Description", l10n) XRP Balance Change
                  span(ng-show="effect.type == 'trust_change_balance'", data-label="Description", l10n) {{effect.currency}} Balance Change
                  span(ng-show="effect.type == 'fee'", data-label="Description", l10n) Fee
                span.issuer(ng-hide="effect.amount.is_native()"
                  rp-pretty-issuer="effect.amount.issuer()"
                  rp-pretty-issuer-contacts="userBlob.data.contacts"
                  rp-pretty-issuer-default="-"
                  data-label="Issuer"
                )
                //Display blank issuer for XRP
                span.issuer(ng-show="effect.amount.is_native()")
                span.amount(data-label="Amount", rp-pretty-amount="effect.amount")
                span.balance(data-label="Final balance", rp-pretty-amount="effect.balance")
            span.hash(rp-popover, rp-popover-placement="left", rp-popover-trigger="hover", rp-popover-delay
              l10n-rp-popover-content="{{copyTooltip}}")
              p.hash-text(ng-click="copy(entry.hash)") Hash: {{entry.hash}}
                input.text-copy-helper(value="{{entry.hash}}")
            .links(ng-show="entry.transaction.counterparty && !(entry.transaction.counterparty | rponlycontactname)")
              a.addLink(href="#/contact?to={{entry.transaction.counterparty}}", rp-no-propagate, l10n)
                | Add
                strong  {{entry.transaction.counterparty | rpcontactname}}
                |  to contact list
      .foot
        div(ng-show="historyState=='loading'", l10n) Loading...
        a.loadmore(ng-show="historyState=='ready'", href="", ng-click="loadMore()", l10n) Load more
        div(ng-show="historyState=='full'", l10n) No more transactions left

// TODO filter calendar: High/low limits.
// TODO filter calendar: High limit calculation after the low limit
// TODO we loose history after tab Change
// TODO problem when manually editing date filter input field
// TODO currency filter to work with also trust type
// TODO optimization.. double (triple on load more) update history
<commit_msg>[TASK] History: OfflineMode message (DC-27)<commit_after>section.col-xs-12.content(ng-controller="HistoryCtrl")

  //- Disconnected

  group.disconnected(ng-hide="connected || !onlineMode")
    p.literal(l10n) You have to be online to see this screen

  group.disconnected(ng-hide="onlineMode")
    p.literal(l10n) Transaction history is not available on the offline machine.
    span(l10n) Please type in address {{address}} into the cold wallet page on your online machine.

  group.disconnected(ng-hide="!connected || loadState.transactions")
    p.literal(l10n) Loading history...

  //- Show message if account has not been funded yet.
  .unfunded(ng-show="!account.Balance && connected")
    p.literal(l10n) You have to be funded before you can view history  

  //- Connected

  group.row(ng-show="connected && loadState.transactions && account.Balance")
    .filters.row-padding-small.col-md-3.col-sm-5.col-xs-12
      .filter.type-filter.row
        .col-xs-12.filters-wrapper
          a.filter-title(href="", ng-click="showFilterTxTypes=!showFilterTxTypes", l10n) Transaction type
            .fa.fa-caret-right(ng-show="showFilterTxTypes")
            .fa.fa-caret-down(ng-hide="showFilterTxTypes")
          .filter-choices(ng-hide="showFilterTxTypes")
            div(ng-repeat="name in orderedTypes")
              label(ng-class="{active: types[name].checked}")
                i.fa.fa-plus(ng-show="types[name].checked")
                i.fa.fa-minus(ng-hide="types[name].checked")
                span.name {{name}}
                //span.count {{typeUsage[name] || 0}}
                input(type="checkbox", name="type-filter", ng-model="types[name].checked")
        //- .filter.type-filter
        //-   a.filter-title(href="", ng-click="showFilterCurrencies=!showFilterCurrencies", l10n) Currencies
        //-     .fa.fa-caret-right(ng-hide="showFilterCurrencies")
        //-     .fa.fa-caret-down(ng-show="showFilterCurrencies")
        //-   .filter-choices(ng-show="showFilterCurrencies")
        //-     div(ng-repeat="(currency,obj) in filters.currencies")
        //-       label(ng-class="{active: obj.checked}")
        //-         i.fa.fa-plus(ng-show="obj.checked")
        //-         i.fa.fa-minus(ng-hide="obj.checked")
        //-         span.name {{currency}}
        //-         span.count {{currencyUsage[currency] || 0}}
        //-         input(type="checkbox", name="currency-filter", ng-model="obj.checked")
      .filter.date-filter.row
        .col-xs-12.filters-wrapper
          a.filter-title(href="", ng-click="showFilterDate=!showFilterDate", l10n) Date
            .fa.fa-caret-right(ng-show="showFilterDate")
            .fa.fa-caret-down(ng-hide="showFilterDate")
          div.row(ng-hide="showFilterDate")
            .col-xs-12
              .filter-description(l10n) Load history for specific date range
              .filter-form-wrapper
                form.filter-choices(ng-submit="submitDateRangeForm()")
                  .input-group.inline-inputs-group
                    .input-group-addon
                      i.fa.fa-calendar
                      span(l10n) &#32;From
                    .input-wrapper  
                      input.form-control(type="text", rp-datepicker, ng-model="dateMinView", readonly)
                  .input-group.inline-inputs-group
                    .input-group-addon
                      i.fa.fa-calendar
                      span(l10n) &#32;To
                    .input-wrapper  
                      input.form-control(type="text", rp-datepicker, ng-model="dateMaxView", readonly)
                  button.btn.btn-block.btn-primary.submit(type='submit', l10n) Filter
            //- .filter.amount-filter
            //-   a.filter-title(href="", ng-click="showFilterMinAmount=!showFilterMinAmount", l10n) Minimum Amount
            //-     .fa.fa-caret-right(ng-hide="showFilterMinAmount")
            //-     .fa.fa-caret-down(ng-show="showFilterMinAmount")
            //-   form.filter-choices.row.form-group(ng-submit="submitMinimumAmountForm()", ng-show="showFilterMinAmount")
            //-     .col-xs-8
            //-       input.form-control(type="text", ng-model="filters.minimumAmount")
            //-     .col-xs-4
            //-       button.btn.btn-block.btn-primary.submit(type='submit', l10n) Filter

    .transactions.col-md-9.col-sm-7.col-xs-12
      .head.row
        .col-md-9.hidden-sm
          .type
          .i
          .dt(l10n) Date
          .desc(l10n) Description
        .visible-sm.col-sm-5
        .col-md-3.col-sm-7.export-btn-wrapper.text-right
          a#csv.btn.btn-primary.btn-block.btn-sm(href='', ng-click="exportToCsv()", l10n) Export to CSV
      .message(ng-hide="historyState=='loading' || historyShow", l10n)
        | Sorry, no transactions match your current filter.
      ul
        li(class="{{entry.transaction.type}}", ng-repeat="entry in historyShow track by entry.hash"
            ng-click='details[entry.hash] = !details[entry.hash]'
            ng-class="{open: details[entry.hash]}"
            rp-pretty-amount-date="entry.dateRaw")
          .info
            .row.row-padding-small
              .col-sm-4
                span.type &nbsp;
                span.i(ng-hide="entry.details")
                  i.fa.fa-arrow-down(ng-show="entry.transaction.type=='received'")
                  i.fa.fa-arrow-up(ng-show="entry.transaction.type=='sent'")
                  i.fa.fa-download.fa-rotate-90(ng-show="entry.transaction.type=='trusted'")
                  i.fa.fa-download.fa-rotate-270(ng-show="entry.transaction.type=='trusting'")
                  i.fa.fa-exchange(ng-show="!entry.transaction.type || entry.transaction.type=='offernew' || entry.transaction.type=='offercancel' || entry.transaction.type=='exchange' || entry.transaction.type=='rippling'")
                  i.fa.fa-cogs(ng-show="entry.transaction.type=='accountset'")
                  i.fa.fa-cogs(ng-show="entry.transaction.type=='setregularkey'")
                  i.fa.fa-exclamation-triangle(ng-show="entry.transaction.type=='failed'")
                span.i(ng-show="entry.details")
                  i.fa.fa-arrow-down
                span.dt {{entry.date | date:'EEE, MMM d, h:mm:ss a'}}
              .col-sm-8
                span.desc(ng-hide="entry.details", ng-switch="entry.transaction.type")
                  span(ng-switch-when="sent")
                    span(l10n, rp-span-spacing) You sent
                      span.amount(rp-pretty-amount="entry.transaction.amountSent || entry.transaction.amount")
                      | to
                      span.address(rp-pretty-identity="entry.transaction.counterparty")
                    include ./history/_effects.jade
                  span(ng-switch-when="received")
                    span(l10n, rp-span-spacing)
                      span.address(rp-pretty-identity="entry.transaction.counterparty")
                      | sent you
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                    include ./history/_effects.jade
                  span(ng-switch-when="exchange")
                    span(l10n, rp-span-spacing) You requested to exchange
                      span.amount(rp-pretty-amount="entry.transaction.spent")
                      | to
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                    include ./history/_effects.jade
                  span(ng-switch-when="trusted")
                    span(l10n, rp-span-spacing)
                      span.address(title="{{entry.transaction.counterparty}}") {{entry.transaction.counterparty | rpcontactname}}
                      | now trusts you for
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                    include ./history/_effects.jade
                  span(ng-switch-when="trusting")
                    span(l10n, rp-span-spacing) You have now connected to the gateway&#32;
                      span.address(rp-pretty-identity="entry.transaction.counterparty")
                      span(l10n-inc) &#32;for&#32;
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                      | .
                    include ./history/_effects.jade
                  span(ng-switch-when="offernew")
                    span(ng-show="entry.transaction.sell", l10n, rp-span-spacing) You created an order to sell
                      span.amount(rp-pretty-amount="entry.transaction.gets")
                      | for
                      span.amount(rp-pretty-amount="entry.transaction.pays")
                    span(ng-hide="entry.transaction.sell", l10n, rp-span-spacing) You created an order to buy
                      span.amount(rp-pretty-amount="entry.transaction.pays")
                      | for
                      span.amount(rp-pretty-amount="entry.transaction.gets")
                    include ./history/_effects.jade
                  span(ng-switch-when="offercancel")
                    span(l10n, rp-span-spacing) You cancelled an order accepting&#32;
                      span.amount(rp-pretty-amount="entry.transaction.pays")
                      | for
                      span.amount(rp-pretty-amount="entry.transaction.gets")
                    include ./history/_effects.jade
                  span(ng-switch-when="accountset")
                    span(l10n) Account details have been changed
                    include ./history/_effects.jade
                  span(ng-switch-when="setregularkey")
                    span(l10n) Regular Key Changed
                    include ./history/_effects.jade
                  span(ng-switch-when="rippling")
                    span(l10n) Rippling
                    include ./history/_effects.jade
                  span(ng-switch-when="failed", l10n) Failed transaction
                  span(ng-switch-when="error")
                    strong(l10n) Unknown transaction
                    ul.effects(rp-if="details[entry.hash]")
                      li
                        span(l10n) The client failed to parse this transaction. The developers have been notified of the issue.
                  span(ng-switch-default)
                    include ./history/_effects.jade
                span.desc(ng-show="entry.details", ng-switch="entry.details.type")
                  span(ng-switch-when="giveaway")
                    span(l10n, rp-span-spacing)
                      span {{entry.details.app.name}}
                      |  sent you
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                      |  and activated your account!
                    include ./history/_effects.jade
                  span(ng-switch-when="deposit")
                    span(l10n, rp-span-spacing)
                      | You deposited
                      span.amount(rp-pretty-amount="entry.transaction.amount")
                      |  using {{entry.details.app.name}}
                    include ./history/_effects.jade

          .details(ng-if="details[entry.hash]")
            .effects(ng-show="entry.balanceEffects")
              .title(l10n) Balance Changes
              .effect.header
                span.description(l10n) Description
                span.issuer(l10n) Issuer
                span.amount(l10n) Amount
                span.balance(l10n) Final balance
              .effect(ng-repeat="effect in entry.balanceEffects")
                span.description
                  span(ng-show="effect.type == 'balance_change'", data-label="Description", l10n) XRP Balance Change
                  span(ng-show="effect.type == 'trust_change_balance'", data-label="Description", l10n) {{effect.currency}} Balance Change
                  span(ng-show="effect.type == 'fee'", data-label="Description", l10n) Fee
                span.issuer(ng-hide="effect.amount.is_native()"
                  rp-pretty-issuer="effect.amount.issuer()"
                  rp-pretty-issuer-contacts="userBlob.data.contacts"
                  rp-pretty-issuer-default="-"
                  data-label="Issuer"
                )
                //Display blank issuer for XRP
                span.issuer(ng-show="effect.amount.is_native()")
                span.amount(data-label="Amount", rp-pretty-amount="effect.amount")
                span.balance(data-label="Final balance", rp-pretty-amount="effect.balance")
            span.hash(rp-popover, rp-popover-placement="left", rp-popover-trigger="hover", rp-popover-delay
              l10n-rp-popover-content="{{copyTooltip}}")
              p.hash-text(ng-click="copy(entry.hash)") Hash: {{entry.hash}}
                input.text-copy-helper(value="{{entry.hash}}")
            .links(ng-show="entry.transaction.counterparty && !(entry.transaction.counterparty | rponlycontactname)")
              a.addLink(href="#/contact?to={{entry.transaction.counterparty}}", rp-no-propagate, l10n)
                | Add
                strong  {{entry.transaction.counterparty | rpcontactname}}
                |  to contact list
      .foot
        div(ng-show="historyState=='loading'", l10n) Loading...
        a.loadmore(ng-show="historyState=='ready'", href="", ng-click="loadMore()", l10n) Load more
        div(ng-show="historyState=='full'", l10n) No more transactions left

// TODO filter calendar: High/low limits.
// TODO filter calendar: High limit calculation after the low limit
// TODO we loose history after tab Change
// TODO problem when manually editing date filter input field
// TODO currency filter to work with also trust type
// TODO optimization.. double (triple on load more) update history

{'fraction_non_alphanumeric': 0.13552263010467344, 'fraction_numerical': 0.010172490048651039, 'mean_word_length': 1.7754705400981996, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7198092', 'n_tokens_mistral': 8029, 'n_tokens_neox': 7407, 'n_words': 1111}