@navios/di 0.4.2 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +211 -1
- package/coverage/clover.xml +1912 -1277
- package/coverage/coverage-final.json +37 -28
- package/coverage/docs/examples/basic-usage.mts.html +1 -1
- package/coverage/docs/examples/factory-pattern.mts.html +1 -1
- package/coverage/docs/examples/index.html +1 -1
- package/coverage/docs/examples/injection-tokens.mts.html +1 -1
- package/coverage/docs/examples/request-scope-example.mts.html +1 -1
- package/coverage/docs/examples/service-lifecycle.mts.html +1 -1
- package/coverage/index.html +71 -41
- package/coverage/lib/_tsup-dts-rollup.d.mts.html +682 -43
- package/coverage/lib/index.d.mts.html +7 -4
- package/coverage/lib/index.html +5 -5
- package/coverage/lib/testing/index.d.mts.html +91 -0
- package/coverage/lib/testing/index.html +116 -0
- package/coverage/src/base-instance-holder-manager.mts.html +589 -0
- package/coverage/src/container.mts.html +257 -74
- package/coverage/src/decorators/factory.decorator.mts.html +1 -1
- package/coverage/src/decorators/index.html +1 -1
- package/coverage/src/decorators/index.mts.html +1 -1
- package/coverage/src/decorators/injectable.decorator.mts.html +20 -20
- package/coverage/src/enums/index.html +1 -1
- package/coverage/src/enums/index.mts.html +1 -1
- package/coverage/src/enums/injectable-scope.enum.mts.html +1 -1
- package/coverage/src/enums/injectable-type.enum.mts.html +1 -1
- package/coverage/src/errors/di-error.mts.html +292 -0
- package/coverage/src/errors/errors.enum.mts.html +30 -21
- package/coverage/src/errors/factory-not-found.mts.html +31 -22
- package/coverage/src/errors/factory-token-not-resolved.mts.html +29 -26
- package/coverage/src/errors/index.html +56 -41
- package/coverage/src/errors/index.mts.html +15 -9
- package/coverage/src/errors/instance-destroying.mts.html +31 -22
- package/coverage/src/errors/instance-expired.mts.html +31 -22
- package/coverage/src/errors/instance-not-found.mts.html +31 -22
- package/coverage/src/errors/unknown-error.mts.html +31 -43
- package/coverage/src/event-emitter.mts.html +14 -14
- package/coverage/src/factory-context.mts.html +1 -1
- package/coverage/src/index.html +121 -46
- package/coverage/src/index.mts.html +7 -4
- package/coverage/src/injection-token.mts.html +28 -28
- package/coverage/src/injector.mts.html +1 -1
- package/coverage/src/instance-resolver.mts.html +1762 -0
- package/coverage/src/interfaces/factory.interface.mts.html +1 -1
- package/coverage/src/interfaces/index.html +1 -1
- package/coverage/src/interfaces/index.mts.html +1 -1
- package/coverage/src/interfaces/on-service-destroy.interface.mts.html +1 -1
- package/coverage/src/interfaces/on-service-init.interface.mts.html +1 -1
- package/coverage/src/registry.mts.html +28 -28
- package/coverage/src/request-context-holder.mts.html +183 -102
- package/coverage/src/request-context-manager.mts.html +532 -0
- package/coverage/src/service-instantiator.mts.html +49 -49
- package/coverage/src/service-invalidator.mts.html +1372 -0
- package/coverage/src/service-locator-event-bus.mts.html +48 -48
- package/coverage/src/service-locator-instance-holder.mts.html +2 -14
- package/coverage/src/service-locator-manager.mts.html +71 -335
- package/coverage/src/service-locator.mts.html +240 -2328
- package/coverage/src/symbols/index.html +1 -1
- package/coverage/src/symbols/index.mts.html +1 -1
- package/coverage/src/symbols/injectable-token.mts.html +1 -1
- package/coverage/src/testing/index.html +131 -0
- package/coverage/src/testing/index.mts.html +88 -0
- package/coverage/src/testing/test-container.mts.html +445 -0
- package/coverage/src/token-processor.mts.html +607 -0
- package/coverage/src/utils/defer.mts.html +28 -214
- package/coverage/src/utils/get-injectable-token.mts.html +7 -7
- package/coverage/src/utils/get-injectors.mts.html +99 -99
- package/coverage/src/utils/index.html +15 -15
- package/coverage/src/utils/index.mts.html +4 -7
- package/coverage/src/utils/types.mts.html +1 -1
- package/docs/injectable.md +51 -11
- package/docs/scopes.md +63 -29
- package/lib/_tsup-dts-rollup.d.mts +376 -213
- package/lib/_tsup-dts-rollup.d.ts +376 -213
- package/lib/{chunk-3NLYPYBY.mjs → chunk-2M576LCC.mjs} +1024 -608
- package/lib/chunk-2M576LCC.mjs.map +1 -0
- package/lib/index.d.mts +6 -4
- package/lib/index.d.ts +6 -4
- package/lib/index.js +1189 -773
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +2 -2
- package/lib/testing/index.js +1261 -843
- package/lib/testing/index.js.map +1 -1
- package/lib/testing/index.mjs +1 -1
- package/package.json +4 -4
- package/src/__tests__/container.spec.mts +47 -13
- package/src/__tests__/errors.spec.mts +53 -27
- package/src/__tests__/injectable.spec.mts +73 -0
- package/src/__tests__/request-scope.spec.mts +0 -2
- package/src/__tests__/service-instantiator.spec.mts +1 -0
- package/src/__tests__/service-locator-manager.spec.mts +12 -82
- package/src/__tests__/service-locator.spec.mts +1009 -1
- package/src/__type-tests__/inject.spec-d.mts +30 -7
- package/src/__type-tests__/injectable.spec-d.mts +76 -37
- package/src/base-instance-holder-manager.mts +2 -9
- package/src/container.mts +61 -9
- package/src/decorators/injectable.decorator.mts +29 -5
- package/src/errors/di-error.mts +69 -0
- package/src/errors/index.mts +9 -7
- package/src/injection-token.mts +1 -0
- package/src/injector.mts +2 -0
- package/src/instance-resolver.mts +559 -0
- package/src/request-context-holder.mts +0 -2
- package/src/request-context-manager.mts +149 -0
- package/src/service-invalidator.mts +429 -0
- package/src/service-locator-event-bus.mts +1 -1
- package/src/service-locator-instance-holder.mts +0 -4
- package/src/service-locator-manager.mts +10 -40
- package/src/service-locator.mts +86 -782
- package/src/token-processor.mts +174 -0
- package/src/utils/get-injectors.mts +161 -24
- package/src/utils/index.mts +0 -1
- package/src/utils/types.mts +12 -8
- package/lib/chunk-3NLYPYBY.mjs.map +0 -1
- package/src/__tests__/defer.spec.mts +0 -166
- package/src/errors/errors.enum.mts +0 -8
- package/src/errors/factory-not-found.mts +0 -8
- package/src/errors/factory-token-not-resolved.mts +0 -10
- package/src/errors/instance-destroying.mts +0 -8
- package/src/errors/instance-expired.mts +0 -8
- package/src/errors/instance-not-found.mts +0 -8
- package/src/errors/unknown-error.mts +0 -15
- package/src/utils/defer.mts +0 -73
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">88.88% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>136/153</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">96.29% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>26/27</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">85% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>17/20</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">88.88% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>136/153</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -309,703 +309,7 @@
|
|
|
309
309
|
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
310
|
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
311
|
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
-
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
-
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
-
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
-
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
-
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
-
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
-
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
-
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
-
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
-
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
-
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
-
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
-
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
-
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
-
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
-
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
-
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
-
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
-
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
-
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
-
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
-
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
-
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
-
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
-
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
-
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
-
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
-
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
-
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
-
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
-
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
-
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
-
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
-
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
-
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
-
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
-
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
-
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
-
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
-
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
-
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
-
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
-
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
-
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
-
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
-
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
-
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
-
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
-
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
-
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
-
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
-
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
-
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
-
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
-
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
-
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
-
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
-
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
-
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
-
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
-
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
-
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
-
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
-
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
-
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
-
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
-
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
-
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
-
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
-
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
-
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
-
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
-
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
-
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
-
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
-
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
-
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
-
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
-
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
-
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
-
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
-
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
-
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
-
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
-
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
-
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
-
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
-
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
-
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
-
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
-
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
-
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
-
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
-
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
-
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
-
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
-
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
-
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
-
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
-
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
-
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
-
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
-
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
-
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
-
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
-
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
-
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
-
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
-
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
-
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
-
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
-
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
-
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
-
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
-
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
-
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
-
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
-
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
-
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
-
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
-
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
-
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
-
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
-
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
-
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
-
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
-
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
-
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
-
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
-
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
-
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
-
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
-
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
-
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
-
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
-
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
-
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
-
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
-
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
-
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
-
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
-
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
-
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
-
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
-
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
-
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
-
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
-
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
-
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
-
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
-
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
-
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
-
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
-
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
-
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
-
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
-
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
-
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
-
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
-
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
-
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
-
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
-
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
-
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
-
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
-
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
-
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
-
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
-
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
-
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
-
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
-
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
-
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
-
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
-
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
-
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
-
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
-
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
-
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
-
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
-
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
-
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
-
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
-
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
-
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
-
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
-
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
-
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
-
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
-
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
-
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
-
<a name='L440'></a><a href='#L440'>440</a>
|
|
506
|
-
<a name='L441'></a><a href='#L441'>441</a>
|
|
507
|
-
<a name='L442'></a><a href='#L442'>442</a>
|
|
508
|
-
<a name='L443'></a><a href='#L443'>443</a>
|
|
509
|
-
<a name='L444'></a><a href='#L444'>444</a>
|
|
510
|
-
<a name='L445'></a><a href='#L445'>445</a>
|
|
511
|
-
<a name='L446'></a><a href='#L446'>446</a>
|
|
512
|
-
<a name='L447'></a><a href='#L447'>447</a>
|
|
513
|
-
<a name='L448'></a><a href='#L448'>448</a>
|
|
514
|
-
<a name='L449'></a><a href='#L449'>449</a>
|
|
515
|
-
<a name='L450'></a><a href='#L450'>450</a>
|
|
516
|
-
<a name='L451'></a><a href='#L451'>451</a>
|
|
517
|
-
<a name='L452'></a><a href='#L452'>452</a>
|
|
518
|
-
<a name='L453'></a><a href='#L453'>453</a>
|
|
519
|
-
<a name='L454'></a><a href='#L454'>454</a>
|
|
520
|
-
<a name='L455'></a><a href='#L455'>455</a>
|
|
521
|
-
<a name='L456'></a><a href='#L456'>456</a>
|
|
522
|
-
<a name='L457'></a><a href='#L457'>457</a>
|
|
523
|
-
<a name='L458'></a><a href='#L458'>458</a>
|
|
524
|
-
<a name='L459'></a><a href='#L459'>459</a>
|
|
525
|
-
<a name='L460'></a><a href='#L460'>460</a>
|
|
526
|
-
<a name='L461'></a><a href='#L461'>461</a>
|
|
527
|
-
<a name='L462'></a><a href='#L462'>462</a>
|
|
528
|
-
<a name='L463'></a><a href='#L463'>463</a>
|
|
529
|
-
<a name='L464'></a><a href='#L464'>464</a>
|
|
530
|
-
<a name='L465'></a><a href='#L465'>465</a>
|
|
531
|
-
<a name='L466'></a><a href='#L466'>466</a>
|
|
532
|
-
<a name='L467'></a><a href='#L467'>467</a>
|
|
533
|
-
<a name='L468'></a><a href='#L468'>468</a>
|
|
534
|
-
<a name='L469'></a><a href='#L469'>469</a>
|
|
535
|
-
<a name='L470'></a><a href='#L470'>470</a>
|
|
536
|
-
<a name='L471'></a><a href='#L471'>471</a>
|
|
537
|
-
<a name='L472'></a><a href='#L472'>472</a>
|
|
538
|
-
<a name='L473'></a><a href='#L473'>473</a>
|
|
539
|
-
<a name='L474'></a><a href='#L474'>474</a>
|
|
540
|
-
<a name='L475'></a><a href='#L475'>475</a>
|
|
541
|
-
<a name='L476'></a><a href='#L476'>476</a>
|
|
542
|
-
<a name='L477'></a><a href='#L477'>477</a>
|
|
543
|
-
<a name='L478'></a><a href='#L478'>478</a>
|
|
544
|
-
<a name='L479'></a><a href='#L479'>479</a>
|
|
545
|
-
<a name='L480'></a><a href='#L480'>480</a>
|
|
546
|
-
<a name='L481'></a><a href='#L481'>481</a>
|
|
547
|
-
<a name='L482'></a><a href='#L482'>482</a>
|
|
548
|
-
<a name='L483'></a><a href='#L483'>483</a>
|
|
549
|
-
<a name='L484'></a><a href='#L484'>484</a>
|
|
550
|
-
<a name='L485'></a><a href='#L485'>485</a>
|
|
551
|
-
<a name='L486'></a><a href='#L486'>486</a>
|
|
552
|
-
<a name='L487'></a><a href='#L487'>487</a>
|
|
553
|
-
<a name='L488'></a><a href='#L488'>488</a>
|
|
554
|
-
<a name='L489'></a><a href='#L489'>489</a>
|
|
555
|
-
<a name='L490'></a><a href='#L490'>490</a>
|
|
556
|
-
<a name='L491'></a><a href='#L491'>491</a>
|
|
557
|
-
<a name='L492'></a><a href='#L492'>492</a>
|
|
558
|
-
<a name='L493'></a><a href='#L493'>493</a>
|
|
559
|
-
<a name='L494'></a><a href='#L494'>494</a>
|
|
560
|
-
<a name='L495'></a><a href='#L495'>495</a>
|
|
561
|
-
<a name='L496'></a><a href='#L496'>496</a>
|
|
562
|
-
<a name='L497'></a><a href='#L497'>497</a>
|
|
563
|
-
<a name='L498'></a><a href='#L498'>498</a>
|
|
564
|
-
<a name='L499'></a><a href='#L499'>499</a>
|
|
565
|
-
<a name='L500'></a><a href='#L500'>500</a>
|
|
566
|
-
<a name='L501'></a><a href='#L501'>501</a>
|
|
567
|
-
<a name='L502'></a><a href='#L502'>502</a>
|
|
568
|
-
<a name='L503'></a><a href='#L503'>503</a>
|
|
569
|
-
<a name='L504'></a><a href='#L504'>504</a>
|
|
570
|
-
<a name='L505'></a><a href='#L505'>505</a>
|
|
571
|
-
<a name='L506'></a><a href='#L506'>506</a>
|
|
572
|
-
<a name='L507'></a><a href='#L507'>507</a>
|
|
573
|
-
<a name='L508'></a><a href='#L508'>508</a>
|
|
574
|
-
<a name='L509'></a><a href='#L509'>509</a>
|
|
575
|
-
<a name='L510'></a><a href='#L510'>510</a>
|
|
576
|
-
<a name='L511'></a><a href='#L511'>511</a>
|
|
577
|
-
<a name='L512'></a><a href='#L512'>512</a>
|
|
578
|
-
<a name='L513'></a><a href='#L513'>513</a>
|
|
579
|
-
<a name='L514'></a><a href='#L514'>514</a>
|
|
580
|
-
<a name='L515'></a><a href='#L515'>515</a>
|
|
581
|
-
<a name='L516'></a><a href='#L516'>516</a>
|
|
582
|
-
<a name='L517'></a><a href='#L517'>517</a>
|
|
583
|
-
<a name='L518'></a><a href='#L518'>518</a>
|
|
584
|
-
<a name='L519'></a><a href='#L519'>519</a>
|
|
585
|
-
<a name='L520'></a><a href='#L520'>520</a>
|
|
586
|
-
<a name='L521'></a><a href='#L521'>521</a>
|
|
587
|
-
<a name='L522'></a><a href='#L522'>522</a>
|
|
588
|
-
<a name='L523'></a><a href='#L523'>523</a>
|
|
589
|
-
<a name='L524'></a><a href='#L524'>524</a>
|
|
590
|
-
<a name='L525'></a><a href='#L525'>525</a>
|
|
591
|
-
<a name='L526'></a><a href='#L526'>526</a>
|
|
592
|
-
<a name='L527'></a><a href='#L527'>527</a>
|
|
593
|
-
<a name='L528'></a><a href='#L528'>528</a>
|
|
594
|
-
<a name='L529'></a><a href='#L529'>529</a>
|
|
595
|
-
<a name='L530'></a><a href='#L530'>530</a>
|
|
596
|
-
<a name='L531'></a><a href='#L531'>531</a>
|
|
597
|
-
<a name='L532'></a><a href='#L532'>532</a>
|
|
598
|
-
<a name='L533'></a><a href='#L533'>533</a>
|
|
599
|
-
<a name='L534'></a><a href='#L534'>534</a>
|
|
600
|
-
<a name='L535'></a><a href='#L535'>535</a>
|
|
601
|
-
<a name='L536'></a><a href='#L536'>536</a>
|
|
602
|
-
<a name='L537'></a><a href='#L537'>537</a>
|
|
603
|
-
<a name='L538'></a><a href='#L538'>538</a>
|
|
604
|
-
<a name='L539'></a><a href='#L539'>539</a>
|
|
605
|
-
<a name='L540'></a><a href='#L540'>540</a>
|
|
606
|
-
<a name='L541'></a><a href='#L541'>541</a>
|
|
607
|
-
<a name='L542'></a><a href='#L542'>542</a>
|
|
608
|
-
<a name='L543'></a><a href='#L543'>543</a>
|
|
609
|
-
<a name='L544'></a><a href='#L544'>544</a>
|
|
610
|
-
<a name='L545'></a><a href='#L545'>545</a>
|
|
611
|
-
<a name='L546'></a><a href='#L546'>546</a>
|
|
612
|
-
<a name='L547'></a><a href='#L547'>547</a>
|
|
613
|
-
<a name='L548'></a><a href='#L548'>548</a>
|
|
614
|
-
<a name='L549'></a><a href='#L549'>549</a>
|
|
615
|
-
<a name='L550'></a><a href='#L550'>550</a>
|
|
616
|
-
<a name='L551'></a><a href='#L551'>551</a>
|
|
617
|
-
<a name='L552'></a><a href='#L552'>552</a>
|
|
618
|
-
<a name='L553'></a><a href='#L553'>553</a>
|
|
619
|
-
<a name='L554'></a><a href='#L554'>554</a>
|
|
620
|
-
<a name='L555'></a><a href='#L555'>555</a>
|
|
621
|
-
<a name='L556'></a><a href='#L556'>556</a>
|
|
622
|
-
<a name='L557'></a><a href='#L557'>557</a>
|
|
623
|
-
<a name='L558'></a><a href='#L558'>558</a>
|
|
624
|
-
<a name='L559'></a><a href='#L559'>559</a>
|
|
625
|
-
<a name='L560'></a><a href='#L560'>560</a>
|
|
626
|
-
<a name='L561'></a><a href='#L561'>561</a>
|
|
627
|
-
<a name='L562'></a><a href='#L562'>562</a>
|
|
628
|
-
<a name='L563'></a><a href='#L563'>563</a>
|
|
629
|
-
<a name='L564'></a><a href='#L564'>564</a>
|
|
630
|
-
<a name='L565'></a><a href='#L565'>565</a>
|
|
631
|
-
<a name='L566'></a><a href='#L566'>566</a>
|
|
632
|
-
<a name='L567'></a><a href='#L567'>567</a>
|
|
633
|
-
<a name='L568'></a><a href='#L568'>568</a>
|
|
634
|
-
<a name='L569'></a><a href='#L569'>569</a>
|
|
635
|
-
<a name='L570'></a><a href='#L570'>570</a>
|
|
636
|
-
<a name='L571'></a><a href='#L571'>571</a>
|
|
637
|
-
<a name='L572'></a><a href='#L572'>572</a>
|
|
638
|
-
<a name='L573'></a><a href='#L573'>573</a>
|
|
639
|
-
<a name='L574'></a><a href='#L574'>574</a>
|
|
640
|
-
<a name='L575'></a><a href='#L575'>575</a>
|
|
641
|
-
<a name='L576'></a><a href='#L576'>576</a>
|
|
642
|
-
<a name='L577'></a><a href='#L577'>577</a>
|
|
643
|
-
<a name='L578'></a><a href='#L578'>578</a>
|
|
644
|
-
<a name='L579'></a><a href='#L579'>579</a>
|
|
645
|
-
<a name='L580'></a><a href='#L580'>580</a>
|
|
646
|
-
<a name='L581'></a><a href='#L581'>581</a>
|
|
647
|
-
<a name='L582'></a><a href='#L582'>582</a>
|
|
648
|
-
<a name='L583'></a><a href='#L583'>583</a>
|
|
649
|
-
<a name='L584'></a><a href='#L584'>584</a>
|
|
650
|
-
<a name='L585'></a><a href='#L585'>585</a>
|
|
651
|
-
<a name='L586'></a><a href='#L586'>586</a>
|
|
652
|
-
<a name='L587'></a><a href='#L587'>587</a>
|
|
653
|
-
<a name='L588'></a><a href='#L588'>588</a>
|
|
654
|
-
<a name='L589'></a><a href='#L589'>589</a>
|
|
655
|
-
<a name='L590'></a><a href='#L590'>590</a>
|
|
656
|
-
<a name='L591'></a><a href='#L591'>591</a>
|
|
657
|
-
<a name='L592'></a><a href='#L592'>592</a>
|
|
658
|
-
<a name='L593'></a><a href='#L593'>593</a>
|
|
659
|
-
<a name='L594'></a><a href='#L594'>594</a>
|
|
660
|
-
<a name='L595'></a><a href='#L595'>595</a>
|
|
661
|
-
<a name='L596'></a><a href='#L596'>596</a>
|
|
662
|
-
<a name='L597'></a><a href='#L597'>597</a>
|
|
663
|
-
<a name='L598'></a><a href='#L598'>598</a>
|
|
664
|
-
<a name='L599'></a><a href='#L599'>599</a>
|
|
665
|
-
<a name='L600'></a><a href='#L600'>600</a>
|
|
666
|
-
<a name='L601'></a><a href='#L601'>601</a>
|
|
667
|
-
<a name='L602'></a><a href='#L602'>602</a>
|
|
668
|
-
<a name='L603'></a><a href='#L603'>603</a>
|
|
669
|
-
<a name='L604'></a><a href='#L604'>604</a>
|
|
670
|
-
<a name='L605'></a><a href='#L605'>605</a>
|
|
671
|
-
<a name='L606'></a><a href='#L606'>606</a>
|
|
672
|
-
<a name='L607'></a><a href='#L607'>607</a>
|
|
673
|
-
<a name='L608'></a><a href='#L608'>608</a>
|
|
674
|
-
<a name='L609'></a><a href='#L609'>609</a>
|
|
675
|
-
<a name='L610'></a><a href='#L610'>610</a>
|
|
676
|
-
<a name='L611'></a><a href='#L611'>611</a>
|
|
677
|
-
<a name='L612'></a><a href='#L612'>612</a>
|
|
678
|
-
<a name='L613'></a><a href='#L613'>613</a>
|
|
679
|
-
<a name='L614'></a><a href='#L614'>614</a>
|
|
680
|
-
<a name='L615'></a><a href='#L615'>615</a>
|
|
681
|
-
<a name='L616'></a><a href='#L616'>616</a>
|
|
682
|
-
<a name='L617'></a><a href='#L617'>617</a>
|
|
683
|
-
<a name='L618'></a><a href='#L618'>618</a>
|
|
684
|
-
<a name='L619'></a><a href='#L619'>619</a>
|
|
685
|
-
<a name='L620'></a><a href='#L620'>620</a>
|
|
686
|
-
<a name='L621'></a><a href='#L621'>621</a>
|
|
687
|
-
<a name='L622'></a><a href='#L622'>622</a>
|
|
688
|
-
<a name='L623'></a><a href='#L623'>623</a>
|
|
689
|
-
<a name='L624'></a><a href='#L624'>624</a>
|
|
690
|
-
<a name='L625'></a><a href='#L625'>625</a>
|
|
691
|
-
<a name='L626'></a><a href='#L626'>626</a>
|
|
692
|
-
<a name='L627'></a><a href='#L627'>627</a>
|
|
693
|
-
<a name='L628'></a><a href='#L628'>628</a>
|
|
694
|
-
<a name='L629'></a><a href='#L629'>629</a>
|
|
695
|
-
<a name='L630'></a><a href='#L630'>630</a>
|
|
696
|
-
<a name='L631'></a><a href='#L631'>631</a>
|
|
697
|
-
<a name='L632'></a><a href='#L632'>632</a>
|
|
698
|
-
<a name='L633'></a><a href='#L633'>633</a>
|
|
699
|
-
<a name='L634'></a><a href='#L634'>634</a>
|
|
700
|
-
<a name='L635'></a><a href='#L635'>635</a>
|
|
701
|
-
<a name='L636'></a><a href='#L636'>636</a>
|
|
702
|
-
<a name='L637'></a><a href='#L637'>637</a>
|
|
703
|
-
<a name='L638'></a><a href='#L638'>638</a>
|
|
704
|
-
<a name='L639'></a><a href='#L639'>639</a>
|
|
705
|
-
<a name='L640'></a><a href='#L640'>640</a>
|
|
706
|
-
<a name='L641'></a><a href='#L641'>641</a>
|
|
707
|
-
<a name='L642'></a><a href='#L642'>642</a>
|
|
708
|
-
<a name='L643'></a><a href='#L643'>643</a>
|
|
709
|
-
<a name='L644'></a><a href='#L644'>644</a>
|
|
710
|
-
<a name='L645'></a><a href='#L645'>645</a>
|
|
711
|
-
<a name='L646'></a><a href='#L646'>646</a>
|
|
712
|
-
<a name='L647'></a><a href='#L647'>647</a>
|
|
713
|
-
<a name='L648'></a><a href='#L648'>648</a>
|
|
714
|
-
<a name='L649'></a><a href='#L649'>649</a>
|
|
715
|
-
<a name='L650'></a><a href='#L650'>650</a>
|
|
716
|
-
<a name='L651'></a><a href='#L651'>651</a>
|
|
717
|
-
<a name='L652'></a><a href='#L652'>652</a>
|
|
718
|
-
<a name='L653'></a><a href='#L653'>653</a>
|
|
719
|
-
<a name='L654'></a><a href='#L654'>654</a>
|
|
720
|
-
<a name='L655'></a><a href='#L655'>655</a>
|
|
721
|
-
<a name='L656'></a><a href='#L656'>656</a>
|
|
722
|
-
<a name='L657'></a><a href='#L657'>657</a>
|
|
723
|
-
<a name='L658'></a><a href='#L658'>658</a>
|
|
724
|
-
<a name='L659'></a><a href='#L659'>659</a>
|
|
725
|
-
<a name='L660'></a><a href='#L660'>660</a>
|
|
726
|
-
<a name='L661'></a><a href='#L661'>661</a>
|
|
727
|
-
<a name='L662'></a><a href='#L662'>662</a>
|
|
728
|
-
<a name='L663'></a><a href='#L663'>663</a>
|
|
729
|
-
<a name='L664'></a><a href='#L664'>664</a>
|
|
730
|
-
<a name='L665'></a><a href='#L665'>665</a>
|
|
731
|
-
<a name='L666'></a><a href='#L666'>666</a>
|
|
732
|
-
<a name='L667'></a><a href='#L667'>667</a>
|
|
733
|
-
<a name='L668'></a><a href='#L668'>668</a>
|
|
734
|
-
<a name='L669'></a><a href='#L669'>669</a>
|
|
735
|
-
<a name='L670'></a><a href='#L670'>670</a>
|
|
736
|
-
<a name='L671'></a><a href='#L671'>671</a>
|
|
737
|
-
<a name='L672'></a><a href='#L672'>672</a>
|
|
738
|
-
<a name='L673'></a><a href='#L673'>673</a>
|
|
739
|
-
<a name='L674'></a><a href='#L674'>674</a>
|
|
740
|
-
<a name='L675'></a><a href='#L675'>675</a>
|
|
741
|
-
<a name='L676'></a><a href='#L676'>676</a>
|
|
742
|
-
<a name='L677'></a><a href='#L677'>677</a>
|
|
743
|
-
<a name='L678'></a><a href='#L678'>678</a>
|
|
744
|
-
<a name='L679'></a><a href='#L679'>679</a>
|
|
745
|
-
<a name='L680'></a><a href='#L680'>680</a>
|
|
746
|
-
<a name='L681'></a><a href='#L681'>681</a>
|
|
747
|
-
<a name='L682'></a><a href='#L682'>682</a>
|
|
748
|
-
<a name='L683'></a><a href='#L683'>683</a>
|
|
749
|
-
<a name='L684'></a><a href='#L684'>684</a>
|
|
750
|
-
<a name='L685'></a><a href='#L685'>685</a>
|
|
751
|
-
<a name='L686'></a><a href='#L686'>686</a>
|
|
752
|
-
<a name='L687'></a><a href='#L687'>687</a>
|
|
753
|
-
<a name='L688'></a><a href='#L688'>688</a>
|
|
754
|
-
<a name='L689'></a><a href='#L689'>689</a>
|
|
755
|
-
<a name='L690'></a><a href='#L690'>690</a>
|
|
756
|
-
<a name='L691'></a><a href='#L691'>691</a>
|
|
757
|
-
<a name='L692'></a><a href='#L692'>692</a>
|
|
758
|
-
<a name='L693'></a><a href='#L693'>693</a>
|
|
759
|
-
<a name='L694'></a><a href='#L694'>694</a>
|
|
760
|
-
<a name='L695'></a><a href='#L695'>695</a>
|
|
761
|
-
<a name='L696'></a><a href='#L696'>696</a>
|
|
762
|
-
<a name='L697'></a><a href='#L697'>697</a>
|
|
763
|
-
<a name='L698'></a><a href='#L698'>698</a>
|
|
764
|
-
<a name='L699'></a><a href='#L699'>699</a>
|
|
765
|
-
<a name='L700'></a><a href='#L700'>700</a>
|
|
766
|
-
<a name='L701'></a><a href='#L701'>701</a>
|
|
767
|
-
<a name='L702'></a><a href='#L702'>702</a>
|
|
768
|
-
<a name='L703'></a><a href='#L703'>703</a>
|
|
769
|
-
<a name='L704'></a><a href='#L704'>704</a>
|
|
770
|
-
<a name='L705'></a><a href='#L705'>705</a>
|
|
771
|
-
<a name='L706'></a><a href='#L706'>706</a>
|
|
772
|
-
<a name='L707'></a><a href='#L707'>707</a>
|
|
773
|
-
<a name='L708'></a><a href='#L708'>708</a>
|
|
774
|
-
<a name='L709'></a><a href='#L709'>709</a>
|
|
775
|
-
<a name='L710'></a><a href='#L710'>710</a>
|
|
776
|
-
<a name='L711'></a><a href='#L711'>711</a>
|
|
777
|
-
<a name='L712'></a><a href='#L712'>712</a>
|
|
778
|
-
<a name='L713'></a><a href='#L713'>713</a>
|
|
779
|
-
<a name='L714'></a><a href='#L714'>714</a>
|
|
780
|
-
<a name='L715'></a><a href='#L715'>715</a>
|
|
781
|
-
<a name='L716'></a><a href='#L716'>716</a>
|
|
782
|
-
<a name='L717'></a><a href='#L717'>717</a>
|
|
783
|
-
<a name='L718'></a><a href='#L718'>718</a>
|
|
784
|
-
<a name='L719'></a><a href='#L719'>719</a>
|
|
785
|
-
<a name='L720'></a><a href='#L720'>720</a>
|
|
786
|
-
<a name='L721'></a><a href='#L721'>721</a>
|
|
787
|
-
<a name='L722'></a><a href='#L722'>722</a>
|
|
788
|
-
<a name='L723'></a><a href='#L723'>723</a>
|
|
789
|
-
<a name='L724'></a><a href='#L724'>724</a>
|
|
790
|
-
<a name='L725'></a><a href='#L725'>725</a>
|
|
791
|
-
<a name='L726'></a><a href='#L726'>726</a>
|
|
792
|
-
<a name='L727'></a><a href='#L727'>727</a>
|
|
793
|
-
<a name='L728'></a><a href='#L728'>728</a>
|
|
794
|
-
<a name='L729'></a><a href='#L729'>729</a>
|
|
795
|
-
<a name='L730'></a><a href='#L730'>730</a>
|
|
796
|
-
<a name='L731'></a><a href='#L731'>731</a>
|
|
797
|
-
<a name='L732'></a><a href='#L732'>732</a>
|
|
798
|
-
<a name='L733'></a><a href='#L733'>733</a>
|
|
799
|
-
<a name='L734'></a><a href='#L734'>734</a>
|
|
800
|
-
<a name='L735'></a><a href='#L735'>735</a>
|
|
801
|
-
<a name='L736'></a><a href='#L736'>736</a>
|
|
802
|
-
<a name='L737'></a><a href='#L737'>737</a>
|
|
803
|
-
<a name='L738'></a><a href='#L738'>738</a>
|
|
804
|
-
<a name='L739'></a><a href='#L739'>739</a>
|
|
805
|
-
<a name='L740'></a><a href='#L740'>740</a>
|
|
806
|
-
<a name='L741'></a><a href='#L741'>741</a>
|
|
807
|
-
<a name='L742'></a><a href='#L742'>742</a>
|
|
808
|
-
<a name='L743'></a><a href='#L743'>743</a>
|
|
809
|
-
<a name='L744'></a><a href='#L744'>744</a>
|
|
810
|
-
<a name='L745'></a><a href='#L745'>745</a>
|
|
811
|
-
<a name='L746'></a><a href='#L746'>746</a>
|
|
812
|
-
<a name='L747'></a><a href='#L747'>747</a>
|
|
813
|
-
<a name='L748'></a><a href='#L748'>748</a>
|
|
814
|
-
<a name='L749'></a><a href='#L749'>749</a>
|
|
815
|
-
<a name='L750'></a><a href='#L750'>750</a>
|
|
816
|
-
<a name='L751'></a><a href='#L751'>751</a>
|
|
817
|
-
<a name='L752'></a><a href='#L752'>752</a>
|
|
818
|
-
<a name='L753'></a><a href='#L753'>753</a>
|
|
819
|
-
<a name='L754'></a><a href='#L754'>754</a>
|
|
820
|
-
<a name='L755'></a><a href='#L755'>755</a>
|
|
821
|
-
<a name='L756'></a><a href='#L756'>756</a>
|
|
822
|
-
<a name='L757'></a><a href='#L757'>757</a>
|
|
823
|
-
<a name='L758'></a><a href='#L758'>758</a>
|
|
824
|
-
<a name='L759'></a><a href='#L759'>759</a>
|
|
825
|
-
<a name='L760'></a><a href='#L760'>760</a>
|
|
826
|
-
<a name='L761'></a><a href='#L761'>761</a>
|
|
827
|
-
<a name='L762'></a><a href='#L762'>762</a>
|
|
828
|
-
<a name='L763'></a><a href='#L763'>763</a>
|
|
829
|
-
<a name='L764'></a><a href='#L764'>764</a>
|
|
830
|
-
<a name='L765'></a><a href='#L765'>765</a>
|
|
831
|
-
<a name='L766'></a><a href='#L766'>766</a>
|
|
832
|
-
<a name='L767'></a><a href='#L767'>767</a>
|
|
833
|
-
<a name='L768'></a><a href='#L768'>768</a>
|
|
834
|
-
<a name='L769'></a><a href='#L769'>769</a>
|
|
835
|
-
<a name='L770'></a><a href='#L770'>770</a>
|
|
836
|
-
<a name='L771'></a><a href='#L771'>771</a>
|
|
837
|
-
<a name='L772'></a><a href='#L772'>772</a>
|
|
838
|
-
<a name='L773'></a><a href='#L773'>773</a>
|
|
839
|
-
<a name='L774'></a><a href='#L774'>774</a>
|
|
840
|
-
<a name='L775'></a><a href='#L775'>775</a>
|
|
841
|
-
<a name='L776'></a><a href='#L776'>776</a>
|
|
842
|
-
<a name='L777'></a><a href='#L777'>777</a>
|
|
843
|
-
<a name='L778'></a><a href='#L778'>778</a>
|
|
844
|
-
<a name='L779'></a><a href='#L779'>779</a>
|
|
845
|
-
<a name='L780'></a><a href='#L780'>780</a>
|
|
846
|
-
<a name='L781'></a><a href='#L781'>781</a>
|
|
847
|
-
<a name='L782'></a><a href='#L782'>782</a>
|
|
848
|
-
<a name='L783'></a><a href='#L783'>783</a>
|
|
849
|
-
<a name='L784'></a><a href='#L784'>784</a>
|
|
850
|
-
<a name='L785'></a><a href='#L785'>785</a>
|
|
851
|
-
<a name='L786'></a><a href='#L786'>786</a>
|
|
852
|
-
<a name='L787'></a><a href='#L787'>787</a>
|
|
853
|
-
<a name='L788'></a><a href='#L788'>788</a>
|
|
854
|
-
<a name='L789'></a><a href='#L789'>789</a>
|
|
855
|
-
<a name='L790'></a><a href='#L790'>790</a>
|
|
856
|
-
<a name='L791'></a><a href='#L791'>791</a>
|
|
857
|
-
<a name='L792'></a><a href='#L792'>792</a>
|
|
858
|
-
<a name='L793'></a><a href='#L793'>793</a>
|
|
859
|
-
<a name='L794'></a><a href='#L794'>794</a>
|
|
860
|
-
<a name='L795'></a><a href='#L795'>795</a>
|
|
861
|
-
<a name='L796'></a><a href='#L796'>796</a>
|
|
862
|
-
<a name='L797'></a><a href='#L797'>797</a>
|
|
863
|
-
<a name='L798'></a><a href='#L798'>798</a>
|
|
864
|
-
<a name='L799'></a><a href='#L799'>799</a>
|
|
865
|
-
<a name='L800'></a><a href='#L800'>800</a>
|
|
866
|
-
<a name='L801'></a><a href='#L801'>801</a>
|
|
867
|
-
<a name='L802'></a><a href='#L802'>802</a>
|
|
868
|
-
<a name='L803'></a><a href='#L803'>803</a>
|
|
869
|
-
<a name='L804'></a><a href='#L804'>804</a>
|
|
870
|
-
<a name='L805'></a><a href='#L805'>805</a>
|
|
871
|
-
<a name='L806'></a><a href='#L806'>806</a>
|
|
872
|
-
<a name='L807'></a><a href='#L807'>807</a>
|
|
873
|
-
<a name='L808'></a><a href='#L808'>808</a>
|
|
874
|
-
<a name='L809'></a><a href='#L809'>809</a>
|
|
875
|
-
<a name='L810'></a><a href='#L810'>810</a>
|
|
876
|
-
<a name='L811'></a><a href='#L811'>811</a>
|
|
877
|
-
<a name='L812'></a><a href='#L812'>812</a>
|
|
878
|
-
<a name='L813'></a><a href='#L813'>813</a>
|
|
879
|
-
<a name='L814'></a><a href='#L814'>814</a>
|
|
880
|
-
<a name='L815'></a><a href='#L815'>815</a>
|
|
881
|
-
<a name='L816'></a><a href='#L816'>816</a>
|
|
882
|
-
<a name='L817'></a><a href='#L817'>817</a>
|
|
883
|
-
<a name='L818'></a><a href='#L818'>818</a>
|
|
884
|
-
<a name='L819'></a><a href='#L819'>819</a>
|
|
885
|
-
<a name='L820'></a><a href='#L820'>820</a>
|
|
886
|
-
<a name='L821'></a><a href='#L821'>821</a>
|
|
887
|
-
<a name='L822'></a><a href='#L822'>822</a>
|
|
888
|
-
<a name='L823'></a><a href='#L823'>823</a>
|
|
889
|
-
<a name='L824'></a><a href='#L824'>824</a>
|
|
890
|
-
<a name='L825'></a><a href='#L825'>825</a>
|
|
891
|
-
<a name='L826'></a><a href='#L826'>826</a>
|
|
892
|
-
<a name='L827'></a><a href='#L827'>827</a>
|
|
893
|
-
<a name='L828'></a><a href='#L828'>828</a>
|
|
894
|
-
<a name='L829'></a><a href='#L829'>829</a>
|
|
895
|
-
<a name='L830'></a><a href='#L830'>830</a>
|
|
896
|
-
<a name='L831'></a><a href='#L831'>831</a>
|
|
897
|
-
<a name='L832'></a><a href='#L832'>832</a>
|
|
898
|
-
<a name='L833'></a><a href='#L833'>833</a>
|
|
899
|
-
<a name='L834'></a><a href='#L834'>834</a>
|
|
900
|
-
<a name='L835'></a><a href='#L835'>835</a>
|
|
901
|
-
<a name='L836'></a><a href='#L836'>836</a>
|
|
902
|
-
<a name='L837'></a><a href='#L837'>837</a>
|
|
903
|
-
<a name='L838'></a><a href='#L838'>838</a>
|
|
904
|
-
<a name='L839'></a><a href='#L839'>839</a>
|
|
905
|
-
<a name='L840'></a><a href='#L840'>840</a>
|
|
906
|
-
<a name='L841'></a><a href='#L841'>841</a>
|
|
907
|
-
<a name='L842'></a><a href='#L842'>842</a>
|
|
908
|
-
<a name='L843'></a><a href='#L843'>843</a>
|
|
909
|
-
<a name='L844'></a><a href='#L844'>844</a>
|
|
910
|
-
<a name='L845'></a><a href='#L845'>845</a>
|
|
911
|
-
<a name='L846'></a><a href='#L846'>846</a>
|
|
912
|
-
<a name='L847'></a><a href='#L847'>847</a>
|
|
913
|
-
<a name='L848'></a><a href='#L848'>848</a>
|
|
914
|
-
<a name='L849'></a><a href='#L849'>849</a>
|
|
915
|
-
<a name='L850'></a><a href='#L850'>850</a>
|
|
916
|
-
<a name='L851'></a><a href='#L851'>851</a>
|
|
917
|
-
<a name='L852'></a><a href='#L852'>852</a>
|
|
918
|
-
<a name='L853'></a><a href='#L853'>853</a>
|
|
919
|
-
<a name='L854'></a><a href='#L854'>854</a>
|
|
920
|
-
<a name='L855'></a><a href='#L855'>855</a>
|
|
921
|
-
<a name='L856'></a><a href='#L856'>856</a>
|
|
922
|
-
<a name='L857'></a><a href='#L857'>857</a>
|
|
923
|
-
<a name='L858'></a><a href='#L858'>858</a>
|
|
924
|
-
<a name='L859'></a><a href='#L859'>859</a>
|
|
925
|
-
<a name='L860'></a><a href='#L860'>860</a>
|
|
926
|
-
<a name='L861'></a><a href='#L861'>861</a>
|
|
927
|
-
<a name='L862'></a><a href='#L862'>862</a>
|
|
928
|
-
<a name='L863'></a><a href='#L863'>863</a>
|
|
929
|
-
<a name='L864'></a><a href='#L864'>864</a>
|
|
930
|
-
<a name='L865'></a><a href='#L865'>865</a>
|
|
931
|
-
<a name='L866'></a><a href='#L866'>866</a>
|
|
932
|
-
<a name='L867'></a><a href='#L867'>867</a>
|
|
933
|
-
<a name='L868'></a><a href='#L868'>868</a>
|
|
934
|
-
<a name='L869'></a><a href='#L869'>869</a>
|
|
935
|
-
<a name='L870'></a><a href='#L870'>870</a>
|
|
936
|
-
<a name='L871'></a><a href='#L871'>871</a>
|
|
937
|
-
<a name='L872'></a><a href='#L872'>872</a>
|
|
938
|
-
<a name='L873'></a><a href='#L873'>873</a>
|
|
939
|
-
<a name='L874'></a><a href='#L874'>874</a>
|
|
940
|
-
<a name='L875'></a><a href='#L875'>875</a>
|
|
941
|
-
<a name='L876'></a><a href='#L876'>876</a>
|
|
942
|
-
<a name='L877'></a><a href='#L877'>877</a>
|
|
943
|
-
<a name='L878'></a><a href='#L878'>878</a>
|
|
944
|
-
<a name='L879'></a><a href='#L879'>879</a>
|
|
945
|
-
<a name='L880'></a><a href='#L880'>880</a>
|
|
946
|
-
<a name='L881'></a><a href='#L881'>881</a>
|
|
947
|
-
<a name='L882'></a><a href='#L882'>882</a>
|
|
948
|
-
<a name='L883'></a><a href='#L883'>883</a>
|
|
949
|
-
<a name='L884'></a><a href='#L884'>884</a>
|
|
950
|
-
<a name='L885'></a><a href='#L885'>885</a>
|
|
951
|
-
<a name='L886'></a><a href='#L886'>886</a>
|
|
952
|
-
<a name='L887'></a><a href='#L887'>887</a>
|
|
953
|
-
<a name='L888'></a><a href='#L888'>888</a>
|
|
954
|
-
<a name='L889'></a><a href='#L889'>889</a>
|
|
955
|
-
<a name='L890'></a><a href='#L890'>890</a>
|
|
956
|
-
<a name='L891'></a><a href='#L891'>891</a>
|
|
957
|
-
<a name='L892'></a><a href='#L892'>892</a>
|
|
958
|
-
<a name='L893'></a><a href='#L893'>893</a>
|
|
959
|
-
<a name='L894'></a><a href='#L894'>894</a>
|
|
960
|
-
<a name='L895'></a><a href='#L895'>895</a>
|
|
961
|
-
<a name='L896'></a><a href='#L896'>896</a>
|
|
962
|
-
<a name='L897'></a><a href='#L897'>897</a>
|
|
963
|
-
<a name='L898'></a><a href='#L898'>898</a>
|
|
964
|
-
<a name='L899'></a><a href='#L899'>899</a>
|
|
965
|
-
<a name='L900'></a><a href='#L900'>900</a>
|
|
966
|
-
<a name='L901'></a><a href='#L901'>901</a>
|
|
967
|
-
<a name='L902'></a><a href='#L902'>902</a>
|
|
968
|
-
<a name='L903'></a><a href='#L903'>903</a>
|
|
969
|
-
<a name='L904'></a><a href='#L904'>904</a>
|
|
970
|
-
<a name='L905'></a><a href='#L905'>905</a>
|
|
971
|
-
<a name='L906'></a><a href='#L906'>906</a>
|
|
972
|
-
<a name='L907'></a><a href='#L907'>907</a>
|
|
973
|
-
<a name='L908'></a><a href='#L908'>908</a>
|
|
974
|
-
<a name='L909'></a><a href='#L909'>909</a>
|
|
975
|
-
<a name='L910'></a><a href='#L910'>910</a>
|
|
976
|
-
<a name='L911'></a><a href='#L911'>911</a>
|
|
977
|
-
<a name='L912'></a><a href='#L912'>912</a>
|
|
978
|
-
<a name='L913'></a><a href='#L913'>913</a>
|
|
979
|
-
<a name='L914'></a><a href='#L914'>914</a>
|
|
980
|
-
<a name='L915'></a><a href='#L915'>915</a>
|
|
981
|
-
<a name='L916'></a><a href='#L916'>916</a>
|
|
982
|
-
<a name='L917'></a><a href='#L917'>917</a>
|
|
983
|
-
<a name='L918'></a><a href='#L918'>918</a>
|
|
984
|
-
<a name='L919'></a><a href='#L919'>919</a>
|
|
985
|
-
<a name='L920'></a><a href='#L920'>920</a>
|
|
986
|
-
<a name='L921'></a><a href='#L921'>921</a>
|
|
987
|
-
<a name='L922'></a><a href='#L922'>922</a>
|
|
988
|
-
<a name='L923'></a><a href='#L923'>923</a>
|
|
989
|
-
<a name='L924'></a><a href='#L924'>924</a>
|
|
990
|
-
<a name='L925'></a><a href='#L925'>925</a>
|
|
991
|
-
<a name='L926'></a><a href='#L926'>926</a>
|
|
992
|
-
<a name='L927'></a><a href='#L927'>927</a>
|
|
993
|
-
<a name='L928'></a><a href='#L928'>928</a>
|
|
994
|
-
<a name='L929'></a><a href='#L929'>929</a>
|
|
995
|
-
<a name='L930'></a><a href='#L930'>930</a>
|
|
996
|
-
<a name='L931'></a><a href='#L931'>931</a>
|
|
997
|
-
<a name='L932'></a><a href='#L932'>932</a>
|
|
998
|
-
<a name='L933'></a><a href='#L933'>933</a>
|
|
999
|
-
<a name='L934'></a><a href='#L934'>934</a>
|
|
1000
|
-
<a name='L935'></a><a href='#L935'>935</a>
|
|
1001
|
-
<a name='L936'></a><a href='#L936'>936</a>
|
|
1002
|
-
<a name='L937'></a><a href='#L937'>937</a>
|
|
1003
|
-
<a name='L938'></a><a href='#L938'>938</a>
|
|
1004
|
-
<a name='L939'></a><a href='#L939'>939</a>
|
|
1005
|
-
<a name='L940'></a><a href='#L940'>940</a>
|
|
1006
|
-
<a name='L941'></a><a href='#L941'>941</a>
|
|
1007
|
-
<a name='L942'></a><a href='#L942'>942</a>
|
|
1008
|
-
<a name='L943'></a><a href='#L943'>943</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
1009
313
|
<span class="cline-any cline-neutral"> </span>
|
|
1010
314
|
<span class="cline-any cline-neutral"> </span>
|
|
1011
315
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1018,216 +322,6 @@
|
|
|
1018
322
|
<span class="cline-any cline-neutral"> </span>
|
|
1019
323
|
<span class="cline-any cline-neutral"> </span>
|
|
1020
324
|
<span class="cline-any cline-neutral"> </span>
|
|
1021
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1022
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1023
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1024
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1025
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1026
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1027
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1028
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1029
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1030
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1031
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1032
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1033
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1034
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1035
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1036
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1037
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1038
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1039
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1040
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1041
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1042
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1043
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1044
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1045
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1046
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1047
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1048
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1049
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1050
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1051
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1052
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1053
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1054
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1055
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1056
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1057
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1058
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1059
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1060
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1061
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1062
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1063
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1064
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1065
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1066
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1067
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1068
|
-
<span class="cline-any cline-no"> </span>
|
|
1069
|
-
<span class="cline-any cline-no"> </span>
|
|
1070
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1071
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1072
|
-
<span class="cline-any cline-yes">116x</span>
|
|
1073
|
-
<span class="cline-any cline-yes">116x</span>
|
|
1074
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1075
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1076
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1077
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1078
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1079
|
-
<span class="cline-any cline-no"> </span>
|
|
1080
|
-
<span class="cline-any cline-no"> </span>
|
|
1081
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1082
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1083
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1084
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1085
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1086
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1087
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1088
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1089
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1090
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1091
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1092
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1093
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1094
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1095
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1096
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1097
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1098
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1099
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1100
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1101
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1102
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1103
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1104
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1105
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1106
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1107
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1108
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1109
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1110
|
-
<span class="cline-any cline-no"> </span>
|
|
1111
|
-
<span class="cline-any cline-no"> </span>
|
|
1112
|
-
<span class="cline-any cline-yes">259x</span>
|
|
1113
|
-
<span class="cline-any cline-yes">266x</span>
|
|
1114
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1115
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1116
|
-
<span class="cline-any cline-yes">227x</span>
|
|
1117
|
-
<span class="cline-any cline-yes">227x</span>
|
|
1118
|
-
<span class="cline-any cline-yes">227x</span>
|
|
1119
|
-
<span class="cline-any cline-yes">227x</span>
|
|
1120
|
-
<span class="cline-any cline-yes">227x</span>
|
|
1121
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1122
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1123
|
-
<span class="cline-any cline-yes">220x</span>
|
|
1124
|
-
<span class="cline-any cline-yes">227x</span>
|
|
1125
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1126
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1127
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1128
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1129
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1130
|
-
<span class="cline-any cline-yes">60x</span>
|
|
1131
|
-
<span class="cline-any cline-yes">60x</span>
|
|
1132
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1133
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1134
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1135
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1136
|
-
<span class="cline-any cline-yes">60x</span>
|
|
1137
|
-
<span class="cline-any cline-yes">60x</span>
|
|
1138
|
-
<span class="cline-any cline-yes">60x</span>
|
|
1139
|
-
<span class="cline-any cline-yes">60x</span>
|
|
1140
|
-
<span class="cline-any cline-no"> </span>
|
|
1141
|
-
<span class="cline-any cline-no"> </span>
|
|
1142
|
-
<span class="cline-any cline-yes">59x</span>
|
|
1143
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1144
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1145
|
-
<span class="cline-any cline-yes">60x</span>
|
|
1146
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1147
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1148
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1149
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1150
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1151
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1152
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1153
|
-
<span class="cline-any cline-yes">57x</span>
|
|
1154
|
-
<span class="cline-any cline-yes">60x</span>
|
|
1155
|
-
<span class="cline-any cline-yes">27x</span>
|
|
1156
|
-
<span class="cline-any cline-yes">27x</span>
|
|
1157
|
-
<span class="cline-any cline-yes">30x</span>
|
|
1158
|
-
<span class="cline-any cline-yes">60x</span>
|
|
1159
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1160
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1161
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1162
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1163
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1164
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1165
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1166
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1167
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1168
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1169
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1170
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1171
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1172
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1173
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1174
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1175
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1176
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1177
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1178
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1179
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1180
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1181
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1182
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1183
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1184
|
-
<span class="cline-any cline-no"> </span>
|
|
1185
|
-
<span class="cline-any cline-no"> </span>
|
|
1186
|
-
<span class="cline-any cline-no"> </span>
|
|
1187
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1188
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1189
|
-
<span class="cline-any cline-no"> </span>
|
|
1190
|
-
<span class="cline-any cline-no"> </span>
|
|
1191
|
-
<span class="cline-any cline-no"> </span>
|
|
1192
|
-
<span class="cline-any cline-no"> </span>
|
|
1193
|
-
<span class="cline-any cline-no"> </span>
|
|
1194
|
-
<span class="cline-any cline-no"> </span>
|
|
1195
|
-
<span class="cline-any cline-no"> </span>
|
|
1196
|
-
<span class="cline-any cline-no"> </span>
|
|
1197
|
-
<span class="cline-any cline-no"> </span>
|
|
1198
|
-
<span class="cline-any cline-no"> </span>
|
|
1199
|
-
<span class="cline-any cline-no"> </span>
|
|
1200
|
-
<span class="cline-any cline-no"> </span>
|
|
1201
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1202
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1203
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1204
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1205
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1206
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1207
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1208
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1209
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1210
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1211
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1212
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1213
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1214
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1215
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1216
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1217
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1218
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1219
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1220
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1221
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1222
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1223
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1224
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1225
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1226
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1227
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1228
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1229
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1230
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1231
325
|
<span class="cline-any cline-yes">1x</span>
|
|
1232
326
|
<span class="cline-any cline-yes">1x</span>
|
|
1233
327
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -1235,762 +329,263 @@
|
|
|
1235
329
|
<span class="cline-any cline-yes">1x</span>
|
|
1236
330
|
<span class="cline-any cline-yes">1x</span>
|
|
1237
331
|
<span class="cline-any cline-yes">1x</span>
|
|
1238
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1239
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1240
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1241
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1242
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1243
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1244
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1245
332
|
<span class="cline-any cline-yes">1x</span>
|
|
1246
333
|
<span class="cline-any cline-yes">1x</span>
|
|
1247
|
-
<span class="cline-any cline-no"> </span>
|
|
1248
|
-
<span class="cline-any cline-no"> </span>
|
|
1249
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1250
|
-
<span class="cline-any cline-no"> </span>
|
|
1251
|
-
<span class="cline-any cline-no"> </span>
|
|
1252
334
|
<span class="cline-any cline-neutral"> </span>
|
|
1253
335
|
<span class="cline-any cline-yes">1x</span>
|
|
1254
|
-
<span class="cline-any cline-yes">
|
|
1255
|
-
<span class="cline-any cline-yes">
|
|
1256
|
-
<span class="cline-any cline-yes">
|
|
1257
|
-
<span class="cline-any cline-yes">
|
|
1258
|
-
<span class="cline-any cline-
|
|
1259
|
-
<span class="cline-any cline-
|
|
1260
|
-
<span class="cline-any cline-
|
|
336
|
+
<span class="cline-any cline-yes">143x</span>
|
|
337
|
+
<span class="cline-any cline-yes">143x</span>
|
|
338
|
+
<span class="cline-any cline-yes">143x</span>
|
|
339
|
+
<span class="cline-any cline-yes">143x</span>
|
|
340
|
+
<span class="cline-any cline-yes">143x</span>
|
|
341
|
+
<span class="cline-any cline-yes">143x</span>
|
|
342
|
+
<span class="cline-any cline-yes">143x</span>
|
|
1261
343
|
<span class="cline-any cline-neutral"> </span>
|
|
344
|
+
<span class="cline-any cline-yes">143x</span>
|
|
345
|
+
<span class="cline-any cline-yes">143x</span>
|
|
346
|
+
<span class="cline-any cline-yes">143x</span>
|
|
347
|
+
<span class="cline-any cline-yes">143x</span>
|
|
348
|
+
<span class="cline-any cline-yes">143x</span>
|
|
349
|
+
<span class="cline-any cline-yes">143x</span>
|
|
350
|
+
<span class="cline-any cline-yes">143x</span>
|
|
351
|
+
<span class="cline-any cline-yes">143x</span>
|
|
352
|
+
<span class="cline-any cline-yes">143x</span>
|
|
353
|
+
<span class="cline-any cline-yes">143x</span>
|
|
354
|
+
<span class="cline-any cline-yes">143x</span>
|
|
355
|
+
<span class="cline-any cline-yes">143x</span>
|
|
356
|
+
<span class="cline-any cline-yes">143x</span>
|
|
357
|
+
<span class="cline-any cline-yes">143x</span>
|
|
358
|
+
<span class="cline-any cline-yes">143x</span>
|
|
359
|
+
<span class="cline-any cline-yes">143x</span>
|
|
360
|
+
<span class="cline-any cline-yes">143x</span>
|
|
361
|
+
<span class="cline-any cline-yes">143x</span>
|
|
362
|
+
<span class="cline-any cline-yes">143x</span>
|
|
363
|
+
<span class="cline-any cline-yes">143x</span>
|
|
364
|
+
<span class="cline-any cline-yes">143x</span>
|
|
365
|
+
<span class="cline-any cline-yes">143x</span>
|
|
366
|
+
<span class="cline-any cline-yes">143x</span>
|
|
367
|
+
<span class="cline-any cline-yes">143x</span>
|
|
368
|
+
<span class="cline-any cline-yes">143x</span>
|
|
1262
369
|
<span class="cline-any cline-neutral"> </span>
|
|
1263
370
|
<span class="cline-any cline-neutral"> </span>
|
|
1264
371
|
<span class="cline-any cline-neutral"> </span>
|
|
1265
372
|
<span class="cline-any cline-neutral"> </span>
|
|
1266
373
|
<span class="cline-any cline-neutral"> </span>
|
|
374
|
+
<span class="cline-any cline-yes">143x</span>
|
|
375
|
+
<span class="cline-any cline-yes">44x</span>
|
|
376
|
+
<span class="cline-any cline-yes">44x</span>
|
|
1267
377
|
<span class="cline-any cline-neutral"> </span>
|
|
378
|
+
<span class="cline-any cline-yes">143x</span>
|
|
379
|
+
<span class="cline-any cline-yes">144x</span>
|
|
380
|
+
<span class="cline-any cline-yes">144x</span>
|
|
1268
381
|
<span class="cline-any cline-neutral"> </span>
|
|
1269
|
-
<span class="cline-any cline-
|
|
1270
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1271
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1272
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1273
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1274
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1275
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1276
|
-
<span class="cline-any cline-no"> </span>
|
|
1277
|
-
<span class="cline-any cline-no"> </span>
|
|
1278
|
-
<span class="cline-any cline-no"> </span>
|
|
1279
|
-
<span class="cline-any cline-no"> </span>
|
|
1280
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1281
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1282
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1283
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1284
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1285
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1286
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1287
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1288
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1289
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1290
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1291
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1292
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1293
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1294
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1295
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1296
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1297
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1298
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1299
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1300
|
-
<span class="cline-any cline-no"> </span>
|
|
1301
|
-
<span class="cline-any cline-no"> </span>
|
|
382
|
+
<span class="cline-any cline-yes">143x</span>
|
|
1302
383
|
<span class="cline-any cline-no"> </span>
|
|
1303
384
|
<span class="cline-any cline-no"> </span>
|
|
1304
|
-
<span class="cline-any cline-no"> </span>
|
|
1305
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1306
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1307
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1308
385
|
<span class="cline-any cline-neutral"> </span>
|
|
1309
|
-
<span class="cline-any cline-yes">
|
|
1310
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1311
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1312
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1313
|
-
<span class="cline-any cline-yes">2x</span>
|
|
386
|
+
<span class="cline-any cline-yes">143x</span>
|
|
1314
387
|
<span class="cline-any cline-yes">2x</span>
|
|
1315
388
|
<span class="cline-any cline-yes">2x</span>
|
|
1316
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1317
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1318
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1319
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1320
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1321
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1322
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1323
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1324
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1325
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1326
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1327
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1328
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1329
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1330
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1331
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1332
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1333
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1334
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1335
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1336
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1337
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1338
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1339
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1340
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1341
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1342
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1343
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1344
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1345
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1346
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1347
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1348
|
-
<span class="cline-any cline-no"> </span>
|
|
1349
|
-
<span class="cline-any cline-no"> </span>
|
|
1350
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1351
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1352
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1353
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1354
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1355
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1356
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1357
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1358
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1359
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1360
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1361
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1362
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1363
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1364
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1365
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1366
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1367
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1368
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1369
|
-
<span class="cline-any cline-yes">193x</span>
|
|
1370
|
-
<span class="cline-any cline-yes">193x</span>
|
|
1371
|
-
<span class="cline-any cline-yes">446x</span>
|
|
1372
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1373
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1374
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1375
|
-
<span class="cline-any cline-yes">32x</span>
|
|
1376
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1377
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1378
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1379
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1380
|
-
<span class="cline-any cline-yes">32x</span>
|
|
1381
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1382
|
-
<span class="cline-any cline-yes">396x</span>
|
|
1383
|
-
<span class="cline-any cline-yes">396x</span>
|
|
1384
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1385
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1386
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1387
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1388
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1389
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1390
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1391
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1392
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1393
|
-
<span class="cline-any cline-yes">448x</span>
|
|
1394
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1395
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1396
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1397
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1398
389
|
<span class="cline-any cline-neutral"> </span>
|
|
1399
|
-
<span class="cline-any cline-yes">
|
|
1400
|
-
<span class="cline-any cline-yes">280x</span>
|
|
1401
|
-
<span class="cline-any cline-yes">280x</span>
|
|
1402
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1403
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1404
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1405
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1406
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1407
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1408
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1409
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1410
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1411
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1412
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1413
|
-
<span class="cline-any cline-yes">280x</span>
|
|
1414
|
-
<span class="cline-any cline-yes">280x</span>
|
|
1415
|
-
<span class="cline-any cline-yes">280x</span>
|
|
1416
|
-
<span class="cline-any cline-yes">280x</span>
|
|
1417
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1418
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1419
|
-
<span class="cline-any cline-yes">276x</span>
|
|
1420
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1421
|
-
<span class="cline-any cline-yes">276x</span>
|
|
1422
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1423
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1424
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1425
|
-
<span class="cline-any cline-yes">16x</span>
|
|
390
|
+
<span class="cline-any cline-yes">143x</span>
|
|
1426
391
|
<span class="cline-any cline-yes">14x</span>
|
|
1427
392
|
<span class="cline-any cline-yes">14x</span>
|
|
1428
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1429
393
|
<span class="cline-any cline-neutral"> </span>
|
|
1430
|
-
<span class="cline-any cline-yes">
|
|
1431
|
-
<span class="cline-any cline-yes">
|
|
1432
|
-
<span class="cline-any cline-yes">
|
|
1433
|
-
<span class="cline-any cline-yes">
|
|
1434
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1435
|
-
<span class="cline-any cline-yes">280x</span>
|
|
1436
|
-
<span class="cline-any cline-yes">280x</span>
|
|
1437
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1438
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1439
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1440
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1441
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1442
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1443
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1444
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1445
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1446
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1447
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1448
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1449
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1450
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1451
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1452
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1453
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1454
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1455
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1456
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1457
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1458
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1459
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1460
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1461
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1462
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1463
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1464
|
-
<span class="cline-any cline-yes">260x</span>
|
|
394
|
+
<span class="cline-any cline-yes">143x</span>
|
|
395
|
+
<span class="cline-any cline-yes">182x</span>
|
|
396
|
+
<span class="cline-any cline-yes">182x</span>
|
|
397
|
+
<span class="cline-any cline-yes">182x</span>
|
|
1465
398
|
<span class="cline-any cline-no"> </span>
|
|
1466
399
|
<span class="cline-any cline-no"> </span>
|
|
400
|
+
<span class="cline-any cline-yes">182x</span>
|
|
401
|
+
<span class="cline-any cline-yes">182x</span>
|
|
1467
402
|
<span class="cline-any cline-neutral"> </span>
|
|
1468
|
-
<span class="cline-any cline-yes">
|
|
1469
|
-
<span class="cline-any cline-yes">
|
|
1470
|
-
<span class="cline-any cline-yes">
|
|
1471
|
-
<span class="cline-any cline-
|
|
1472
|
-
<span class="cline-any cline-neutral"> </span>
|
|
403
|
+
<span class="cline-any cline-yes">143x</span>
|
|
404
|
+
<span class="cline-any cline-yes">337x</span>
|
|
405
|
+
<span class="cline-any cline-yes">337x</span>
|
|
406
|
+
<span class="cline-any cline-yes">337x</span>
|
|
1473
407
|
<span class="cline-any cline-neutral"> </span>
|
|
1474
408
|
<span class="cline-any cline-neutral"> </span>
|
|
1475
409
|
<span class="cline-any cline-neutral"> </span>
|
|
1476
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1477
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1478
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1479
410
|
<span class="cline-any cline-neutral"> </span>
|
|
1480
|
-
<span class="cline-any cline-
|
|
1481
|
-
<span class="cline-any cline-yes">
|
|
1482
|
-
<span class="cline-any cline-
|
|
1483
|
-
<span class="cline-any cline-yes">
|
|
1484
|
-
<span class="cline-any cline-yes">
|
|
1485
|
-
<span class="cline-any cline-yes">
|
|
1486
|
-
<span class="cline-any cline-yes">
|
|
1487
|
-
<span class="cline-any cline-yes">260x</span>
|
|
411
|
+
<span class="cline-any cline-yes">337x</span>
|
|
412
|
+
<span class="cline-any cline-yes">337x</span>
|
|
413
|
+
<span class="cline-any cline-yes">337x</span>
|
|
414
|
+
<span class="cline-any cline-yes">337x</span>
|
|
415
|
+
<span class="cline-any cline-yes">337x</span>
|
|
416
|
+
<span class="cline-any cline-yes">337x</span>
|
|
417
|
+
<span class="cline-any cline-yes">337x</span>
|
|
1488
418
|
<span class="cline-any cline-yes">5x</span>
|
|
1489
419
|
<span class="cline-any cline-yes">5x</span>
|
|
1490
420
|
<span class="cline-any cline-neutral"> </span>
|
|
1491
421
|
<span class="cline-any cline-neutral"> </span>
|
|
1492
|
-
<span class="cline-any cline-yes">
|
|
1493
|
-
<span class="cline-any cline-yes">
|
|
1494
|
-
<span class="cline-any cline-
|
|
1495
|
-
<span class="cline-any cline-
|
|
1496
|
-
<span class="cline-any cline-
|
|
1497
|
-
<span class="cline-any cline-
|
|
1498
|
-
<span class="cline-any cline-yes">
|
|
1499
|
-
<span class="cline-any cline-yes">
|
|
1500
|
-
<span class="cline-any cline-
|
|
1501
|
-
<span class="cline-any cline-
|
|
1502
|
-
<span class="cline-any cline-
|
|
1503
|
-
<span class="cline-any cline-
|
|
1504
|
-
<span class="cline-any cline-yes">
|
|
1505
|
-
<span class="cline-any cline-yes">
|
|
1506
|
-
<span class="cline-any cline-yes">
|
|
1507
|
-
<span class="cline-any cline-
|
|
1508
|
-
<span class="cline-any cline-yes">
|
|
1509
|
-
<span class="cline-any cline-yes">
|
|
1510
|
-
<span class="cline-any cline-yes">
|
|
1511
|
-
<span class="cline-any cline-yes">
|
|
1512
|
-
<span class="cline-any cline-
|
|
1513
|
-
<span class="cline-any cline-yes">
|
|
1514
|
-
<span class="cline-any cline-no"> </span>
|
|
1515
|
-
<span class="cline-any cline-no"> </span>
|
|
1516
|
-
<span class="cline-any cline-no"> </span>
|
|
1517
|
-
<span class="cline-any cline-no"> </span>
|
|
1518
|
-
<span class="cline-any cline-no"> </span>
|
|
1519
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1520
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1521
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1522
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1523
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1524
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1525
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1526
|
-
<span class="cline-any cline-yes">260x</span>
|
|
1527
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1528
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1529
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1530
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1531
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1532
|
-
<span class="cline-any cline-yes">255x</span>
|
|
1533
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1534
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1535
|
-
<span class="cline-any cline-yes">255x</span>
|
|
1536
|
-
<span class="cline-any cline-yes">255x</span>
|
|
1537
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1538
|
-
<span class="cline-any cline-yes">255x</span>
|
|
1539
|
-
<span class="cline-any cline-yes">17x</span>
|
|
1540
|
-
<span class="cline-any cline-yes">17x</span>
|
|
1541
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1542
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1543
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1544
|
-
<span class="cline-any cline-yes">255x</span>
|
|
1545
|
-
<span class="cline-any cline-no"> </span>
|
|
1546
|
-
<span class="cline-any cline-no"> </span>
|
|
1547
|
-
<span class="cline-any cline-no"> </span>
|
|
1548
|
-
<span class="cline-any cline-no"> </span>
|
|
1549
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1550
|
-
<span class="cline-any cline-no"> </span>
|
|
1551
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1552
|
-
<span class="cline-any cline-yes">255x</span>
|
|
1553
|
-
<span class="cline-any cline-no"> </span>
|
|
1554
|
-
<span class="cline-any cline-no"> </span>
|
|
1555
|
-
<span class="cline-any cline-no"> </span>
|
|
1556
|
-
<span class="cline-any cline-no"> </span>
|
|
1557
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1558
|
-
<span class="cline-any cline-no"> </span>
|
|
1559
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1560
|
-
<span class="cline-any cline-yes">255x</span>
|
|
1561
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1562
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1563
|
-
<span class="cline-any cline-yes">255x</span>
|
|
1564
|
-
<span class="cline-any cline-no"> </span>
|
|
1565
|
-
<span class="cline-any cline-yes">255x</span>
|
|
1566
|
-
<span class="cline-any cline-yes">255x</span>
|
|
1567
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1568
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1569
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1570
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1571
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1572
|
-
<span class="cline-any cline-yes">497x</span>
|
|
1573
|
-
<span class="cline-any cline-yes">497x</span>
|
|
1574
|
-
<span class="cline-any cline-yes">497x</span>
|
|
1575
|
-
<span class="cline-any cline-yes">497x</span>
|
|
1576
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1577
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1578
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1579
|
-
<span class="cline-any cline-yes">497x</span>
|
|
1580
|
-
<span class="cline-any cline-no"> </span>
|
|
1581
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1582
|
-
<span class="cline-any cline-yes">497x</span>
|
|
1583
|
-
<span class="cline-any cline-no"> </span>
|
|
1584
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1585
|
-
<span class="cline-any cline-yes">497x</span>
|
|
1586
|
-
<span class="cline-any cline-yes">259x</span>
|
|
1587
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1588
|
-
<span class="cline-any cline-yes">497x</span>
|
|
1589
|
-
<span class="cline-any cline-no"> </span>
|
|
1590
|
-
<span class="cline-any cline-yes">497x</span>
|
|
1591
|
-
<span class="cline-any cline-yes">497x</span>
|
|
1592
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1593
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1594
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1595
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1596
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1597
|
-
<span class="cline-any cline-yes">253x</span>
|
|
1598
|
-
<span class="cline-any cline-yes">253x</span>
|
|
1599
|
-
<span class="cline-any cline-yes">253x</span>
|
|
1600
|
-
<span class="cline-any cline-yes">253x</span>
|
|
1601
|
-
<span class="cline-any cline-yes">253x</span>
|
|
1602
|
-
<span class="cline-any cline-yes">253x</span>
|
|
1603
|
-
<span class="cline-any cline-yes">253x</span>
|
|
1604
|
-
<span class="cline-any cline-yes">253x</span>
|
|
1605
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1606
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1607
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1608
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1609
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1610
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1611
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1612
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1613
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1614
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1615
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1616
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1617
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1618
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1619
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1620
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1621
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1622
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1623
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1624
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1625
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1626
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1627
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1628
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1629
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1630
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1631
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1632
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1633
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1634
|
-
<span class="cline-any cline-no"> </span>
|
|
1635
|
-
<span class="cline-any cline-no"> </span>
|
|
1636
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1637
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1638
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1639
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1640
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1641
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1642
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1643
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1644
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1645
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1646
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1647
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1648
|
-
<span class="cline-any cline-neutral"> </span>
|
|
422
|
+
<span class="cline-any cline-yes">337x</span>
|
|
423
|
+
<span class="cline-any cline-yes">55x</span>
|
|
424
|
+
<span class="cline-any cline-yes">55x</span>
|
|
425
|
+
<span class="cline-any cline-yes">55x</span>
|
|
426
|
+
<span class="cline-any cline-yes">55x</span>
|
|
427
|
+
<span class="cline-any cline-yes">55x</span>
|
|
428
|
+
<span class="cline-any cline-yes">55x</span>
|
|
429
|
+
<span class="cline-any cline-yes">55x</span>
|
|
430
|
+
<span class="cline-any cline-neutral"> </span>
|
|
431
|
+
<span class="cline-any cline-yes">326x</span>
|
|
432
|
+
<span class="cline-any cline-yes">337x</span>
|
|
433
|
+
<span class="cline-any cline-neutral"> </span>
|
|
434
|
+
<span class="cline-any cline-yes">143x</span>
|
|
435
|
+
<span class="cline-any cline-yes">235x</span>
|
|
436
|
+
<span class="cline-any cline-yes">235x</span>
|
|
437
|
+
<span class="cline-any cline-yes">235x</span>
|
|
438
|
+
<span class="cline-any cline-yes">235x</span>
|
|
439
|
+
<span class="cline-any cline-yes">235x</span>
|
|
440
|
+
<span class="cline-any cline-yes">3x</span>
|
|
441
|
+
<span class="cline-any cline-yes">3x</span>
|
|
442
|
+
<span class="cline-any cline-yes">228x</span>
|
|
443
|
+
<span class="cline-any cline-yes">235x</span>
|
|
1649
444
|
<span class="cline-any cline-neutral"> </span>
|
|
1650
|
-
<span class="cline-any cline-yes">
|
|
1651
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1652
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1653
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1654
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1655
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1656
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1657
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1658
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1659
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1660
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1661
|
-
<span class="cline-any cline-yes">238x</span>
|
|
445
|
+
<span class="cline-any cline-yes">143x</span>
|
|
1662
446
|
<span class="cline-any cline-neutral"> </span>
|
|
1663
447
|
<span class="cline-any cline-neutral"> </span>
|
|
1664
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1665
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1666
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1667
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1668
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1669
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1670
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1671
448
|
<span class="cline-any cline-neutral"> </span>
|
|
449
|
+
<span class="cline-any cline-yes">99x</span>
|
|
450
|
+
<span class="cline-any cline-yes">99x</span>
|
|
1672
451
|
<span class="cline-any cline-neutral"> </span>
|
|
1673
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1674
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1675
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1676
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1677
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1678
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1679
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1680
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1681
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1682
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1683
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1684
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1685
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1686
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1687
|
-
<span class="cline-any cline-no"> </span>
|
|
1688
|
-
<span class="cline-any cline-no"> </span>
|
|
1689
|
-
<span class="cline-any cline-no"> </span>
|
|
1690
|
-
<span class="cline-any cline-no"> </span>
|
|
1691
|
-
<span class="cline-any cline-no"> </span>
|
|
1692
|
-
<span class="cline-any cline-no"> </span>
|
|
1693
|
-
<span class="cline-any cline-no"> </span>
|
|
1694
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1695
452
|
<span class="cline-any cline-neutral"> </span>
|
|
1696
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1697
453
|
<span class="cline-any cline-neutral"> </span>
|
|
1698
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1699
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1700
454
|
<span class="cline-any cline-neutral"> </span>
|
|
455
|
+
<span class="cline-any cline-yes">99x</span>
|
|
456
|
+
<span class="cline-any cline-yes">99x</span>
|
|
457
|
+
<span class="cline-any cline-yes">99x</span>
|
|
458
|
+
<span class="cline-any cline-yes">99x</span>
|
|
459
|
+
<span class="cline-any cline-yes">99x</span>
|
|
460
|
+
<span class="cline-any cline-yes">99x</span>
|
|
461
|
+
<span class="cline-any cline-yes">99x</span>
|
|
1701
462
|
<span class="cline-any cline-neutral"> </span>
|
|
1702
|
-
<span class="cline-any cline-
|
|
1703
|
-
<span class="cline-any cline-
|
|
1704
|
-
<span class="cline-any cline-yes">
|
|
1705
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1706
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1707
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1708
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1709
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1710
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1711
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1712
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1713
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1714
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1715
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1716
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1717
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1718
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1719
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1720
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1721
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1722
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1723
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1724
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1725
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1726
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1727
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1728
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1729
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1730
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1731
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1732
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1733
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1734
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1735
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1736
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1737
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1738
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1739
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1740
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1741
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1742
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1743
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1744
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1745
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1746
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1747
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1748
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1749
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1750
|
-
<span class="cline-any cline-yes">36x</span>
|
|
1751
|
-
<span class="cline-any cline-yes">38x</span>
|
|
1752
|
-
<span class="cline-any cline-yes">38x</span>
|
|
1753
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1754
|
-
<span class="cline-any cline-yes">38x</span>
|
|
1755
|
-
<span class="cline-any cline-yes">38x</span>
|
|
1756
|
-
<span class="cline-any cline-yes">36x</span>
|
|
1757
|
-
<span class="cline-any cline-yes">36x</span>
|
|
1758
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1759
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1760
|
-
<span class="cline-any cline-yes">237x</span>
|
|
1761
|
-
<span class="cline-any cline-yes">237x</span>
|
|
463
|
+
<span class="cline-any cline-yes">143x</span>
|
|
464
|
+
<span class="cline-any cline-yes">12x</span>
|
|
465
|
+
<span class="cline-any cline-yes">12x</span>
|
|
1762
466
|
<span class="cline-any cline-neutral"> </span>
|
|
1763
467
|
<span class="cline-any cline-neutral"> </span>
|
|
1764
468
|
<span class="cline-any cline-neutral"> </span>
|
|
1765
469
|
<span class="cline-any cline-neutral"> </span>
|
|
1766
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1767
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1768
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1769
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1770
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1771
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1772
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1773
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1774
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1775
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1776
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1777
470
|
<span class="cline-any cline-neutral"> </span>
|
|
1778
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1779
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1780
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1781
471
|
<span class="cline-any cline-neutral"> </span>
|
|
1782
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1783
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1784
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1785
472
|
<span class="cline-any cline-neutral"> </span>
|
|
1786
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1787
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1788
473
|
<span class="cline-any cline-neutral"> </span>
|
|
1789
474
|
<span class="cline-any cline-neutral"> </span>
|
|
475
|
+
<span class="cline-any cline-yes">143x</span>
|
|
476
|
+
<span class="cline-any cline-yes">10x</span>
|
|
477
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1790
478
|
<span class="cline-any cline-neutral"> </span>
|
|
1791
479
|
<span class="cline-any cline-neutral"> </span>
|
|
1792
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1793
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1794
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1795
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1796
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1797
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1798
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1799
|
-
<span class="cline-any cline-yes">217x</span>
|
|
1800
|
-
<span class="cline-any cline-yes">217x</span>
|
|
1801
|
-
<span class="cline-any cline-yes">217x</span>
|
|
1802
|
-
<span class="cline-any cline-yes">217x</span>
|
|
1803
|
-
<span class="cline-any cline-yes">217x</span>
|
|
1804
480
|
<span class="cline-any cline-neutral"> </span>
|
|
1805
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1806
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1807
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1808
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1809
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1810
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1811
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1812
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1813
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1814
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1815
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1816
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1817
481
|
<span class="cline-any cline-neutral"> </span>
|
|
1818
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1819
482
|
<span class="cline-any cline-neutral"> </span>
|
|
1820
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1821
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1822
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1823
483
|
<span class="cline-any cline-neutral"> </span>
|
|
1824
484
|
<span class="cline-any cline-neutral"> </span>
|
|
1825
485
|
<span class="cline-any cline-neutral"> </span>
|
|
1826
486
|
<span class="cline-any cline-neutral"> </span>
|
|
1827
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1828
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1829
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1830
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1831
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1832
487
|
<span class="cline-any cline-neutral"> </span>
|
|
1833
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1834
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1835
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1836
|
-
<span class="cline-any cline-no"> </span>
|
|
1837
|
-
<span class="cline-any cline-no"> </span>
|
|
1838
|
-
<span class="cline-any cline-no"> </span>
|
|
1839
|
-
<span class="cline-any cline-no"> </span>
|
|
1840
|
-
<span class="cline-any cline-no"> </span>
|
|
1841
|
-
<span class="cline-any cline-no"> </span>
|
|
1842
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1843
488
|
<span class="cline-any cline-neutral"> </span>
|
|
1844
489
|
<span class="cline-any cline-neutral"> </span>
|
|
1845
|
-
<span class="cline-any cline-yes">
|
|
1846
|
-
<span class="cline-any cline-yes">
|
|
1847
|
-
<span class="cline-any cline-yes">
|
|
1848
|
-
<span class="cline-any cline-yes">
|
|
1849
|
-
<span class="cline-any cline-
|
|
1850
|
-
<span class="cline-any cline-
|
|
1851
|
-
<span class="cline-any cline-
|
|
1852
|
-
<span class="cline-any cline-
|
|
1853
|
-
<span class="cline-any cline-
|
|
1854
|
-
<span class="cline-any cline-
|
|
1855
|
-
<span class="cline-any cline-
|
|
1856
|
-
<span class="cline-any cline-
|
|
1857
|
-
<span class="cline-any cline-no"> </span>
|
|
1858
|
-
<span class="cline-any cline-no"> </span>
|
|
490
|
+
<span class="cline-any cline-yes">143x</span>
|
|
491
|
+
<span class="cline-any cline-yes">32x</span>
|
|
492
|
+
<span class="cline-any cline-yes">32x</span>
|
|
493
|
+
<span class="cline-any cline-yes">32x</span>
|
|
494
|
+
<span class="cline-any cline-yes">32x</span>
|
|
495
|
+
<span class="cline-any cline-yes">32x</span>
|
|
496
|
+
<span class="cline-any cline-yes">32x</span>
|
|
497
|
+
<span class="cline-any cline-yes">32x</span>
|
|
498
|
+
<span class="cline-any cline-yes">32x</span>
|
|
499
|
+
<span class="cline-any cline-yes">32x</span>
|
|
500
|
+
<span class="cline-any cline-yes">32x</span>
|
|
501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1859
502
|
<span class="cline-any cline-neutral"> </span>
|
|
1860
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1861
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1862
503
|
<span class="cline-any cline-neutral"> </span>
|
|
1863
504
|
<span class="cline-any cline-neutral"> </span>
|
|
1864
505
|
<span class="cline-any cline-neutral"> </span>
|
|
506
|
+
<span class="cline-any cline-yes">143x</span>
|
|
507
|
+
<span class="cline-any cline-yes">24x</span>
|
|
508
|
+
<span class="cline-any cline-yes">24x</span>
|
|
1865
509
|
<span class="cline-any cline-neutral"> </span>
|
|
1866
510
|
<span class="cline-any cline-neutral"> </span>
|
|
1867
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1868
|
-
<span class="cline-any cline-yes">254x</span>
|
|
1869
511
|
<span class="cline-any cline-neutral"> </span>
|
|
1870
512
|
<span class="cline-any cline-neutral"> </span>
|
|
1871
513
|
<span class="cline-any cline-neutral"> </span>
|
|
1872
|
-
<span class="cline-any cline-yes">
|
|
1873
|
-
<span class="cline-any cline-yes">
|
|
1874
|
-
<span class="cline-any cline-yes">
|
|
514
|
+
<span class="cline-any cline-yes">143x</span>
|
|
515
|
+
<span class="cline-any cline-yes">9x</span>
|
|
516
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1875
517
|
<span class="cline-any cline-neutral"> </span>
|
|
1876
|
-
<span class="cline-any cline-yes">254x</span>
|
|
1877
518
|
<span class="cline-any cline-neutral"> </span>
|
|
1878
|
-
<span class="cline-any cline-yes">254x</span>
|
|
1879
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1880
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1881
519
|
<span class="cline-any cline-neutral"> </span>
|
|
1882
|
-
<span class="cline-any cline-yes">254x</span>
|
|
1883
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1884
|
-
<span class="cline-any cline-yes">238x</span>
|
|
1885
520
|
<span class="cline-any cline-neutral"> </span>
|
|
1886
|
-
<span class="cline-any cline-yes">254x</span>
|
|
1887
521
|
<span class="cline-any cline-neutral"> </span>
|
|
1888
|
-
<span class="cline-any cline-yes">
|
|
1889
|
-
<span class="cline-any cline-yes">
|
|
522
|
+
<span class="cline-any cline-yes">143x</span>
|
|
523
|
+
<span class="cline-any cline-yes">3x</span>
|
|
524
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1890
525
|
<span class="cline-any cline-neutral"> </span>
|
|
1891
526
|
<span class="cline-any cline-neutral"> </span>
|
|
1892
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1893
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1894
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1895
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1896
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1897
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1898
|
-
<span class="cline-any cline-no"> </span>
|
|
1899
|
-
<span class="cline-any cline-no"> </span>
|
|
1900
527
|
<span class="cline-any cline-neutral"> </span>
|
|
1901
528
|
<span class="cline-any cline-neutral"> </span>
|
|
1902
|
-
<span class="cline-any cline-yes">
|
|
1903
|
-
<span class="cline-any cline-yes">
|
|
1904
|
-
<span class="cline-any cline-yes">
|
|
1905
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1906
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1907
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1908
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1909
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1910
|
-
<span class="cline-any cline-no"> </span>
|
|
1911
|
-
<span class="cline-any cline-no"> </span>
|
|
1912
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1913
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1914
|
-
<span class="cline-any cline-yes">254x</span>
|
|
1915
|
-
<span class="cline-any cline-yes">254x</span>
|
|
1916
|
-
<span class="cline-any cline-yes">254x</span>
|
|
1917
|
-
<span class="cline-any cline-yes">254x</span>
|
|
1918
|
-
<span class="cline-any cline-yes">254x</span>
|
|
1919
|
-
<span class="cline-any cline-yes">254x</span>
|
|
529
|
+
<span class="cline-any cline-yes">143x</span>
|
|
530
|
+
<span class="cline-any cline-yes">1x</span>
|
|
531
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1920
532
|
<span class="cline-any cline-neutral"> </span>
|
|
1921
533
|
<span class="cline-any cline-neutral"> </span>
|
|
1922
534
|
<span class="cline-any cline-neutral"> </span>
|
|
1923
535
|
<span class="cline-any cline-neutral"> </span>
|
|
1924
|
-
<span class="cline-any cline-yes">108x</span>
|
|
1925
|
-
<span class="cline-any cline-yes">466x</span>
|
|
1926
|
-
<span class="cline-any cline-yes">429x</span>
|
|
1927
|
-
<span class="cline-any cline-yes">429x</span>
|
|
1928
536
|
<span class="cline-any cline-neutral"> </span>
|
|
1929
|
-
<span class="cline-any cline-yes">
|
|
1930
|
-
<span class="cline-any cline-
|
|
1931
|
-
<span class="cline-any cline-
|
|
1932
|
-
<span class="cline-any cline-
|
|
537
|
+
<span class="cline-any cline-yes">143x</span>
|
|
538
|
+
<span class="cline-any cline-no"> </span>
|
|
539
|
+
<span class="cline-any cline-no"> </span>
|
|
540
|
+
<span class="cline-any cline-no"> </span>
|
|
541
|
+
<span class="cline-any cline-no"> </span>
|
|
542
|
+
<span class="cline-any cline-no"> </span>
|
|
543
|
+
<span class="cline-any cline-no"> </span>
|
|
544
|
+
<span class="cline-any cline-no"> </span>
|
|
545
|
+
<span class="cline-any cline-no"> </span>
|
|
546
|
+
<span class="cline-any cline-no"> </span>
|
|
547
|
+
<span class="cline-any cline-no"> </span>
|
|
548
|
+
<span class="cline-any cline-no"> </span>
|
|
1933
549
|
<span class="cline-any cline-neutral"> </span>
|
|
1934
|
-
<span class="cline-any cline-yes">37x</span>
|
|
1935
|
-
<span class="cline-any cline-yes">466x</span>
|
|
1936
550
|
<span class="cline-any cline-neutral"> </span>
|
|
1937
551
|
<span class="cline-any cline-neutral"> </span>
|
|
1938
552
|
<span class="cline-any cline-neutral"> </span>
|
|
1939
553
|
<span class="cline-any cline-neutral"> </span>
|
|
1940
|
-
<span class="cline-any cline-yes">
|
|
1941
|
-
<span class="cline-any cline-yes">44x</span>
|
|
1942
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1943
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1944
|
-
<span class="cline-any cline-yes">44x</span>
|
|
554
|
+
<span class="cline-any cline-yes">143x</span>
|
|
1945
555
|
<span class="cline-any cline-no"> </span>
|
|
1946
556
|
<span class="cline-any cline-no"> </span>
|
|
1947
|
-
<span class="cline-any cline-yes">
|
|
1948
|
-
<span class="cline-any cline-yes">44x</span>
|
|
1949
|
-
<span class="cline-any cline-yes">108x</span>
|
|
557
|
+
<span class="cline-any cline-yes">143x</span>
|
|
1950
558
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
1951
559
|
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
1952
560
|
import type { z, ZodObject, ZodOptional } from 'zod/v4'
|
|
1953
561
|
|
|
1954
|
-
import type { FactoryContext } from './factory-context.mjs'
|
|
1955
562
|
import type {
|
|
1956
563
|
AnyInjectableType,
|
|
1957
|
-
BaseInjectionTokenSchemaType,
|
|
1958
564
|
InjectionTokenSchemaType,
|
|
1959
|
-
InjectionTokenType,
|
|
1960
|
-
OptionalInjectionTokenSchemaType,
|
|
1961
565
|
} from './injection-token.mjs'
|
|
1962
566
|
import type { Registry } from './registry.mjs'
|
|
1963
567
|
import type { RequestContextHolder } from './request-context-holder.mjs'
|
|
1964
|
-
import type {
|
|
568
|
+
import type { ClearAllOptions } from './service-invalidator.mjs'
|
|
1965
569
|
import type { Injectors } from './utils/index.mjs'
|
|
1966
570
|
|
|
1967
|
-
import { InjectableScope } from './enums/index.mjs'
|
|
1968
|
-
import {
|
|
1969
|
-
ErrorsEnum,
|
|
1970
|
-
FactoryNotFound,
|
|
1971
|
-
FactoryTokenNotResolved,
|
|
1972
|
-
UnknownError,
|
|
1973
|
-
} from './errors/index.mjs'
|
|
1974
|
-
import {
|
|
1975
|
-
BoundInjectionToken,
|
|
1976
|
-
FactoryInjectionToken,
|
|
1977
|
-
InjectionToken,
|
|
1978
|
-
} from './injection-token.mjs'
|
|
1979
571
|
import { defaultInjectors } from './injector.mjs'
|
|
572
|
+
import { InstanceResolver } from './instance-resolver.mjs'
|
|
1980
573
|
import { globalRegistry } from './registry.mjs'
|
|
1981
|
-
import {
|
|
574
|
+
import { RequestContextManager } from './request-context-manager.mjs'
|
|
1982
575
|
import { ServiceInstantiator } from './service-instantiator.mjs'
|
|
576
|
+
import { ServiceInvalidator } from './service-invalidator.mjs'
|
|
1983
577
|
import { ServiceLocatorEventBus } from './service-locator-event-bus.mjs'
|
|
1984
|
-
import { ServiceLocatorInstanceHolderStatus } from './service-locator-instance-holder.mjs'
|
|
1985
578
|
import { ServiceLocatorManager } from './service-locator-manager.mjs'
|
|
1986
|
-
import {
|
|
579
|
+
import { TokenProcessor } from './token-processor.mjs'
|
|
1987
580
|
|
|
1988
581
|
export class ServiceLocator {
|
|
1989
582
|
private readonly eventBus: ServiceLocatorEventBus
|
|
1990
583
|
private readonly manager: ServiceLocatorManager
|
|
1991
584
|
private readonly serviceInstantiator: ServiceInstantiator
|
|
1992
|
-
private readonly
|
|
1993
|
-
private
|
|
585
|
+
private readonly tokenProcessor: TokenProcessor
|
|
586
|
+
private readonly requestContextManager: RequestContextManager
|
|
587
|
+
private readonly serviceInvalidator: ServiceInvalidator
|
|
588
|
+
private readonly instanceResolver: InstanceResolver
|
|
1994
589
|
|
|
1995
590
|
constructor(
|
|
1996
591
|
private readonly registry: Registry = globalRegistry,
|
|
@@ -2000,27 +595,55 @@ export class ServiceLocator {
|
|
|
2000
595
|
this.eventBus = new ServiceLocatorEventBus(logger)
|
|
2001
596
|
this.manager = new ServiceLocatorManager(logger)
|
|
2002
597
|
this.serviceInstantiator = new ServiceInstantiator(injectors)
|
|
598
|
+
this.tokenProcessor = new TokenProcessor(logger)
|
|
599
|
+
this.requestContextManager = new RequestContextManager(logger)
|
|
600
|
+
this.serviceInvalidator = new ServiceInvalidator(
|
|
601
|
+
this.manager,
|
|
602
|
+
this.requestContextManager,
|
|
603
|
+
this.eventBus,
|
|
604
|
+
logger,
|
|
605
|
+
)
|
|
606
|
+
this.instanceResolver = new InstanceResolver(
|
|
607
|
+
this.registry,
|
|
608
|
+
this.manager,
|
|
609
|
+
this.serviceInstantiator,
|
|
610
|
+
this.tokenProcessor,
|
|
611
|
+
logger,
|
|
612
|
+
this,
|
|
613
|
+
)
|
|
2003
614
|
}
|
|
2004
615
|
|
|
2005
616
|
// ============================================================================
|
|
2006
617
|
// PUBLIC METHODS
|
|
2007
618
|
// ============================================================================
|
|
2008
619
|
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
620
|
+
getEventBus() {
|
|
621
|
+
return this.eventBus
|
|
622
|
+
}
|
|
2012
623
|
|
|
2013
624
|
getManager() {
|
|
2014
625
|
return this.manager
|
|
2015
626
|
}
|
|
627
|
+
|
|
628
|
+
<span class="fstat-no" title="function not covered" > getRequestContexts() {</span>
|
|
629
|
+
<span class="cstat-no" title="statement not covered" > return this.requestContextManager.getRequestContexts()</span>
|
|
630
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
631
|
+
|
|
632
|
+
getRequestContextManager() {
|
|
633
|
+
return this.requestContextManager
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
getServiceInvalidator() {
|
|
637
|
+
return this.serviceInvalidator
|
|
638
|
+
}
|
|
2016
639
|
|
|
2017
640
|
public getInstanceIdentifier(token: AnyInjectableType, args?: any): string {
|
|
2018
641
|
const [err, { actualToken, validatedArgs }] =
|
|
2019
|
-
this.validateAndResolveTokenArgs(token, args)
|
|
642
|
+
this.tokenProcessor.validateAndResolveTokenArgs(token, args)
|
|
2020
643
|
if (err) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2021
644
|
<span class="cstat-no" title="statement not covered" > throw err</span>
|
|
2022
645
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2023
|
-
return this.generateInstanceName(actualToken, validatedArgs)
|
|
646
|
+
return this.tokenProcessor.generateInstanceName(actualToken, validatedArgs)
|
|
2024
647
|
}
|
|
2025
648
|
|
|
2026
649
|
public async getInstance(
|
|
@@ -2028,30 +651,30 @@ export class ServiceLocator {
|
|
|
2028
651
|
args?: any,
|
|
2029
652
|
onPrepare?: (data: {
|
|
2030
653
|
instanceName: string
|
|
2031
|
-
actualToken:
|
|
654
|
+
actualToken: any
|
|
2032
655
|
validatedArgs?: any
|
|
2033
656
|
}) => void,
|
|
2034
657
|
) {
|
|
2035
|
-
const [err, data] = await this.
|
|
658
|
+
const [err, data] = await this.instanceResolver.resolveInstance(
|
|
2036
659
|
token,
|
|
2037
660
|
args,
|
|
661
|
+
this.requestContextManager.getCurrentRequestContext() || undefined,
|
|
2038
662
|
)
|
|
2039
663
|
if (err) {
|
|
2040
664
|
return [err]
|
|
2041
665
|
}
|
|
2042
666
|
|
|
2043
|
-
|
|
2044
|
-
onPrepare
|
|
667
|
+
// Call onPrepare callback if provided
|
|
668
|
+
if (onPrepare) {
|
|
669
|
+
const instanceName = this.getInstanceIdentifier(token, args)
|
|
670
|
+
const [tokenErr, { actualToken, validatedArgs }] =
|
|
671
|
+
this.tokenProcessor.validateAndResolveTokenArgs(token, args)
|
|
672
|
+
if (!tokenErr) {
|
|
673
|
+
onPrepare({ instanceName, actualToken, validatedArgs })
|
|
674
|
+
}
|
|
675
|
+
}
|
|
2045
676
|
|
|
2046
|
-
|
|
2047
|
-
instanceName,
|
|
2048
|
-
realToken,
|
|
2049
|
-
validatedArgs,
|
|
2050
|
-
)
|
|
2051
|
-
if (error) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2052
|
-
<span class="cstat-no" title="statement not covered" > return [error]</span>
|
|
2053
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2054
|
-
return [undefined, holder.instance]
|
|
677
|
+
return [undefined, data]
|
|
2055
678
|
}
|
|
2056
679
|
|
|
2057
680
|
public async getOrThrowInstance<Instance>(
|
|
@@ -2076,126 +699,27 @@ export class ServiceLocator {
|
|
|
2076
699
|
? z.input<Schema> | undefined
|
|
2077
700
|
: undefined,
|
|
2078
701
|
): Instance | null {
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2084
|
-
const instanceName = this.generateInstanceName(actualToken, validatedArgs)
|
|
2085
|
-
|
|
2086
|
-
// Try request context first
|
|
2087
|
-
if (this.currentRequestContext) {
|
|
2088
|
-
const requestHolder = this.currentRequestContext.getHolder(instanceName)
|
|
2089
|
-
if (requestHolder) {
|
|
2090
|
-
return requestHolder.instance as Instance
|
|
2091
|
-
}
|
|
2092
|
-
}
|
|
2093
|
-
|
|
2094
|
-
// Try singleton manager
|
|
2095
|
-
const [error, holder] = this.manager.get(instanceName)
|
|
2096
|
-
if (error) {
|
|
2097
|
-
return null
|
|
2098
|
-
}
|
|
2099
|
-
return holder.instance as Instance
|
|
2100
|
-
}
|
|
2101
|
-
|
|
2102
|
-
invalidate(service: string, round = 1): Promise<any> {
|
|
2103
|
-
this.logger?.log(
|
|
2104
|
-
`[ServiceLocator] Starting invalidation process for ${service}`,
|
|
2105
|
-
)
|
|
2106
|
-
const toInvalidate = this.manager.filter(
|
|
2107
|
-
(holder) => holder.name === service || holder.deps.has(service),
|
|
2108
|
-
)
|
|
2109
|
-
const promises = []
|
|
2110
|
-
for (const [key, holder] of toInvalidate.entries()) {
|
|
2111
|
-
promises.push(this.invalidateHolder(key, holder, round))
|
|
2112
|
-
}
|
|
2113
|
-
return Promise.all(promises)
|
|
2114
|
-
}
|
|
2115
|
-
|
|
2116
|
-
/**
|
|
2117
|
-
* Invalidates a single holder based on its current status.
|
|
2118
|
-
*/
|
|
2119
|
-
private async invalidateHolder(
|
|
2120
|
-
key: string,
|
|
2121
|
-
holder: ServiceLocatorInstanceHolder<any>,
|
|
2122
|
-
round: number,
|
|
2123
|
-
): Promise<void> {
|
|
2124
|
-
switch (holder.status) {
|
|
2125
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > case ServiceLocatorInstanceHolderStatus.Destroying:</span>
|
|
2126
|
-
<span class="cstat-no" title="statement not covered" > this.logger?.trace(`[ServiceLocator] ${key} is already being destroyed`)</span>
|
|
2127
|
-
<span class="cstat-no" title="statement not covered" > await holder.destroyPromise</span>
|
|
2128
|
-
<span class="cstat-no" title="statement not covered" > break</span>
|
|
2129
|
-
|
|
2130
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > case ServiceLocatorInstanceHolderStatus.Creating:</span>
|
|
2131
|
-
<span class="cstat-no" title="statement not covered" > this.logger?.trace(</span>
|
|
2132
|
-
<span class="cstat-no" title="statement not covered" > `[ServiceLocator] ${key} is being created, waiting...`,</span>
|
|
2133
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
|
2134
|
-
<span class="cstat-no" title="statement not covered" > await holder.creationPromise</span>
|
|
2135
|
-
<span class="cstat-no" title="statement not covered" > if (round > 3) {</span>
|
|
2136
|
-
<span class="cstat-no" title="statement not covered" > this.logger?.error(</span>
|
|
2137
|
-
<span class="cstat-no" title="statement not covered" > `[ServiceLocator] ${key} creation triggered too many invalidation rounds`,</span>
|
|
2138
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
|
2139
|
-
<span class="cstat-no" title="statement not covered" > return</span>
|
|
2140
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2141
|
-
<span class="cstat-no" title="statement not covered" > await this.invalidate(key, round + 1)</span>
|
|
2142
|
-
<span class="cstat-no" title="statement not covered" > break</span>
|
|
2143
|
-
|
|
2144
|
-
default:
|
|
2145
|
-
await this.destroyHolder(key, holder)
|
|
2146
|
-
break
|
|
2147
|
-
}
|
|
2148
|
-
}
|
|
2149
|
-
|
|
2150
|
-
/**
|
|
2151
|
-
* Destroys a holder and cleans up its resources.
|
|
2152
|
-
*/
|
|
2153
|
-
private async destroyHolder(
|
|
2154
|
-
key: string,
|
|
2155
|
-
holder: ServiceLocatorInstanceHolder<any>,
|
|
2156
|
-
): Promise<void> {
|
|
2157
|
-
holder.status = ServiceLocatorInstanceHolderStatus.Destroying
|
|
2158
|
-
this.logger?.log(
|
|
2159
|
-
`[ServiceLocator] Invalidating ${key} and notifying listeners`,
|
|
702
|
+
return this.instanceResolver.getSyncInstance(
|
|
703
|
+
token,
|
|
704
|
+
args as any,
|
|
705
|
+
this.requestContextManager.getCurrentRequestContext(),
|
|
2160
706
|
)
|
|
2161
|
-
|
|
2162
|
-
holder.destroyPromise = Promise.all(
|
|
2163
|
-
holder.destroyListeners.map((listener) => listener()),
|
|
2164
|
-
).then(async () => {
|
|
2165
|
-
this.manager.delete(key)
|
|
2166
|
-
await this.emitInstanceEvent(key, 'destroy')
|
|
2167
|
-
})
|
|
2168
|
-
|
|
2169
|
-
await holder.destroyPromise
|
|
2170
707
|
}
|
|
2171
708
|
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
([, holder]) => holder,
|
|
2175
|
-
)
|
|
2176
|
-
await Promise.all(
|
|
2177
|
-
holders.map((holder) => this.waitForHolderToSettle(holder)),
|
|
2178
|
-
)
|
|
709
|
+
invalidate(service: string, round = 1): Promise<any> {
|
|
710
|
+
return this.serviceInvalidator.invalidate(service, round)
|
|
2179
711
|
}
|
|
2180
712
|
|
|
2181
713
|
/**
|
|
2182
|
-
*
|
|
714
|
+
* Gracefully clears all services in the ServiceLocator using invalidation logic.
|
|
715
|
+
* This method respects service dependencies and ensures proper cleanup order.
|
|
716
|
+
* Services that depend on others will be invalidated first, then their dependencies.
|
|
717
|
+
*
|
|
718
|
+
* @param options Optional configuration for the clearing process
|
|
719
|
+
* @returns Promise that resolves when all services have been cleared
|
|
2183
720
|
*/
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
): Promise<void> {
|
|
2187
|
-
switch (holder.status) {
|
|
2188
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > case ServiceLocatorInstanceHolderStatus.Creating:</span>
|
|
2189
|
-
<span class="cstat-no" title="statement not covered" > await holder.creationPromise</span>
|
|
2190
|
-
<span class="cstat-no" title="statement not covered" > break</span>
|
|
2191
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > case ServiceLocatorInstanceHolderStatus.Destroying:</span>
|
|
2192
|
-
<span class="cstat-no" title="statement not covered" > await holder.destroyPromise</span>
|
|
2193
|
-
<span class="cstat-no" title="statement not covered" > break</span>
|
|
2194
|
-
// Already settled states
|
|
2195
|
-
case ServiceLocatorInstanceHolderStatus.Created:
|
|
2196
|
-
case ServiceLocatorInstanceHolderStatus.Error:
|
|
2197
|
-
break
|
|
2198
|
-
}
|
|
721
|
+
async clearAll(options: ClearAllOptions = {}): Promise<void> {
|
|
722
|
+
return this.serviceInvalidator.clearAll(options)
|
|
2199
723
|
}
|
|
2200
724
|
|
|
2201
725
|
// ============================================================================
|
|
@@ -2214,22 +738,11 @@ export class ServiceLocator {
|
|
|
2214
738
|
metadata?: Record<string, any>,
|
|
2215
739
|
priority: number = 100,
|
|
2216
740
|
): RequestContextHolder {
|
|
2217
|
-
|
|
2218
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
2219
|
-
<span class="cstat-no" title="statement not covered" > `[ServiceLocator] Request context ${requestId} already exists`,</span>
|
|
2220
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
|
2221
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2222
|
-
|
|
2223
|
-
const contextHolder = new DefaultRequestContextHolder(
|
|
741
|
+
return this.requestContextManager.beginRequest(
|
|
2224
742
|
requestId,
|
|
2225
|
-
priority,
|
|
2226
743
|
metadata,
|
|
744
|
+
priority,
|
|
2227
745
|
)
|
|
2228
|
-
this.requestContexts.set(requestId, contextHolder)
|
|
2229
|
-
this.currentRequestContext = contextHolder
|
|
2230
|
-
|
|
2231
|
-
this.<span class="branch-0 cbranch-no" title="branch not covered" >logger?.log(`</span>[ServiceLocator] Started request context: ${requestId}`)
|
|
2232
|
-
return contextHolder
|
|
2233
746
|
}
|
|
2234
747
|
|
|
2235
748
|
/**
|
|
@@ -2237,39 +750,7 @@ export class ServiceLocator {
|
|
|
2237
750
|
* @param requestId The request ID to end
|
|
2238
751
|
*/
|
|
2239
752
|
async endRequest(requestId: string): Promise<void> {
|
|
2240
|
-
|
|
2241
|
-
if (!contextHolder) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2242
|
-
<span class="cstat-no" title="statement not covered" > this.logger?.warn(</span>
|
|
2243
|
-
<span class="cstat-no" title="statement not covered" > `[ServiceLocator] Request context ${requestId} not found`,</span>
|
|
2244
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
|
2245
|
-
<span class="cstat-no" title="statement not covered" > return</span>
|
|
2246
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2247
|
-
|
|
2248
|
-
this.<span class="branch-0 cbranch-no" title="branch not covered" >logger?.log(`</span>[ServiceLocator] Ending request context: ${requestId}`)
|
|
2249
|
-
|
|
2250
|
-
// Clean up all request-scoped instances
|
|
2251
|
-
const cleanupPromises: Promise<any>[] = []
|
|
2252
|
-
for (const [, holder] of contextHolder.holders) {
|
|
2253
|
-
if (holder.destroyListeners.length > 0) {
|
|
2254
|
-
cleanupPromises.push(
|
|
2255
|
-
Promise.all(holder.destroyListeners.map((listener) => listener())),
|
|
2256
|
-
)
|
|
2257
|
-
}
|
|
2258
|
-
}
|
|
2259
|
-
|
|
2260
|
-
await Promise.all(cleanupPromises)
|
|
2261
|
-
|
|
2262
|
-
// Clear the context
|
|
2263
|
-
contextHolder.clear()
|
|
2264
|
-
this.requestContexts.delete(requestId)
|
|
2265
|
-
|
|
2266
|
-
// Reset current context if it was the one being ended
|
|
2267
|
-
if (this.currentRequestContext === contextHolder) {
|
|
2268
|
-
this.currentRequestContext =
|
|
2269
|
-
Array.from(this.requestContexts.values()).at(-1) ?? null
|
|
2270
|
-
}
|
|
2271
|
-
|
|
2272
|
-
this.<span class="branch-0 cbranch-no" title="branch not covered" >logger?.log(`</span>[ServiceLocator] Request context ${requestId} ended`)
|
|
753
|
+
return this.requestContextManager.endRequest(requestId)
|
|
2273
754
|
}
|
|
2274
755
|
|
|
2275
756
|
/**
|
|
@@ -2277,7 +758,7 @@ export class ServiceLocator {
|
|
|
2277
758
|
* @returns The current request context holder or null
|
|
2278
759
|
*/
|
|
2279
760
|
getCurrentRequestContext(): RequestContextHolder | null {
|
|
2280
|
-
return this.
|
|
761
|
+
return this.requestContextManager.getCurrentRequestContext()
|
|
2281
762
|
}
|
|
2282
763
|
|
|
2283
764
|
/**
|
|
@@ -2285,609 +766,40 @@ export class ServiceLocator {
|
|
|
2285
766
|
* @param requestId The request ID to set as current
|
|
2286
767
|
*/
|
|
2287
768
|
setCurrentRequestContext(requestId: string): void {
|
|
2288
|
-
|
|
2289
|
-
if (!contextHolder) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2290
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(`[ServiceLocator] Request context ${requestId} not found`)</span>
|
|
2291
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2292
|
-
this.currentRequestContext = contextHolder
|
|
2293
|
-
}
|
|
2294
|
-
|
|
2295
|
-
// ============================================================================
|
|
2296
|
-
// PRIVATE METHODS
|
|
2297
|
-
// ============================================================================
|
|
2298
|
-
|
|
2299
|
-
/**
|
|
2300
|
-
* Validates and resolves token arguments, handling factory token resolution and validation.
|
|
2301
|
-
*/
|
|
2302
|
-
private validateAndResolveTokenArgs(
|
|
2303
|
-
token: AnyInjectableType,
|
|
2304
|
-
args?: any,
|
|
2305
|
-
): [
|
|
2306
|
-
FactoryTokenNotResolved | UnknownError | undefined,
|
|
2307
|
-
{ actualToken: InjectionTokenType; validatedArgs?: any },
|
|
2308
|
-
] {
|
|
2309
|
-
let actualToken = token as InjectionToken<any, any>
|
|
2310
|
-
if (typeof token === 'function') {
|
|
2311
|
-
actualToken = getInjectableToken(token)
|
|
2312
|
-
}
|
|
2313
|
-
let realArgs = args
|
|
2314
|
-
if (actualToken instanceof BoundInjectionToken) {
|
|
2315
|
-
realArgs = actualToken.value
|
|
2316
|
-
} else if (actualToken instanceof FactoryInjectionToken) {
|
|
2317
|
-
if (actualToken.resolved) {
|
|
2318
|
-
realArgs = actualToken.value
|
|
2319
|
-
} else {
|
|
2320
|
-
return [new FactoryTokenNotResolved(token.name), { actualToken }]
|
|
2321
|
-
}
|
|
2322
|
-
}
|
|
2323
|
-
if (!actualToken.schema) {
|
|
2324
|
-
return [undefined, { actualToken, validatedArgs: realArgs }]
|
|
2325
|
-
}
|
|
2326
|
-
const validatedArgs = actualToken.schema?.safeParse(realArgs)
|
|
2327
|
-
if (validatedArgs && !validatedArgs.success) {
|
|
2328
|
-
this.logger?.error(
|
|
2329
|
-
`[ServiceLocator]#validateAndResolveTokenArgs(): Error validating args for ${actualToken.name.toString()}`,
|
|
2330
|
-
validatedArgs.error,
|
|
2331
|
-
)
|
|
2332
|
-
return [new UnknownError(validatedArgs.error), { actualToken }]
|
|
2333
|
-
}
|
|
2334
|
-
return [undefined, { actualToken, validatedArgs: validatedArgs?.data }]
|
|
2335
|
-
}
|
|
2336
|
-
|
|
2337
|
-
/**
|
|
2338
|
-
* Internal method to resolve token args and create instance name.
|
|
2339
|
-
* Handles factory token resolution and validation.
|
|
2340
|
-
*/
|
|
2341
|
-
private async resolveTokenAndPrepareInstanceName(
|
|
2342
|
-
token: AnyInjectableType,
|
|
2343
|
-
args?: any,
|
|
2344
|
-
): Promise<
|
|
2345
|
-
| [
|
|
2346
|
-
undefined,
|
|
2347
|
-
{
|
|
2348
|
-
instanceName: string
|
|
2349
|
-
validatedArgs: any
|
|
2350
|
-
actualToken: InjectionTokenType
|
|
2351
|
-
realToken: InjectionToken<any, any>
|
|
2352
|
-
},
|
|
2353
|
-
]
|
|
2354
|
-
| [UnknownError | FactoryTokenNotResolved]
|
|
2355
|
-
> {
|
|
2356
|
-
const [err, { actualToken, validatedArgs }] =
|
|
2357
|
-
this.validateAndResolveTokenArgs(token, args)
|
|
2358
|
-
if (err instanceof UnknownError) {
|
|
2359
|
-
return [err]
|
|
2360
|
-
} else if (
|
|
2361
|
-
(err as any) instanceof FactoryTokenNotResolved &&
|
|
2362
|
-
actualToken instanceof FactoryInjectionToken
|
|
2363
|
-
) {
|
|
2364
|
-
this.logger?.log(
|
|
2365
|
-
`[ServiceLocator]#resolveTokenAndPrepareInstanceName() Factory token not resolved, resolving it`,
|
|
2366
|
-
)
|
|
2367
|
-
await actualToken.resolve(this.createFactoryContext())
|
|
2368
|
-
return this.resolveTokenAndPrepareInstanceName(token)
|
|
2369
|
-
}
|
|
2370
|
-
const instanceName = this.generateInstanceName(actualToken, validatedArgs)
|
|
2371
|
-
// Determine the real token (the actual InjectionToken that will be used for resolution)
|
|
2372
|
-
const realToken =
|
|
2373
|
-
actualToken instanceof BoundInjectionToken ||
|
|
2374
|
-
actualToken instanceof FactoryInjectionToken
|
|
2375
|
-
? actualToken.token
|
|
2376
|
-
: actualToken
|
|
2377
|
-
return [undefined, { instanceName, validatedArgs, actualToken, realToken }]
|
|
2378
|
-
}
|
|
2379
|
-
|
|
2380
|
-
/**
|
|
2381
|
-
* Gets an instance by its instance name, handling all the logic after instance name creation.
|
|
2382
|
-
*/
|
|
2383
|
-
private async retrieveOrCreateInstanceByInstanceName(
|
|
2384
|
-
instanceName: string,
|
|
2385
|
-
realToken: InjectionToken<any, any>,
|
|
2386
|
-
realArgs: any,
|
|
2387
|
-
): Promise<
|
|
2388
|
-
| [undefined, ServiceLocatorInstanceHolder<any>]
|
|
2389
|
-
| [UnknownError | FactoryNotFound]
|
|
2390
|
-
> {
|
|
2391
|
-
// Try to get existing instance (handles both request-scoped and singleton)
|
|
2392
|
-
const existingHolder = await this.tryGetExistingInstance(
|
|
2393
|
-
instanceName,
|
|
2394
|
-
realToken,
|
|
2395
|
-
)
|
|
2396
|
-
if (existingHolder) {
|
|
2397
|
-
return existingHolder
|
|
2398
|
-
}
|
|
2399
|
-
|
|
2400
|
-
// No existing instance found, create a new one
|
|
2401
|
-
const result = await this.createNewInstance(
|
|
2402
|
-
instanceName,
|
|
2403
|
-
realToken,
|
|
2404
|
-
realArgs,
|
|
2405
|
-
)
|
|
2406
|
-
if (result[0]) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2407
|
-
<span class="cstat-no" title="statement not covered" > return [result[0]]</span>
|
|
2408
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2409
|
-
|
|
2410
|
-
const [, holder] = result
|
|
2411
|
-
return this.waitForInstanceReady(holder)
|
|
2412
|
-
}
|
|
2413
|
-
|
|
2414
|
-
/**
|
|
2415
|
-
* Attempts to retrieve an existing instance, handling request-scoped and singleton instances.
|
|
2416
|
-
* Returns null if no instance exists and a new one should be created.
|
|
2417
|
-
*/
|
|
2418
|
-
private async tryGetExistingInstance(
|
|
2419
|
-
instanceName: string,
|
|
2420
|
-
realToken: InjectionToken<any, any>,
|
|
2421
|
-
): Promise<
|
|
2422
|
-
[undefined, ServiceLocatorInstanceHolder<any>] | [UnknownError] | null
|
|
2423
|
-
> {
|
|
2424
|
-
// Check request-scoped instances first
|
|
2425
|
-
const requestResult = await this.tryGetRequestScopedInstance(
|
|
2426
|
-
instanceName,
|
|
2427
|
-
realToken,
|
|
2428
|
-
)
|
|
2429
|
-
if (requestResult) {
|
|
2430
|
-
return requestResult
|
|
2431
|
-
}
|
|
2432
|
-
|
|
2433
|
-
// Check singleton instances
|
|
2434
|
-
return this.tryGetSingletonInstance(instanceName)
|
|
2435
|
-
}
|
|
2436
|
-
|
|
2437
|
-
/**
|
|
2438
|
-
* Attempts to get a request-scoped instance if applicable.
|
|
2439
|
-
*/
|
|
2440
|
-
private async tryGetRequestScopedInstance(
|
|
2441
|
-
instanceName: string,
|
|
2442
|
-
realToken: InjectionToken<any, any>,
|
|
2443
|
-
): Promise<
|
|
2444
|
-
[undefined, ServiceLocatorInstanceHolder<any>] | [UnknownError] | null
|
|
2445
|
-
> {
|
|
2446
|
-
if (!this.registry.has(realToken)) {
|
|
2447
|
-
return null
|
|
2448
|
-
}
|
|
2449
|
-
|
|
2450
|
-
const record = this.registry.get(realToken)
|
|
2451
|
-
if (record.scope !== InjectableScope.Request) {
|
|
2452
|
-
return null
|
|
2453
|
-
}
|
|
2454
|
-
|
|
2455
|
-
if (!this.currentRequestContext) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2456
|
-
<span class="cstat-no" title="statement not covered" > this.logger?.log(</span>
|
|
2457
|
-
<span class="cstat-no" title="statement not covered" > `[ServiceLocator] No current request context available for request-scoped service ${instanceName}`,</span>
|
|
2458
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
|
2459
|
-
<span class="cstat-no" title="statement not covered" > return [new UnknownError(ErrorsEnum.InstanceNotFound)]</span>
|
|
2460
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2461
|
-
|
|
2462
|
-
const requestHolder = this.currentRequestContext.getHolder(instanceName)
|
|
2463
|
-
if (!requestHolder) {
|
|
2464
|
-
return null
|
|
2465
|
-
}
|
|
2466
|
-
|
|
2467
|
-
return this.waitForInstanceReady(requestHolder)
|
|
2468
|
-
}
|
|
2469
|
-
|
|
2470
|
-
/**
|
|
2471
|
-
* Attempts to get a singleton instance from the manager.
|
|
2472
|
-
*/
|
|
2473
|
-
private async tryGetSingletonInstance(
|
|
2474
|
-
instanceName: string,
|
|
2475
|
-
): Promise<
|
|
2476
|
-
[undefined, ServiceLocatorInstanceHolder<any>] | [UnknownError] | null
|
|
2477
|
-
> {
|
|
2478
|
-
const [error, holder] = this.manager.get(instanceName)
|
|
2479
|
-
|
|
2480
|
-
if (!error) {
|
|
2481
|
-
return this.waitForInstanceReady(holder)
|
|
2482
|
-
}
|
|
2483
|
-
|
|
2484
|
-
// Handle recovery scenarios
|
|
2485
|
-
switch (error.code) {
|
|
2486
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > case ErrorsEnum.InstanceDestroying:</span>
|
|
2487
|
-
<span class="cstat-no" title="statement not covered" > this.logger?.log(</span>
|
|
2488
|
-
<span class="cstat-no" title="statement not covered" > `[ServiceLocator] Instance ${instanceName} is being destroyed, waiting...`,</span>
|
|
2489
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
|
2490
|
-
<span class="cstat-no" title="statement not covered" > await holder?.destroyPromise</span>
|
|
2491
|
-
// Retry after destruction is complete
|
|
2492
|
-
<span class="cstat-no" title="statement not covered" > return this.tryGetSingletonInstance(instanceName)</span>
|
|
2493
|
-
|
|
2494
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > case ErrorsEnum.InstanceExpired:</span>
|
|
2495
|
-
<span class="cstat-no" title="statement not covered" > this.logger?.log(</span>
|
|
2496
|
-
<span class="cstat-no" title="statement not covered" > `[ServiceLocator] Instance ${instanceName} expired, invalidating...`,</span>
|
|
2497
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
|
2498
|
-
<span class="cstat-no" title="statement not covered" > await this.invalidate(instanceName)</span>
|
|
2499
|
-
// Retry after invalidation
|
|
2500
|
-
<span class="cstat-no" title="statement not covered" > return this.tryGetSingletonInstance(instanceName)</span>
|
|
2501
|
-
|
|
2502
|
-
case ErrorsEnum.InstanceNotFound:
|
|
2503
|
-
return null // Instance doesn't exist, should create new one
|
|
2504
|
-
|
|
2505
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > default:</span>
|
|
2506
|
-
<span class="cstat-no" title="statement not covered" > return [error]</span>
|
|
2507
|
-
}
|
|
2508
|
-
}
|
|
2509
|
-
|
|
2510
|
-
/**
|
|
2511
|
-
* Waits for an instance holder to be ready and returns the appropriate result.
|
|
2512
|
-
*/
|
|
2513
|
-
private async waitForInstanceReady<T>(
|
|
2514
|
-
holder: ServiceLocatorInstanceHolder<T>,
|
|
2515
|
-
): Promise<[undefined, ServiceLocatorInstanceHolder<T>] | [UnknownError]> {
|
|
2516
|
-
switch (holder.status) {
|
|
2517
|
-
case ServiceLocatorInstanceHolderStatus.Creating:
|
|
2518
|
-
await holder.creationPromise
|
|
2519
|
-
return this.waitForInstanceReady(holder)
|
|
2520
|
-
|
|
2521
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > case ServiceLocatorInstanceHolderStatus.Destroying:</span>
|
|
2522
|
-
<span class="cstat-no" title="statement not covered" > return [new UnknownError(ErrorsEnum.InstanceDestroying)]</span>
|
|
2523
|
-
|
|
2524
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > case ServiceLocatorInstanceHolderStatus.Error:</span>
|
|
2525
|
-
<span class="cstat-no" title="statement not covered" > return [holder.instance as UnknownError]</span>
|
|
2526
|
-
|
|
2527
|
-
case ServiceLocatorInstanceHolderStatus.Created:
|
|
2528
|
-
return [undefined, holder]
|
|
2529
|
-
|
|
2530
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > default:</span>
|
|
2531
|
-
<span class="cstat-no" title="statement not covered" > return [new UnknownError(ErrorsEnum.InstanceNotFound)]</span>
|
|
2532
|
-
}
|
|
2533
|
-
}
|
|
2534
|
-
|
|
2535
|
-
/**
|
|
2536
|
-
* Emits events to listeners for instance lifecycle events.
|
|
2537
|
-
*/
|
|
2538
|
-
private emitInstanceEvent(
|
|
2539
|
-
name: string,
|
|
2540
|
-
event: 'create' | 'destroy' = 'create',
|
|
2541
|
-
) {
|
|
2542
|
-
this.logger?.log(
|
|
2543
|
-
`[ServiceLocator]#emitInstanceEvent() Notifying listeners for ${name} with event ${event}`,
|
|
2544
|
-
)
|
|
2545
|
-
return this.eventBus.emit(name, event)
|
|
2546
|
-
}
|
|
2547
|
-
|
|
2548
|
-
/**
|
|
2549
|
-
* Creates a new instance for the given token and arguments.
|
|
2550
|
-
*/
|
|
2551
|
-
private async createNewInstance<
|
|
2552
|
-
Instance,
|
|
2553
|
-
Schema extends InjectionTokenSchemaType | undefined,
|
|
2554
|
-
>(
|
|
2555
|
-
instanceName: string,
|
|
2556
|
-
realToken: InjectionToken<Instance, Schema>,
|
|
2557
|
-
args: Schema extends ZodObject
|
|
2558
|
-
? z.output<Schema>
|
|
2559
|
-
: Schema extends ZodOptional<ZodObject>
|
|
2560
|
-
? z.output<Schema> | undefined
|
|
2561
|
-
: undefined,
|
|
2562
|
-
): Promise<
|
|
2563
|
-
| [undefined, ServiceLocatorInstanceHolder<Instance>]
|
|
2564
|
-
| [FactoryNotFound | UnknownError]
|
|
2565
|
-
> {
|
|
2566
|
-
this.logger?.log(
|
|
2567
|
-
`[ServiceLocator]#createNewInstance() Creating instance for ${instanceName}`,
|
|
2568
|
-
)
|
|
2569
|
-
if (this.registry.has(realToken)) {
|
|
2570
|
-
return this.instantiateServiceFromRegistry<Instance, Schema, any>(
|
|
2571
|
-
instanceName,
|
|
2572
|
-
realToken,
|
|
2573
|
-
args,
|
|
2574
|
-
)
|
|
2575
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > } else {</span>
|
|
2576
|
-
<span class="cstat-no" title="statement not covered" > return [new FactoryNotFound(realToken.name.toString())]</span>
|
|
2577
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2578
|
-
}
|
|
2579
|
-
|
|
2580
|
-
/**
|
|
2581
|
-
* Instantiates a service from the registry using the service instantiator.
|
|
2582
|
-
*/
|
|
2583
|
-
private instantiateServiceFromRegistry<
|
|
2584
|
-
Instance,
|
|
2585
|
-
Schema extends InjectionTokenSchemaType | undefined,
|
|
2586
|
-
Args extends Schema extends BaseInjectionTokenSchemaType
|
|
2587
|
-
? z.output<Schema>
|
|
2588
|
-
: Schema extends OptionalInjectionTokenSchemaType
|
|
2589
|
-
? z.output<Schema> | undefined
|
|
2590
|
-
: undefined,
|
|
2591
|
-
>(
|
|
2592
|
-
instanceName: string,
|
|
2593
|
-
token: InjectionToken<Instance, Schema>,
|
|
2594
|
-
args: Args,
|
|
2595
|
-
): Promise<[undefined, ServiceLocatorInstanceHolder<Instance>]> {
|
|
2596
|
-
this.logger?.log(
|
|
2597
|
-
`[ServiceLocator]#instantiateServiceFromRegistry(): Creating instance for ${instanceName} from abstract factory`,
|
|
2598
|
-
)
|
|
2599
|
-
const ctx = this.createFactoryContext(
|
|
2600
|
-
this.currentRequestContext || undefined,
|
|
2601
|
-
)
|
|
2602
|
-
let record = this.registry.get<Instance, Schema>(token)
|
|
2603
|
-
let { scope, type } = record
|
|
2604
|
-
|
|
2605
|
-
// Use createCreatingHolder from manager
|
|
2606
|
-
const [deferred, holder] = this.manager.createCreatingHolder<Instance>(
|
|
2607
|
-
instanceName,
|
|
2608
|
-
type,
|
|
2609
|
-
scope,
|
|
2610
|
-
ctx.deps,
|
|
2611
|
-
Infinity,
|
|
2612
|
-
)
|
|
2613
|
-
|
|
2614
|
-
// Start the instantiation process
|
|
2615
|
-
this.serviceInstantiator
|
|
2616
|
-
.instantiateService(ctx, record, args)
|
|
2617
|
-
.then(async ([error, instance]) => {
|
|
2618
|
-
await this.handleInstantiationResult(
|
|
2619
|
-
instanceName,
|
|
2620
|
-
holder,
|
|
2621
|
-
ctx,
|
|
2622
|
-
deferred,
|
|
2623
|
-
scope,
|
|
2624
|
-
error,
|
|
2625
|
-
instance,
|
|
2626
|
-
)
|
|
2627
|
-
})
|
|
2628
|
-
.catch(async (error) => {
|
|
2629
|
-
<span class="cstat-no" title="statement not covered" > await this.handleInstantiationError(</span>
|
|
2630
|
-
<span class="cstat-no" title="statement not covered" > instanceName,</span>
|
|
2631
|
-
<span class="cstat-no" title="statement not covered" > holder,</span>
|
|
2632
|
-
<span class="cstat-no" title="statement not covered" > deferred,</span>
|
|
2633
|
-
<span class="cstat-no" title="statement not covered" > scope,</span>
|
|
2634
|
-
<span class="cstat-no" title="statement not covered" > error,</span>
|
|
2635
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
|
2636
|
-
})
|
|
2637
|
-
|
|
2638
|
-
this.storeInstanceByScope(scope, instanceName, holder)
|
|
2639
|
-
// @ts-expect-error TS2322 This is correct type
|
|
2640
|
-
return [undefined, holder]
|
|
2641
|
-
}
|
|
2642
|
-
|
|
2643
|
-
/**
|
|
2644
|
-
* Handles the result of service instantiation.
|
|
2645
|
-
*/
|
|
2646
|
-
private async handleInstantiationResult(
|
|
2647
|
-
instanceName: string,
|
|
2648
|
-
holder: ServiceLocatorInstanceHolder<any>,
|
|
2649
|
-
ctx: any,
|
|
2650
|
-
deferred: any,
|
|
2651
|
-
scope: InjectableScope,
|
|
2652
|
-
error: any,
|
|
2653
|
-
instance: any,
|
|
2654
|
-
): Promise<void> {
|
|
2655
|
-
holder.destroyListeners = ctx.getDestroyListeners()
|
|
2656
|
-
holder.creationPromise = null
|
|
2657
|
-
|
|
2658
|
-
if (error) {
|
|
2659
|
-
await this.handleInstantiationError(
|
|
2660
|
-
instanceName,
|
|
2661
|
-
holder,
|
|
2662
|
-
deferred,
|
|
2663
|
-
scope,
|
|
2664
|
-
error,
|
|
2665
|
-
)
|
|
2666
|
-
} else {
|
|
2667
|
-
await this.handleInstantiationSuccess(
|
|
2668
|
-
instanceName,
|
|
2669
|
-
holder,
|
|
2670
|
-
ctx,
|
|
2671
|
-
deferred,
|
|
2672
|
-
instance,
|
|
2673
|
-
)
|
|
2674
|
-
}
|
|
2675
|
-
}
|
|
2676
|
-
|
|
2677
|
-
/**
|
|
2678
|
-
* Handles successful service instantiation.
|
|
2679
|
-
*/
|
|
2680
|
-
private async handleInstantiationSuccess(
|
|
2681
|
-
instanceName: string,
|
|
2682
|
-
holder: ServiceLocatorInstanceHolder<any>,
|
|
2683
|
-
ctx: any,
|
|
2684
|
-
deferred: any,
|
|
2685
|
-
instance: any,
|
|
2686
|
-
): Promise<void> {
|
|
2687
|
-
holder.instance = instance
|
|
2688
|
-
holder.status = ServiceLocatorInstanceHolderStatus.Created
|
|
2689
|
-
|
|
2690
|
-
// Set up dependency invalidation listeners
|
|
2691
|
-
if (ctx.deps.size > 0) {
|
|
2692
|
-
ctx.deps.forEach((dependency: string) => {
|
|
2693
|
-
holder.destroyListeners.push(
|
|
2694
|
-
this.eventBus.on(dependency, 'destroy', () =>
|
|
2695
|
-
this.invalidate(instanceName),
|
|
2696
|
-
),
|
|
2697
|
-
)
|
|
2698
|
-
})
|
|
2699
|
-
}
|
|
2700
|
-
|
|
2701
|
-
await this.emitInstanceEvent(instanceName)
|
|
2702
|
-
deferred.resolve([undefined, instance])
|
|
2703
|
-
}
|
|
2704
|
-
|
|
2705
|
-
/**
|
|
2706
|
-
* Handles service instantiation errors.
|
|
2707
|
-
*/
|
|
2708
|
-
private async handleInstantiationError(
|
|
2709
|
-
instanceName: string,
|
|
2710
|
-
holder: ServiceLocatorInstanceHolder<any>,
|
|
2711
|
-
deferred: any,
|
|
2712
|
-
scope: InjectableScope,
|
|
2713
|
-
error: any,
|
|
2714
|
-
): Promise<void> {
|
|
2715
|
-
this.logger?.error(
|
|
2716
|
-
`[ServiceLocator] Error creating instance for ${instanceName}`,
|
|
2717
|
-
error,
|
|
2718
|
-
)
|
|
2719
|
-
|
|
2720
|
-
holder.status = ServiceLocatorInstanceHolderStatus.Error
|
|
2721
|
-
holder.instance = error
|
|
2722
|
-
holder.creationPromise = null
|
|
2723
|
-
|
|
2724
|
-
if (scope === InjectableScope.Singleton) {
|
|
2725
|
-
setTimeout(() => this.invalidate(instanceName), 10)
|
|
2726
|
-
}
|
|
2727
|
-
|
|
2728
|
-
deferred.reject(error)
|
|
2729
|
-
}
|
|
2730
|
-
|
|
2731
|
-
/**
|
|
2732
|
-
* Stores an instance holder based on its scope.
|
|
2733
|
-
*/
|
|
2734
|
-
private storeInstanceByScope(
|
|
2735
|
-
scope: InjectableScope,
|
|
2736
|
-
instanceName: string,
|
|
2737
|
-
holder: ServiceLocatorInstanceHolder<any>,
|
|
2738
|
-
): void {
|
|
2739
|
-
switch (scope) {
|
|
2740
|
-
case InjectableScope.Singleton:
|
|
2741
|
-
this.logger?.debug(
|
|
2742
|
-
`[ServiceLocator] Setting singleton instance for ${instanceName}`,
|
|
2743
|
-
)
|
|
2744
|
-
this.manager.set(instanceName, holder)
|
|
2745
|
-
break
|
|
2746
|
-
|
|
2747
|
-
case InjectableScope.Request:
|
|
2748
|
-
if (this.currentRequestContext) {
|
|
2749
|
-
this.<span class="branch-0 cbranch-no" title="branch not covered" >logger?.debug(</span>
|
|
2750
|
-
`[ServiceLocator] Setting request-scoped instance for ${instanceName}`,
|
|
2751
|
-
)
|
|
2752
|
-
this.currentRequestContext.addInstance(
|
|
2753
|
-
instanceName,
|
|
2754
|
-
holder.instance,
|
|
2755
|
-
holder,
|
|
2756
|
-
)
|
|
2757
|
-
}
|
|
2758
|
-
break
|
|
2759
|
-
|
|
2760
|
-
case InjectableScope.Transient:
|
|
2761
|
-
// Transient instances are not stored anywhere
|
|
2762
|
-
break
|
|
2763
|
-
}
|
|
2764
|
-
}
|
|
2765
|
-
|
|
2766
|
-
/**
|
|
2767
|
-
* Tries to get a pre-prepared instance from request contexts.
|
|
2768
|
-
*/
|
|
2769
|
-
private tryGetPrePreparedInstance(
|
|
2770
|
-
instanceName: string,
|
|
2771
|
-
contextHolder: RequestContextHolder | undefined,
|
|
2772
|
-
deps: Set<string>,
|
|
2773
|
-
): any {
|
|
2774
|
-
// Check provided context holder first (if has higher priority)
|
|
2775
|
-
if (contextHolder && contextHolder.priority > 0) {
|
|
2776
|
-
const prePreparedInstance = contextHolder.getInstance(instanceName)
|
|
2777
|
-
if (prePreparedInstance !== undefined) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2778
|
-
<span class="cstat-no" title="statement not covered" > this.logger?.debug(</span>
|
|
2779
|
-
<span class="cstat-no" title="statement not covered" > `[ServiceLocator] Using pre-prepared instance ${instanceName} from request context ${contextHolder.requestId}`,</span>
|
|
2780
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
|
2781
|
-
<span class="cstat-no" title="statement not covered" > deps.add(instanceName)</span>
|
|
2782
|
-
<span class="cstat-no" title="statement not covered" > return prePreparedInstance</span>
|
|
2783
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2784
|
-
}
|
|
2785
|
-
|
|
2786
|
-
// Check current request context (if different from provided contextHolder)
|
|
2787
|
-
if (
|
|
2788
|
-
this.currentRequestContext &&
|
|
2789
|
-
this.currentRequestContext !== contextHolder
|
|
2790
|
-
) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2791
|
-
<span class="cstat-no" title="statement not covered" > const prePreparedInstance =</span>
|
|
2792
|
-
<span class="cstat-no" title="statement not covered" > this.currentRequestContext.getInstance(instanceName)</span>
|
|
2793
|
-
<span class="cstat-no" title="statement not covered" > if (prePreparedInstance !== undefined) {</span>
|
|
2794
|
-
<span class="cstat-no" title="statement not covered" > this.logger?.debug(</span>
|
|
2795
|
-
<span class="cstat-no" title="statement not covered" > `[ServiceLocator] Using pre-prepared instance ${instanceName} from current request context ${this.currentRequestContext.requestId}`,</span>
|
|
2796
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
|
2797
|
-
<span class="cstat-no" title="statement not covered" > deps.add(instanceName)</span>
|
|
2798
|
-
<span class="cstat-no" title="statement not covered" > return prePreparedInstance</span>
|
|
2799
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2800
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2801
|
-
|
|
2802
|
-
return undefined
|
|
769
|
+
return this.requestContextManager.setCurrentRequestContext(requestId)
|
|
2803
770
|
}
|
|
2804
771
|
|
|
2805
772
|
/**
|
|
2806
|
-
*
|
|
2807
|
-
* @param contextHolder Optional request context holder for priority-based resolution
|
|
773
|
+
* Waits for all services to settle (either created, destroyed, or error state).
|
|
2808
774
|
*/
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
): FactoryContext & {
|
|
2812
|
-
getDestroyListeners: () => (() => void)[]
|
|
2813
|
-
deps: Set<string>
|
|
2814
|
-
} {
|
|
2815
|
-
const destroyListeners = new Set<() => void>()
|
|
2816
|
-
const deps = new Set<string>()
|
|
2817
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
2818
|
-
const self = this
|
|
2819
|
-
|
|
2820
|
-
function addDestroyListener(listener: () => void) {
|
|
2821
|
-
destroyListeners.add(listener)
|
|
2822
|
-
}
|
|
2823
|
-
|
|
2824
|
-
function getDestroyListeners() {
|
|
2825
|
-
return Array.from(destroyListeners)
|
|
2826
|
-
}
|
|
2827
|
-
|
|
2828
|
-
return {
|
|
2829
|
-
// @ts-expect-error This is correct type
|
|
2830
|
-
async inject(token, args) {
|
|
2831
|
-
const instanceName = self.generateInstanceName(token, args)
|
|
2832
|
-
|
|
2833
|
-
// Check request contexts for pre-prepared instances
|
|
2834
|
-
const prePreparedInstance = self.tryGetPrePreparedInstance(
|
|
2835
|
-
instanceName,
|
|
2836
|
-
contextHolder,
|
|
2837
|
-
deps,
|
|
2838
|
-
)
|
|
2839
|
-
if (prePreparedInstance !== undefined) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2840
|
-
<span class="cstat-no" title="statement not covered" > return prePreparedInstance</span>
|
|
2841
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2842
|
-
|
|
2843
|
-
// Fall back to normal resolution
|
|
2844
|
-
const [error, instance] = await self.getInstance(
|
|
2845
|
-
token,
|
|
2846
|
-
args,
|
|
2847
|
-
({ instanceName }) => {
|
|
2848
|
-
deps.add(instanceName)
|
|
2849
|
-
},
|
|
2850
|
-
)
|
|
2851
|
-
if (error) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2852
|
-
<span class="cstat-no" title="statement not covered" > throw error</span>
|
|
2853
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2854
|
-
return instance
|
|
2855
|
-
},
|
|
2856
|
-
addDestroyListener,
|
|
2857
|
-
getDestroyListeners,
|
|
2858
|
-
locator: self,
|
|
2859
|
-
deps,
|
|
2860
|
-
}
|
|
775
|
+
async ready(): Promise<void> {
|
|
776
|
+
return this.serviceInvalidator.ready()
|
|
2861
777
|
}
|
|
2862
778
|
|
|
2863
779
|
/**
|
|
2864
|
-
*
|
|
780
|
+
* Helper method for TokenProcessor to access pre-prepared instances.
|
|
781
|
+
* This is needed for the factory context creation.
|
|
2865
782
|
*/
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
}
|
|
783
|
+
<span class="fstat-no" title="function not covered" > tryGetPrePreparedInstance(</span>
|
|
784
|
+
<span class="cstat-no" title="statement not covered" > instanceName: string,</span>
|
|
785
|
+
<span class="cstat-no" title="statement not covered" > contextHolder: RequestContextHolder | undefined,</span>
|
|
786
|
+
<span class="cstat-no" title="statement not covered" > deps: Set<string>,</span>
|
|
787
|
+
<span class="cstat-no" title="statement not covered" > ): any {</span>
|
|
788
|
+
<span class="cstat-no" title="statement not covered" > return this.tokenProcessor.tryGetPrePreparedInstance(</span>
|
|
789
|
+
<span class="cstat-no" title="statement not covered" > instanceName,</span>
|
|
790
|
+
<span class="cstat-no" title="statement not covered" > contextHolder,</span>
|
|
791
|
+
<span class="cstat-no" title="statement not covered" > deps,</span>
|
|
792
|
+
<span class="cstat-no" title="statement not covered" > this.requestContextManager.getCurrentRequestContext(),</span>
|
|
793
|
+
<span class="cstat-no" title="statement not covered" > )</span>
|
|
794
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2878
795
|
|
|
2879
796
|
/**
|
|
2880
|
-
*
|
|
797
|
+
* Helper method for InstanceResolver to generate instance names.
|
|
798
|
+
* This is needed for the factory context creation.
|
|
2881
799
|
*/
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
}
|
|
2886
|
-
if (typeof value === 'symbol') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2887
|
-
<span class="cstat-no" title="statement not covered" > return value.toString()</span>
|
|
2888
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2889
|
-
return JSON.stringify(value).slice(0, 40)
|
|
2890
|
-
}
|
|
800
|
+
<span class="fstat-no" title="function not covered" > generateInstanceName(token: any, args: any): string {</span>
|
|
801
|
+
<span class="cstat-no" title="statement not covered" > return this.tokenProcessor.generateInstanceName(token, args)</span>
|
|
802
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2891
803
|
}
|
|
2892
804
|
</pre></td></tr></table></pre>
|
|
2893
805
|
|
|
@@ -2896,7 +808,7 @@ export class ServiceLocator {
|
|
|
2896
808
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2897
809
|
Code coverage generated by
|
|
2898
810
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2899
|
-
at 2025-09-
|
|
811
|
+
at 2025-09-21T17:47:07.632Z
|
|
2900
812
|
</div>
|
|
2901
813
|
<script src="../prettify.js"></script>
|
|
2902
814
|
<script>
|