Repository navigation
Commit 04740b7
domain:server#2 · os-sales · session_01L6bhgUCizoYWQVJWjhdR6F
<!-- claude-projects-attribution: {"github_login":"os-sales"} -->
_Requested by **Sales** · [project
thread](https://claude.ai/code/project/chan_01D5bWFY3rFzgJcytD5gD4Uu?thread=cmsg_01D5bWFY3rFzgJcytD5gD4UuPMZ8BHWtPf6nBTp51qSM64)_
Part of #25522
Clause-②: no
Metadata-protocol: none
Skills-docs: none — a move-only split of a private engine body; no skill
or docs page names these members
Ruling-ref: 6348891160 + 6441032442
## 维护者速读
- **改了什么**:把 `engine.ts`「查询条件下沉」区里 3 个方法体(`where`/`having` 令牌解析
`resolveWhereTokens`、跨对象关系条件改写成 `$in` 的
`lowerRelationConditions`、搜索可查询字段的取得
`resolveSearchQueryableFields`)原样搬进新文件
`engine-query-lowering.ts`;类上的方法签名、注释、位置不变,方法体换成转交。与留下代码共用的 2 个顶层
helper(`resolveThenLowerWhere`、`relationSitesOf`)原地加
`export`、由新文件导入(不复制)。`engine.ts` 22,170 → 22,131 行。
- **为什么改**:#25522 按缝拆分 `engine.ts` 的第 20 刀。在最新 `main` 上把类的 268
个成员全部重新测价:大块方法体几乎都被系列限制锁住(私有静态、推断的公开返回类型、`engine.ts#X`
外部指针、写入普查、查询选项擦除基线),能整块搬、付得起 −30 行以上的只剩这一区,净 −39 行。
- **风险与回滚**:纯搬移,无行为变化。公开 `.d.ts` 六个文件里四个逐字节相同;`index.d.ts`/`.d.mts` 因两个
helper 原地 `export` 引起顶层声明重排(裁决 `6441032442` B
情形),经语句级归一化后完全相等(语句多重集、声明面摘要、导入导出名集合都相等,附阳性对照)。运行期导出名单与函数名相同,外部包加载顺序不变,晚绑定探针新旧逐行一致。回滚
= revert 本 PR。
- **先看**:`packages/objectql/src/engine-query-lowering.ts`(3 个函数与
`QueryLoweringHost`,其中用 symbol 键 getter
传安全服务槽是本系列新出现的宿主形状)、`packages/objectql/src/engine.ts` 里 3 个转交桩、新导入行与 2
处原地 `export`。
- **两分钟验证**:`pnpm --filter @objectstack/objectql exec vitest run
--project local --maxWorkers=2
src/engine-nested-relation-lowering.test.ts
src/relation-condition-prescription-cap.test.ts
src/engine-search-queryable-fields.test.ts`,应见 3 个文件、38 个测试全部通过。
- **需要你做的**:无,席位落地。
Cut 20 of the `packages/objectql/src/engine.ts` split (#24586 ruling A,
recorded in `6270097840`), under the claim `6512318712` (branch
amendment `6512348857`). Three bodies of the query-lowering area move
unedited into a new module,
`packages/objectql/src/engine-query-lowering.ts`, behind
`QueryLoweringHost`. No behaviour changes. #25522 stays open.
Branch `claude/project-thread-n9w3bf` (the card thread's harness-pinned
branch), cut from `origin/main` at `fec60e00`, with `origin/main`
`0a4b0fb223` merged in (clean). `origin/main` has since moved to
`637cfc6736`; that range touches `registry.ts`, two ADRs and
`liveness/datasource.*`, none of this diff's paths, none of them names a
moved body, and `git merge-tree` of this head with it is clean.
## What changes
### Why this area
Re-priced on fresh `origin/main` (`engine.ts` 22,170 lines, blob
`543fe0beb94c`): every one of the class's 268 members was screened for
the series limits and priced by the net-line rule (body lines removed
less the stub and host the move costs). What is left that is both free
and large is little:
| candidate area | net | why not / why |
|---|---|---|
| **query lowering** (`resolveWhereTokens`, `lowerRelationConditions`,
`resolveSearchQueryableFields`) | **−39** | **chosen**: all three free,
private, declared return types, contiguous |
| write support (`staticReadonlyCreateStrip` and neighbours) | about −35
| free, but scattered over several sections, so the cut would not read
as one seam |
| hook dispatch remainder (`dispatchUnscopedMultiWriteHooks`) | −30 |
one body; does not pay more than −30 |
The large bodies are locked: private statics (`expandRelatedRecords`,
`walkReferencingRelations`), an inferred public return (`registerApp`),
`engine.ts#X` liveness pointers (`registerMetadataCollections`,
`buildSummaryIndex`, `expandSearchOnAst`), `docs/adr` pointers
(`applyFieldDefaults`, `executeWithMiddleware`, `transaction`),
query-options erasure sites (`find`, `findOne`, `seedAutonumber`) and
`this.update` write sites under the tenant-audit census
(`recordObservedDeviation`, `retractCreationAttestation`,
`recomputeSummaries`).
Inside the chosen area:
| member | body lines | disposition |
|---|---|---|
| `resolveWhereTokens` | 20 | **moves**, −13 |
| `resolveRelateThenLowerWhere` | 5 | stays: pays +2 |
| `lowerRelationConditions` | 27 | **moves**, −18 |
| `withResolvedWhere` | 5 | stays: pays 0 |
| `expandSearchOnAst` | 84 | stays: `docs/qa` and
`packages/spec/liveness` name `engine.ts#expandSearchOnAst` |
| `resolveSearchQueryableFields` | 14 | **moves**, −12 |
| `expandSearchOnOptions` | 6 | stays: pays +1 |
| `fillQueryAstDefaults` | 14 | stays: a `packages/spec/liveness`
pointer names it |
The three bodies price at −43 in all; the module's import line and the
import-list edits in `engine.ts` bring the file to −39. The two-body
variant (without `resolveSearchQueryableFields`) measured −29 to −31, so
the third body was added to clear −30.
### The shape
- The class keeps all three methods with name, modifiers, signature,
docblock and position. A body becomes one host literal typed
`ThisParameterType<typeof fn>` with exactly the `QueryLoweringHost`
members it reads, plus a `.call`, marked `[#25522 cut 20]`, as cuts 8
and 10 to 19 did; the generic `lowerRelationConditions<W>` is called as
`(lowerRelationConditions<W>).call(host, …)`.
- Fields go as getters over late-bound closures (`_registry`,
`relatedSchemaOf`); methods as late-bound closures
(`resolveRelateThenLowerWhere`, `find`), so a double set on the engine
after construction is still the one a call reaches.
- **New in the series: a symbol-keyed host member.**
`resolveSearchQueryableFields` reads the engine's security-service
source through the module-level symbol `SECURITY_SERVICE_SOURCE_SLOT`.
The host carries it as `get [SECURITY_SERVICE_SOURCE_SLOT]()`, typed
`unknown` on `QueryLoweringHost` (the body already narrows it), and the
stub reads it as `(this as unknown as Record<symbol,
unknown>)[SECURITY_SERVICE_SOURCE_SLOT]`. No moved body assigns a field,
so there is no setter.
- **Series limits.** All three are private with declared return types,
so each `.d.ts` line stays `private NAME;`. No moved body reads a
private static, has a `this.FIELD.delete/insert/update(` site, calls
`this.insert` / `this.update` / `this.delete`, is a query-options
erasure site, carries an `engine.ts#NAME` pointer, or holds a
system-context census row or a reader-test `via` site.
- **Helpers, under the cut-14 seat ruling `6432376812`.**
`resolveThenLowerWhere` and `relationSitesOf` are read by moved and
staying bodies alike; each gains `export` in place, byte for byte
otherwise, and the module imports them (and
`SECURITY_SERVICE_SOURCE_SLOT`, already exported) from `./engine.js`.
Nothing re-exports any of them from the package entry.
- **Imports.** `assertHavingResolvedTemporalTokensInRange`,
`relationFilterCapError` and the `RelationReplacement` type were read in
`engine.ts` only by moved bodies, so they leave `engine.ts`'s import
lists (both modules are still imported there for other names).
`RELATION_FILTER_ID_CAP` becomes a type-only specifier in `engine.ts`,
since its only remaining reader there is a `{@link}` in a docblock that
stays.
- **Load order (measured).** `engine.ts` imports the module right after
`./having-filter.js`, after every module the new one imports, so no
module is evaluated earlier than before. On the head bundles the `//
src/...` region order equals the base's with one line added, `//
src/engine-query-lowering.ts`, after `engine-validate.ts` (`index.mjs`
121 to 122 regions, `index.js` 122 to 123, `core.mjs` 110 to 111,
`core.js` 111 to 112). The external `import` statements (158 in
`index.mjs`, 140 in `core.mjs`) and `require(` calls are identical and
in the same order at base and head.
### Net lines
`engine.ts` goes from 22,170 to 22,131 lines, **net −39** (28 added, 67
removed). The module is 178 lines. The diff against `origin/main` is 273
changed lines over 2 files (+206 / −67).
### Readers of the moved lines
- No
`engine.ts#resolveWhereTokens|lowerRelationConditions|resolveSearchQueryableFields|resolveThenLowerWhere|relationSitesOf`
pointer exists anywhere outside `packages/objectql/src` (`git grep` on
`origin/main` `637cfc6736`: 0 hits), so no reader moves.
- `federated-injected-column-readers.test.ts` keys name none of the
moved bodies; the test passes. `check-system-context-census`: OK,
register unchanged. `check-tenant-audit-census`: census JSON equal at
base and head.
- **Read-seam census.** `check-durability-degradation-log-level --list`
at base and head: identical once line numbers are masked (167 lines).
- **Decision-letter count.** `check-adr-anchors`: **1,921**
decision-letter citations at base and at head. The moved bodies carry no
`[ADR-NNNN Dn]` letter.
## Why
#25522 splits `engine.ts` one seam at a time so that a change to one
area reads, reviews and conflicts as that area alone. This is the
largest free, contiguous seam left under the current series limits.
Nothing about what the engine does changes.
## Tests
No test is added and none is edited: the move is proved by identity, not
by new behaviour.
<details><summary>Public <code>.d.ts</code>: ruling
<code>6441032442</code> letter B (top-level reorder), with a positive
control</summary>
Built `@objectstack/objectql` at base `0a4b0fb223` and at the merged
head `0014e7332`. Four declaration files are raw byte-identical;
`index.d.ts` and `index.d.mts` differ by 180 raw-diff lines each.
Measured per variant: exporting either `resolveThenLowerWhere` or
`relationSitesOf` alone moves the `AggregatedColumnClass` and
`RELATION_FILTER_ID_CAP` declarations and reorders one import's
specifiers, which is the case letter B allows when the statement-level
normaliser closes it.
| file | raw sha256 base → head | raw-diff lines | statements (only base
/ only head) | normalised sha256 | declared surface | specifier sets |
|---|---|---|---|---|---|---|
| `core.d.ts` | `61512fd9…` = | 0 | 14 / 14 (0 / 0) | `3a827f7f…` EQUAL
| `0224b74e351a` (1) EQUAL | import 10, export 85 EQUAL |
| `core.d.mts` | `1753655e…` = | 0 | 14 / 14 (0 / 0) | `9c348846…` EQUAL
| `0224b74e351a` (1) EQUAL | import 10, export 85 EQUAL |
| `index.d.ts` | `1f93ea9f…` → `17310099…` | 180 | 137 / 137 (0 / 0) |
`8369d957…` EQUAL | `5ad12aeac594` (118) EQUAL | import 26, export 300
EQUAL |
| `index.d.mts` | `b28038a7…` → `576cb7ad…` | 180 | 137 / 137 (0 / 0) |
`aa35d3ef…` EQUAL | `5ad12aeac594` (118) EQUAL | import 26, export 300
EQUAL |
| `util-BMx8ShtN.d.ts` | `75d16412…` = | 0 | 187 / 187 (0 / 0) |
`17b34879…` EQUAL | `38c72db70306` (175) EQUAL | import 55, export 149
EQUAL |
| `util-BMx8ShtN.d.mts` | `75d16412…` = | 0 | 187 / 187 (0 / 0) |
`17b34879…` EQUAL | `38c72db70306` (175) EQUAL | import 55, export 149
EQUAL |
- No chunk is renamed (`util-BMx8ShtN` at both).
- **Normaliser disclosure.** The ruling's own `dtsnorm.mjs` lives in
another project's files and was not available in this container, so
`dtsnorm-cut20.mjs` re-implements ruling `6441032442` item 1(b) from the
ruling's text (statement multiset, declared-surface digest sorted per
top-level entry, import/export specifier sets). Its sha256 is
`2dd168976943dd62df853a20dd2e06fc41afea76aef34cb2d4e7fb54af8fa5c0`; the
positive control below shows it does see a surface change.
- **Positive control.** On `66d694e25` (whose declaration files are
byte-identical to the merged head's), `node
scripts/ablation-replace.mjs` dropped `private` from the
`lowerRelationConditions` stub and rebuilt. The chunk is renamed
`util-ljRTZG5W`; its normalised sha256 reads `4ca41d40…` against
`17b34879…` and its declared surface `21b34ba6d9a8` against
`38c72db70306`. The restore leg put the `engine.ts` blob back to
`fd1d10a8237a` (equal to `HEAD`), and the rebuild that followed compared
equal to the head build.
- The run-time export lists are equal: `index` 194 names and `core` 54,
ESM and CJS, and a digest over every export's name and function `.name`
is `c5c2f41286d9` at base and head, so no bundler same-name rename
happened.
- (1e) After the head build, the full `turbo run build` (116 of 116
tasks, the dependents' DTS builds included) and the `@objectstack/core`
and `@objectstack/objectql` typechecks ran: exit 0 each. (P2)
`packages/objectql/package.json` `exports` names `./dist/index.*` and
`./dist/core.*` only; (P3) `git grep -n -E 'objectql/dist' -- scripts
package.json`: 0 hits.
</details>
<details><summary>AST compare (move-only)</summary>
A one-off script (TypeScript compiler API; leaf tokens) on base
`engine.ts` against head `engine.ts` plus the module:
- The three moved bodies are **SAME** (parameters, return type, `async`,
body tokens, and every body line equal after one level of indent):
`resolveWhereTokens` 173 tokens / 20 lines, `lowerRelationConditions`
282 / 27, `resolveSearchQueryableFields` 135 / 14. Negative controls:
one changed token in a module copy reads DIFF, and a comment-only edit
fails the line rule.
- `class ObjectQL`: 333 of 333 members kept, in the same order; 330
byte-identical including leading trivia, and the 3 stubs keep docblock,
modifiers and signature identical.
- Top level: 237 of 242 base statements byte-identical. The other 5: the
two import lists that lose specifiers, `resolveThenLowerWhere` and
`relationSitesOf` each with `export` added and otherwise byte-identical,
and the class. The head adds one statement: the module import.
</details>
<details><summary>Late-binding probe (base and head
<code>dist</code>)</summary>
`zz-probe-cut20.mjs` (a one-off, not committed) loads the built
`ObjectQL` from each `dist/` and drives the three bodies with doubles
set on the instance after construction: `lowerRelationConditions` on a
nested relation condition, `null`, a plain condition, the 1,000-id cap
(it throws `INVALID_FILTER`) and with `find` replaced a second time;
`resolveWhereTokens` on `where`, with `resolveRelateThenLowerWhere`
replaced (the spy sees the call), on `having`, and on an empty AST;
`resolveSearchQueryableFields` with no context, with no slot, with the
security-service slot set after construction, replaced, throwing, and
set to a non-function. The 27 output lines are identical on base and
head (the construction log lines, which carry timestamps, set aside);
stderr is empty on both.
</details>
<details><summary>Suites</summary>
Under `scripts/pm/os-verify-lock.sh`:
- Full `turbo run build`: 116 of 116 tasks, exit 0.
- `typecheck` of `@objectstack/objectql` and `@objectstack/core`: exit 0
each.
- `@objectstack/objectql` vitest `--project local` on the merged head:
491 files, 9,252 tests passed, exit 0
(`engine-nested-relation-lowering.test.ts`,
`relation-condition-prescription-cap.test.ts`,
`engine-search-queryable-fields.test.ts`,
`engine-nested-object-door.test.ts`,
`query-expression-conformance.test.ts` and
`federated-injected-column-readers.test.ts` among them). The three files
in the two-minute check: 38 passed.
- `test:repo` projects for `objectql` (1 of 5) and `core` (6 of 94) that
read this package ran green locally; `Test Core` runs the rest in CI.
</details>
## Verification
The gate list is `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` on `0014e7332`, each run with its exit code
captured before any pipe, then reconciled with `--ran` (each line `CMD
:: exit N`).
- **Derived gates: 48 of 48 run, exit 0 each; `--ran`: 48 derived, 48
run, 0 NOT-MEASURED, 0 UNRUN** ("a DERIVED zero — all 48 recorded an
exit code and none of them is 3"). `check:dual-build-cjs-loads` ran
after the full build.
- **Hand gates, exit 0 each:** `pnpm check:authz-resolver`,
`check:error-code-casing`, `check:filter-alias-parity`,
`check:engine-double-contract`, `check:tenant-chokepoint`,
`check:adr-anchors`, `check:query-options-erasure`; `@objectstack/spec`
`check:api-surface`, `check:generated`, `check:liveness`; `node
scripts/check-tenant-audit-census.mjs`, `check-adr-symbol-anchors.mjs`,
`check-platform-checklist.mjs --changed-from origin/main`,
`check-commit-card-trailers.mjs --range origin/main..HEAD`,
`check-system-context-census.mjs`, `check-nul-bytes.mjs`; and eslint as
`pnpm lint` runs it (`--no-inline-config`) on `packages/objectql`.
## Acceptance notes
- **Serial order.** Nothing was edited before the claim `6512318712` and
its amendment `6512348857` named this branch.
- **Overlap.** All 13 open PRs were fetched just before opening this
(`git diff --name-only origin/main...pr/N`): none touches
`packages/objectql/src/engine*`. `git merge-tree` of this head with
`origin/main` `637cfc6736` is clean.
- **New host shape to look at.** The symbol-keyed getter for
`SECURITY_SERVICE_SOURCE_SLOT` is the first host member in the series
keyed by a symbol rather than a name; it is the one place this cut goes
beyond cuts 8 to 19's shape.
- **What stays, for the next cut.** `expandSearchOnAst` (84 body lines)
and `fillQueryAstDefaults` stay for their liveness pointers;
`resolveRelateThenLowerWhere`, `withResolvedWhere` and
`expandSearchOnOptions` do not pay for a stub. After this cut, no free
contiguous area in `engine.ts` pays more than −30 under the current
series limits.
- **Left as is.** A docblock in `engine.ts` still says `{@link
RELATION_FILTER_ID_CAP}`; it is kept byte-identical with the specifier
type-only. The moved bodies keep their indentation minus one level, as
moved, not re-formatted.
## Human Minimum
- [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic.
(Not touched.)
- [x] 2. Every name I added uses the casing for its kind
(`QueryLoweringHost`, `engine-query-lowering.ts`).
- [x] 3. No formatter ran; `pnpm lint` passes on the touched package.
- [x] 4. One issue, one branch off an up-to-date `main`, one pull
request.
- [x] 5. No publish-visible change, so `skip-changeset` (ruling
`6441032442` item 4: no changeset for a reorder); both declaration lines
are filled in above.
- [x] 6. `packages/spec` not touched.
- [x] 7. No hand edits to `content/docs/references/`,
`packages/*/CHANGELOG.md` or `content/docs/releases/`.
- [x] 8. Title, body and comments are in English, apart from the
maintainer quick-read block the project asks for.
- [x] The *Before Submitting* list in CONTRIBUTING.md is done.
`skip-changeset`: move-only inside `@objectstack/objectql`, with the
published declarations equal under the ruling's normaliser and no
behaviour change, so there is nothing for a release note to say.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01L6bhgWZYhVkTy8Yp9oDD11
---
_Generated by [Claude
Code](https://claude.ai/code/session_01L6bhgWZYhVkTy8Yp9oDD11)_
Co-authored-by: Claude <noreply@anthropic.com>
1 parent b13a1ed commit 04740b7
2 files changed
Lines changed: 206 additions & 67 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
66 | | - | |
67 | 66 | | |
68 | 67 | | |
69 | 68 | | |
| |||
77 | 76 | | |
78 | 77 | | |
79 | 78 | | |
80 | | - | |
81 | | - | |
| 79 | + | |
82 | 80 | | |
83 | | - | |
84 | 81 | | |
85 | 82 | | |
86 | 83 | | |
| |||
439 | 436 | | |
440 | 437 | | |
441 | 438 | | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
442 | 442 | | |
443 | 443 | | |
444 | 444 | | |
| |||
1414 | 1414 | | |
1415 | 1415 | | |
1416 | 1416 | | |
1417 | | - | |
| 1417 | + | |
1418 | 1418 | | |
1419 | 1419 | | |
1420 | 1420 | | |
| |||
1564 | 1564 | | |
1565 | 1565 | | |
1566 | 1566 | | |
1567 | | - | |
| 1567 | + | |
1568 | 1568 | | |
1569 | 1569 | | |
1570 | 1570 | | |
| |||
13224 | 13224 | | |
13225 | 13225 | | |
13226 | 13226 | | |
13227 | | - | |
13228 | | - | |
13229 | | - | |
13230 | | - | |
13231 | | - | |
13232 | | - | |
13233 | | - | |
13234 | | - | |
13235 | | - | |
13236 | | - | |
13237 | | - | |
13238 | | - | |
13239 | | - | |
13240 | | - | |
13241 | | - | |
13242 | | - | |
13243 | | - | |
13244 | | - | |
13245 | | - | |
13246 | | - | |
| 13227 | + | |
| 13228 | + | |
| 13229 | + | |
| 13230 | + | |
| 13231 | + | |
| 13232 | + | |
| 13233 | + | |
13247 | 13234 | | |
13248 | 13235 | | |
13249 | 13236 | | |
| |||
13308 | 13295 | | |
13309 | 13296 | | |
13310 | 13297 | | |
13311 | | - | |
13312 | | - | |
13313 | | - | |
13314 | | - | |
13315 | | - | |
13316 | | - | |
13317 | | - | |
13318 | | - | |
13319 | | - | |
13320 | | - | |
13321 | | - | |
13322 | | - | |
13323 | | - | |
13324 | | - | |
13325 | | - | |
13326 | | - | |
13327 | | - | |
13328 | | - | |
13329 | | - | |
13330 | | - | |
13331 | | - | |
13332 | | - | |
13333 | | - | |
13334 | | - | |
13335 | | - | |
13336 | | - | |
13337 | | - | |
| 13298 | + | |
| 13299 | + | |
| 13300 | + | |
| 13301 | + | |
| 13302 | + | |
| 13303 | + | |
| 13304 | + | |
| 13305 | + | |
| 13306 | + | |
13338 | 13307 | | |
13339 | 13308 | | |
13340 | 13309 | | |
| |||
13497 | 13466 | | |
13498 | 13467 | | |
13499 | 13468 | | |
13500 | | - | |
13501 | | - | |
13502 | | - | |
13503 | | - | |
13504 | | - | |
13505 | | - | |
13506 | | - | |
13507 | | - | |
13508 | | - | |
13509 | | - | |
13510 | | - | |
13511 | | - | |
13512 | | - | |
13513 | | - | |
| 13469 | + | |
| 13470 | + | |
| 13471 | + | |
| 13472 | + | |
| 13473 | + | |
| 13474 | + | |
13514 | 13475 | | |
13515 | 13476 | | |
13516 | 13477 | | |
| |||
0 commit comments