summaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-08-21 13:47:02 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-09-21 10:29:41 +0200
commitbcdce02d9bc8150e1d191ed5ca9da45b7604964a (patch)
tree3b2faf509db7672ee1fc98857736470be97e7ed8 /testsuite
parentUpdate to FreeBSD head 2018-04-01 (diff)
downloadrtems-libbsd-bcdce02d9bc8150e1d191ed5ca9da45b7604964a.tar.bz2
Update to FreeBSD head 2018-06-01
Git mirror commit fb63610a69b0eb7f69a201ba05c4c1a7a2739cf9. Update #3472.
Diffstat (limited to 'testsuite')
-rwxr-xr-xtestsuite/epoch01/epoch01.py79
-rw-r--r--testsuite/epoch01/epoch01.scn2342
-rw-r--r--testsuite/epoch01/test_main.c596
3 files changed, 3017 insertions, 0 deletions
diff --git a/testsuite/epoch01/epoch01.py b/testsuite/epoch01/epoch01.py
new file mode 100755
index 00000000..8bfd8de3
--- /dev/null
+++ b/testsuite/epoch01/epoch01.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+
+#
+# Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+#
+# embedded brains GmbH
+# Dornierstr. 4
+# 82178 Puchheim
+# Germany
+# <rtems@embedded-brains.de>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+import re
+import libxml2
+from libxml2 import xmlNode
+import matplotlib.pyplot as plt
+data = open('epoch01.scn').read()
+data = re.sub(r'\*\*\*.*\*\*\*', '', data)
+doc = libxml2.parseDoc(data)
+ctx = doc.xpathNewContext()
+
+plt.yscale('log')
+plt.title('Epoch Performance')
+plt.xlabel('Active Workers')
+plt.ylabel('Operation Count')
+
+def m(n):
+ return int(n.getContent())
+
+def getCounterSums(variant):
+ w = 1
+ y = []
+ while True:
+ c = map(m, ctx.xpathEval('/TestEpoch01/' + variant + '[@activeWorker="' + str(w) + '"]/Counter'))
+ if not c:
+ break
+ y.append(sum(c))
+ w = w + 1
+ return y
+
+y = getCounterSums('ThreadLocalMutex')
+x = range(1, len(y) + 1)
+plt.plot(x, y, label = 'Thread-Local Mutex', marker = 'o')
+
+y = getCounterSums('EnterExit')
+plt.plot(x, y, label = 'Enter Exit', marker = 'o')
+
+y = getCounterSums('EnterExitPreempt')
+plt.plot(x, y, label = 'Enter Exit Preempt', marker = 'o')
+
+y = getCounterSums('EnterListOpExit')
+plt.plot(x, y, label = 'Enter List Op Exit', marker = 'o')
+
+y = getCounterSums('EnterListOpExitPreempt')
+plt.plot(x, y, label = 'Enter List Op Exit Preempt', marker = 'o')
+
+plt.legend(loc = 'best')
+plt.show()
diff --git a/testsuite/epoch01/epoch01.scn b/testsuite/epoch01/epoch01.scn
new file mode 100644
index 00000000..aafebc5d
--- /dev/null
+++ b/testsuite/epoch01/epoch01.scn
@@ -0,0 +1,2342 @@
+<TestEpoch01>
+ <EnterExit activeWorker="1">
+ <Counter worker="0">4681303</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="2">
+ <Counter worker="0">3549510</Counter>
+ <Counter worker="1">3559719</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="3">
+ <Counter worker="0">3480802</Counter>
+ <Counter worker="1">3490567</Counter>
+ <Counter worker="2">4651841</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="4">
+ <Counter worker="0">3518160</Counter>
+ <Counter worker="1">3528002</Counter>
+ <Counter worker="2">3526473</Counter>
+ <Counter worker="3">3526462</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="5">
+ <Counter worker="0">3473951</Counter>
+ <Counter worker="1">3483916</Counter>
+ <Counter worker="2">3482262</Counter>
+ <Counter worker="3">3482276</Counter>
+ <Counter worker="4">4642986</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="6">
+ <Counter worker="0">3499124</Counter>
+ <Counter worker="1">3509073</Counter>
+ <Counter worker="2">3507477</Counter>
+ <Counter worker="3">3507459</Counter>
+ <Counter worker="4">3507449</Counter>
+ <Counter worker="5">3507487</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="7">
+ <Counter worker="0">3461429</Counter>
+ <Counter worker="1">3471389</Counter>
+ <Counter worker="2">3469767</Counter>
+ <Counter worker="3">3469750</Counter>
+ <Counter worker="4">3469775</Counter>
+ <Counter worker="5">3469767</Counter>
+ <Counter worker="6">4608209</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="8">
+ <Counter worker="0">3493807</Counter>
+ <Counter worker="1">3503732</Counter>
+ <Counter worker="2">3502201</Counter>
+ <Counter worker="3">3502218</Counter>
+ <Counter worker="4">3502206</Counter>
+ <Counter worker="5">3502205</Counter>
+ <Counter worker="6">3502191</Counter>
+ <Counter worker="7">3502238</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="9">
+ <Counter worker="0">3342598</Counter>
+ <Counter worker="1">3352508</Counter>
+ <Counter worker="2">3351027</Counter>
+ <Counter worker="3">3351021</Counter>
+ <Counter worker="4">3351036</Counter>
+ <Counter worker="5">3351046</Counter>
+ <Counter worker="6">3351027</Counter>
+ <Counter worker="7">3351055</Counter>
+ <Counter worker="8">4410507</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="10">
+ <Counter worker="0">3432709</Counter>
+ <Counter worker="1">3442606</Counter>
+ <Counter worker="2">3441223</Counter>
+ <Counter worker="3">3441252</Counter>
+ <Counter worker="4">3441253</Counter>
+ <Counter worker="5">3441239</Counter>
+ <Counter worker="6">3441252</Counter>
+ <Counter worker="7">3441215</Counter>
+ <Counter worker="8">3441178</Counter>
+ <Counter worker="9">3441189</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="11">
+ <Counter worker="0">3117605</Counter>
+ <Counter worker="1">3127512</Counter>
+ <Counter worker="2">3125832</Counter>
+ <Counter worker="3">3125836</Counter>
+ <Counter worker="4">3125819</Counter>
+ <Counter worker="5">3125838</Counter>
+ <Counter worker="6">3125842</Counter>
+ <Counter worker="7">3125817</Counter>
+ <Counter worker="8">3125776</Counter>
+ <Counter worker="9">3125788</Counter>
+ <Counter worker="10">4167639</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="12">
+ <Counter worker="0">3114562</Counter>
+ <Counter worker="1">3124485</Counter>
+ <Counter worker="2">3122722</Counter>
+ <Counter worker="3">3122707</Counter>
+ <Counter worker="4">3122707</Counter>
+ <Counter worker="5">3122714</Counter>
+ <Counter worker="6">3122709</Counter>
+ <Counter worker="7">3122716</Counter>
+ <Counter worker="8">3122678</Counter>
+ <Counter worker="9">3122670</Counter>
+ <Counter worker="10">3122679</Counter>
+ <Counter worker="11">3122657</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="13">
+ <Counter worker="0">2758135</Counter>
+ <Counter worker="1">2768036</Counter>
+ <Counter worker="2">2766152</Counter>
+ <Counter worker="3">2766147</Counter>
+ <Counter worker="4">2766152</Counter>
+ <Counter worker="5">2766144</Counter>
+ <Counter worker="6">2766134</Counter>
+ <Counter worker="7">2766166</Counter>
+ <Counter worker="8">2766125</Counter>
+ <Counter worker="9">2766121</Counter>
+ <Counter worker="10">2766129</Counter>
+ <Counter worker="11">2766121</Counter>
+ <Counter worker="12">3986835</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="14">
+ <Counter worker="0">2666731</Counter>
+ <Counter worker="1">2676680</Counter>
+ <Counter worker="2">2674562</Counter>
+ <Counter worker="3">2674527</Counter>
+ <Counter worker="4">2674549</Counter>
+ <Counter worker="5">2674538</Counter>
+ <Counter worker="6">2674531</Counter>
+ <Counter worker="7">2674574</Counter>
+ <Counter worker="8">2674514</Counter>
+ <Counter worker="9">2674524</Counter>
+ <Counter worker="10">2674513</Counter>
+ <Counter worker="11">2674517</Counter>
+ <Counter worker="12">2674517</Counter>
+ <Counter worker="13">2674507</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="15">
+ <Counter worker="0">2393863</Counter>
+ <Counter worker="1">2403773</Counter>
+ <Counter worker="2">2401561</Counter>
+ <Counter worker="3">2401557</Counter>
+ <Counter worker="4">2401575</Counter>
+ <Counter worker="5">2401541</Counter>
+ <Counter worker="6">2401562</Counter>
+ <Counter worker="7">2401559</Counter>
+ <Counter worker="8">2401531</Counter>
+ <Counter worker="9">2401542</Counter>
+ <Counter worker="10">2401537</Counter>
+ <Counter worker="11">2401551</Counter>
+ <Counter worker="12">2401537</Counter>
+ <Counter worker="13">2401535</Counter>
+ <Counter worker="14">3602503</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="16">
+ <Counter worker="0">2316897</Counter>
+ <Counter worker="1">2326796</Counter>
+ <Counter worker="2">2324443</Counter>
+ <Counter worker="3">2324416</Counter>
+ <Counter worker="4">2324416</Counter>
+ <Counter worker="5">2324424</Counter>
+ <Counter worker="6">2324405</Counter>
+ <Counter worker="7">2324440</Counter>
+ <Counter worker="8">2324378</Counter>
+ <Counter worker="9">2324353</Counter>
+ <Counter worker="10">2324394</Counter>
+ <Counter worker="11">2324371</Counter>
+ <Counter worker="12">2324367</Counter>
+ <Counter worker="13">2324383</Counter>
+ <Counter worker="14">2324369</Counter>
+ <Counter worker="15">2324394</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="17">
+ <Counter worker="0">2109578</Counter>
+ <Counter worker="1">2119491</Counter>
+ <Counter worker="2">2117067</Counter>
+ <Counter worker="3">2117056</Counter>
+ <Counter worker="4">2117089</Counter>
+ <Counter worker="5">2117047</Counter>
+ <Counter worker="6">2117057</Counter>
+ <Counter worker="7">2117085</Counter>
+ <Counter worker="8">2117019</Counter>
+ <Counter worker="9">2117028</Counter>
+ <Counter worker="10">2117009</Counter>
+ <Counter worker="11">2117035</Counter>
+ <Counter worker="12">2117003</Counter>
+ <Counter worker="13">2117018</Counter>
+ <Counter worker="14">2117030</Counter>
+ <Counter worker="15">2117003</Counter>
+ <Counter worker="16">3264476</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="18">
+ <Counter worker="0">2062704</Counter>
+ <Counter worker="1">2072566</Counter>
+ <Counter worker="2">2070055</Counter>
+ <Counter worker="3">2070092</Counter>
+ <Counter worker="4">2070069</Counter>
+ <Counter worker="5">2070075</Counter>
+ <Counter worker="6">2070078</Counter>
+ <Counter worker="7">2070076</Counter>
+ <Counter worker="8">2070032</Counter>
+ <Counter worker="9">2070030</Counter>
+ <Counter worker="10">2070033</Counter>
+ <Counter worker="11">2070045</Counter>
+ <Counter worker="12">2070034</Counter>
+ <Counter worker="13">2070017</Counter>
+ <Counter worker="14">2070038</Counter>
+ <Counter worker="15">2070040</Counter>
+ <Counter worker="16">2070051</Counter>
+ <Counter worker="17">2070071</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="19">
+ <Counter worker="0">1951736</Counter>
+ <Counter worker="1">1961591</Counter>
+ <Counter worker="2">1784490</Counter>
+ <Counter worker="3">1784459</Counter>
+ <Counter worker="4">1959411</Counter>
+ <Counter worker="5">1959415</Counter>
+ <Counter worker="6">1959461</Counter>
+ <Counter worker="7">1959482</Counter>
+ <Counter worker="8">1959003</Counter>
+ <Counter worker="9">1959004</Counter>
+ <Counter worker="10">1784452</Counter>
+ <Counter worker="11">1784439</Counter>
+ <Counter worker="12">1959383</Counter>
+ <Counter worker="13">1959358</Counter>
+ <Counter worker="14">1959416</Counter>
+ <Counter worker="15">1959430</Counter>
+ <Counter worker="16">1959034</Counter>
+ <Counter worker="17">1959023</Counter>
+ <Counter worker="18">2854197</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="20">
+ <Counter worker="0">1866629</Counter>
+ <Counter worker="1">1876698</Counter>
+ <Counter worker="2">1874511</Counter>
+ <Counter worker="3">1874507</Counter>
+ <Counter worker="4">1874529</Counter>
+ <Counter worker="5">1874529</Counter>
+ <Counter worker="6">1874515</Counter>
+ <Counter worker="7">1874548</Counter>
+ <Counter worker="8">1873869</Counter>
+ <Counter worker="9">1873871</Counter>
+ <Counter worker="10">1874492</Counter>
+ <Counter worker="11">1874458</Counter>
+ <Counter worker="12">1874493</Counter>
+ <Counter worker="13">1874492</Counter>
+ <Counter worker="14">1874484</Counter>
+ <Counter worker="15">1874498</Counter>
+ <Counter worker="16">1873903</Counter>
+ <Counter worker="17">1873915</Counter>
+ <Counter worker="18">1874511</Counter>
+ <Counter worker="19">1874526</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="21">
+ <Counter worker="0">1740567</Counter>
+ <Counter worker="1">1750409</Counter>
+ <Counter worker="2">1747962</Counter>
+ <Counter worker="3">1747980</Counter>
+ <Counter worker="4">1627929</Counter>
+ <Counter worker="5">1627933</Counter>
+ <Counter worker="6">1747970</Counter>
+ <Counter worker="7">1747982</Counter>
+ <Counter worker="8">1747540</Counter>
+ <Counter worker="9">1747537</Counter>
+ <Counter worker="10">1747916</Counter>
+ <Counter worker="11">1747949</Counter>
+ <Counter worker="12">1627885</Counter>
+ <Counter worker="13">1627903</Counter>
+ <Counter worker="14">1747966</Counter>
+ <Counter worker="15">1747910</Counter>
+ <Counter worker="16">1747575</Counter>
+ <Counter worker="17">1747584</Counter>
+ <Counter worker="18">1747963</Counter>
+ <Counter worker="19">1747992</Counter>
+ <Counter worker="20">2650677</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="22">
+ <Counter worker="0">1695213</Counter>
+ <Counter worker="1">1705070</Counter>
+ <Counter worker="2">1702542</Counter>
+ <Counter worker="3">1702552</Counter>
+ <Counter worker="4">1702539</Counter>
+ <Counter worker="5">1702528</Counter>
+ <Counter worker="6">1702526</Counter>
+ <Counter worker="7">1702547</Counter>
+ <Counter worker="8">1702150</Counter>
+ <Counter worker="9">1702162</Counter>
+ <Counter worker="10">1702490</Counter>
+ <Counter worker="11">1702507</Counter>
+ <Counter worker="12">1702486</Counter>
+ <Counter worker="13">1702505</Counter>
+ <Counter worker="14">1702506</Counter>
+ <Counter worker="15">1702486</Counter>
+ <Counter worker="16">1702210</Counter>
+ <Counter worker="17">1702202</Counter>
+ <Counter worker="18">1702536</Counter>
+ <Counter worker="19">1702543</Counter>
+ <Counter worker="20">1702549</Counter>
+ <Counter worker="21">1702519</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="23">
+ <Counter worker="0">1591896</Counter>
+ <Counter worker="1">1601705</Counter>
+ <Counter worker="2">1599175</Counter>
+ <Counter worker="3">1599169</Counter>
+ <Counter worker="4">1599143</Counter>
+ <Counter worker="5">1599178</Counter>
+ <Counter worker="6">1494516</Counter>
+ <Counter worker="7">1494558</Counter>
+ <Counter worker="8">1598772</Counter>
+ <Counter worker="9">1598790</Counter>
+ <Counter worker="10">1599109</Counter>
+ <Counter worker="11">1599125</Counter>
+ <Counter worker="12">1599120</Counter>
+ <Counter worker="13">1599114</Counter>
+ <Counter worker="14">1494495</Counter>
+ <Counter worker="15">1494476</Counter>
+ <Counter worker="16">1598826</Counter>
+ <Counter worker="17">1598824</Counter>
+ <Counter worker="18">1599147</Counter>
+ <Counter worker="19">1599177</Counter>
+ <Counter worker="20">1599154</Counter>
+ <Counter worker="21">1599165</Counter>
+ <Counter worker="22">2410141</Counter>
+ </EnterExit>
+ <EnterExit activeWorker="24">
+ <Counter worker="0">1542824</Counter>
+ <Counter worker="1">1552783</Counter>
+ <Counter worker="2">1550219</Counter>
+ <Counter worker="3">1550178</Counter>
+ <Counter worker="4">1550192</Counter>
+ <Counter worker="5">1550202</Counter>
+ <Counter worker="6">1550188</Counter>
+ <Counter worker="7">1550186</Counter>
+ <Counter worker="8">1549818</Counter>
+ <Counter worker="9">1549833</Counter>
+ <Counter worker="10">1550142</Counter>
+ <Counter worker="11">1550191</Counter>
+ <Counter worker="12">1550164</Counter>
+ <Counter worker="13">1550176</Counter>
+ <Counter worker="14">1550141</Counter>
+ <Counter worker="15">1550141</Counter>
+ <Counter worker="16">1549864</Counter>
+ <Counter worker="17">1549870</Counter>
+ <Counter worker="18">1550195</Counter>
+ <Counter worker="19">1550207</Counter>
+ <Counter worker="20">1550195</Counter>
+ <Counter worker="21">1550202</Counter>
+ <Counter worker="22">1548373</Counter>
+ <Counter worker="23">1550453</Counter>
+ </EnterExit>
+ <EnterListOpExit activeWorker="1">
+ <Counter worker="0">4602414</Counter>
+ <Removals worker="0">100</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="2">
+ <Counter worker="0">2363962</Counter>
+ <Counter worker="1">2360418</Counter>
+ <Removals worker="0">38</Removals>
+ <Removals worker="1">38</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="3">
+ <Counter worker="0">1754350</Counter>
+ <Counter worker="1">1756759</Counter>
+ <Counter worker="2">2481981</Counter>
+ <Removals worker="0">12</Removals>
+ <Removals worker="1">12</Removals>
+ <Removals worker="2">11</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="4">
+ <Counter worker="0">1414555</Counter>
+ <Counter worker="1">1413264</Counter>
+ <Counter worker="2">1414596</Counter>
+ <Counter worker="3">1413456</Counter>
+ <Removals worker="0">11</Removals>
+ <Removals worker="1">11</Removals>
+ <Removals worker="2">11</Removals>
+ <Removals worker="3">10</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="5">
+ <Counter worker="0">1170602</Counter>
+ <Counter worker="1">1170851</Counter>
+ <Counter worker="2">1170701</Counter>
+ <Counter worker="3">1170945</Counter>
+ <Counter worker="4">1653757</Counter>
+ <Removals worker="0">10</Removals>
+ <Removals worker="1">10</Removals>
+ <Removals worker="2">10</Removals>
+ <Removals worker="3">10</Removals>
+ <Removals worker="4">10</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="6">
+ <Counter worker="0">1010633</Counter>
+ <Counter worker="1">1012037</Counter>
+ <Counter worker="2">1011637</Counter>
+ <Counter worker="3">1011674</Counter>
+ <Counter worker="4">1011938</Counter>
+ <Counter worker="5">1010872</Counter>
+ <Removals worker="0">9</Removals>
+ <Removals worker="1">9</Removals>
+ <Removals worker="2">8</Removals>
+ <Removals worker="3">8</Removals>
+ <Removals worker="4">8</Removals>
+ <Removals worker="5">8</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="7">
+ <Counter worker="0">856667</Counter>
+ <Counter worker="1">855812</Counter>
+ <Counter worker="2">856461</Counter>
+ <Counter worker="3">856526</Counter>
+ <Counter worker="4">856782</Counter>
+ <Counter worker="5">855850</Counter>
+ <Counter worker="6">1223300</Counter>
+ <Removals worker="0">8</Removals>
+ <Removals worker="1">7</Removals>
+ <Removals worker="2">7</Removals>
+ <Removals worker="3">7</Removals>
+ <Removals worker="4">7</Removals>
+ <Removals worker="5">7</Removals>
+ <Removals worker="6">7</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="8">
+ <Counter worker="0">789251</Counter>
+ <Counter worker="1">789410</Counter>
+ <Counter worker="2">789370</Counter>
+ <Counter worker="3">789404</Counter>
+ <Counter worker="4">788991</Counter>
+ <Counter worker="5">789003</Counter>
+ <Counter worker="6">789373</Counter>
+ <Counter worker="7">789372</Counter>
+ <Removals worker="0">7</Removals>
+ <Removals worker="1">7</Removals>
+ <Removals worker="2">6</Removals>
+ <Removals worker="3">6</Removals>
+ <Removals worker="4">6</Removals>
+ <Removals worker="5">6</Removals>
+ <Removals worker="6">6</Removals>
+ <Removals worker="7">6</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="9">
+ <Counter worker="0">646736</Counter>
+ <Counter worker="1">645999</Counter>
+ <Counter worker="2">646562</Counter>
+ <Counter worker="3">646606</Counter>
+ <Counter worker="4">646584</Counter>
+ <Counter worker="5">646613</Counter>
+ <Counter worker="6">646597</Counter>
+ <Counter worker="7">646629</Counter>
+ <Counter worker="8">991844</Counter>
+ <Removals worker="0">6</Removals>
+ <Removals worker="1">6</Removals>
+ <Removals worker="2">6</Removals>
+ <Removals worker="3">6</Removals>
+ <Removals worker="4">6</Removals>
+ <Removals worker="5">5</Removals>
+ <Removals worker="6">5</Removals>
+ <Removals worker="7">5</Removals>
+ <Removals worker="8">5</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="10">
+ <Counter worker="0">626763</Counter>
+ <Counter worker="1">626902</Counter>
+ <Counter worker="2">626340</Counter>
+ <Counter worker="3">627165</Counter>
+ <Counter worker="4">626860</Counter>
+ <Counter worker="5">626895</Counter>
+ <Counter worker="6">627074</Counter>
+ <Counter worker="7">626257</Counter>
+ <Counter worker="8">626811</Counter>
+ <Counter worker="9">626856</Counter>
+ <Removals worker="0">5</Removals>
+ <Removals worker="1">5</Removals>
+ <Removals worker="2">5</Removals>
+ <Removals worker="3">5</Removals>
+ <Removals worker="4">5</Removals>
+ <Removals worker="5">5</Removals>
+ <Removals worker="6">5</Removals>
+ <Removals worker="7">5</Removals>
+ <Removals worker="8">5</Removals>
+ <Removals worker="9">5</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="11">
+ <Counter worker="0">513748</Counter>
+ <Counter worker="1">513853</Counter>
+ <Counter worker="2">513844</Counter>
+ <Counter worker="3">513845</Counter>
+ <Counter worker="4">513381</Counter>
+ <Counter worker="5">514111</Counter>
+ <Counter worker="6">514100</Counter>
+ <Counter worker="7">513416</Counter>
+ <Counter worker="8">513814</Counter>
+ <Counter worker="9">513832</Counter>
+ <Counter worker="10">822053</Counter>
+ <Removals worker="0">5</Removals>
+ <Removals worker="1">5</Removals>
+ <Removals worker="2">5</Removals>
+ <Removals worker="3">5</Removals>
+ <Removals worker="4">5</Removals>
+ <Removals worker="5">5</Removals>
+ <Removals worker="6">4</Removals>
+ <Removals worker="7">4</Removals>
+ <Removals worker="8">4</Removals>
+ <Removals worker="9">4</Removals>
+ <Removals worker="10">4</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="12">
+ <Counter worker="0">479507</Counter>
+ <Counter worker="1">479633</Counter>
+ <Counter worker="2">479796</Counter>
+ <Counter worker="3">479790</Counter>
+ <Counter worker="4">479797</Counter>
+ <Counter worker="5">479776</Counter>
+ <Counter worker="6">479782</Counter>
+ <Counter worker="7">479792</Counter>
+ <Counter worker="8">479752</Counter>
+ <Counter worker="9">479775</Counter>
+ <Counter worker="10">479763</Counter>
+ <Counter worker="11">479765</Counter>
+ <Removals worker="0">5</Removals>
+ <Removals worker="1">5</Removals>
+ <Removals worker="2">4</Removals>
+ <Removals worker="3">4</Removals>
+ <Removals worker="4">4</Removals>
+ <Removals worker="5">4</Removals>
+ <Removals worker="6">4</Removals>
+ <Removals worker="7">4</Removals>
+ <Removals worker="8">4</Removals>
+ <Removals worker="9">4</Removals>
+ <Removals worker="10">4</Removals>
+ <Removals worker="11">4</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="13">
+ <Counter worker="0">388408</Counter>
+ <Counter worker="1">388492</Counter>
+ <Counter worker="2">388490</Counter>
+ <Counter worker="3">388490</Counter>
+ <Counter worker="4">388480</Counter>
+ <Counter worker="5">388494</Counter>
+ <Counter worker="6">388985</Counter>
+ <Counter worker="7">387693</Counter>
+ <Counter worker="8">388472</Counter>
+ <Counter worker="9">388472</Counter>
+ <Counter worker="10">388473</Counter>
+ <Counter worker="11">388513</Counter>
+ <Counter worker="12">647167</Counter>
+ <Removals worker="0">4</Removals>
+ <Removals worker="1">4</Removals>
+ <Removals worker="2">4</Removals>
+ <Removals worker="3">4</Removals>
+ <Removals worker="4">4</Removals>
+ <Removals worker="5">4</Removals>
+ <Removals worker="6">4</Removals>
+ <Removals worker="7">4</Removals>
+ <Removals worker="8">4</Removals>
+ <Removals worker="9">4</Removals>
+ <Removals worker="10">4</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="14">
+ <Counter worker="0">356221</Counter>
+ <Counter worker="1">356334</Counter>
+ <Counter worker="2">355962</Counter>
+ <Counter worker="3">356556</Counter>
+ <Counter worker="4">356313</Counter>
+ <Counter worker="5">356315</Counter>
+ <Counter worker="6">356310</Counter>
+ <Counter worker="7">356331</Counter>
+ <Counter worker="8">356306</Counter>
+ <Counter worker="9">356325</Counter>
+ <Counter worker="10">356303</Counter>
+ <Counter worker="11">356321</Counter>
+ <Counter worker="12">356510</Counter>
+ <Counter worker="13">355868</Counter>
+ <Removals worker="0">4</Removals>
+ <Removals worker="1">4</Removals>
+ <Removals worker="2">4</Removals>
+ <Removals worker="3">4</Removals>
+ <Removals worker="4">4</Removals>
+ <Removals worker="5">4</Removals>
+ <Removals worker="6">4</Removals>
+ <Removals worker="7">4</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ <Removals worker="13">3</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="15">
+ <Counter worker="0">297570</Counter>
+ <Counter worker="1">297659</Counter>
+ <Counter worker="2">297645</Counter>
+ <Counter worker="3">297646</Counter>
+ <Counter worker="4">297647</Counter>
+ <Counter worker="5">297665</Counter>
+ <Counter worker="6">297252</Counter>
+ <Counter worker="7">297821</Counter>
+ <Counter worker="8">297642</Counter>
+ <Counter worker="9">297652</Counter>
+ <Counter worker="10">297850</Counter>
+ <Counter worker="11">297316</Counter>
+ <Counter worker="12">297641</Counter>
+ <Counter worker="13">297669</Counter>
+ <Counter worker="14">509694</Counter>
+ <Removals worker="0">4</Removals>
+ <Removals worker="1">4</Removals>
+ <Removals worker="2">4</Removals>
+ <Removals worker="3">4</Removals>
+ <Removals worker="4">4</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ <Removals worker="13">3</Removals>
+ <Removals worker="14">3</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="16">
+ <Counter worker="0">273646</Counter>
+ <Counter worker="1">273767</Counter>
+ <Counter worker="2">273746</Counter>
+ <Counter worker="3">273751</Counter>
+ <Counter worker="4">273734</Counter>
+ <Counter worker="5">273752</Counter>
+ <Counter worker="6">273440</Counter>
+ <Counter worker="7">273957</Counter>
+ <Counter worker="8">273729</Counter>
+ <Counter worker="9">273743</Counter>
+ <Counter worker="10">273743</Counter>
+ <Counter worker="11">273740</Counter>
+ <Counter worker="12">273742</Counter>
+ <Counter worker="13">273741</Counter>
+ <Counter worker="14">273904</Counter>
+ <Counter worker="15">273362</Counter>
+ <Removals worker="0">4</Removals>
+ <Removals worker="1">4</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ <Removals worker="13">3</Removals>
+ <Removals worker="14">3</Removals>
+ <Removals worker="15">3</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="17">
+ <Counter worker="0">232885</Counter>
+ <Counter worker="1">232443</Counter>
+ <Counter worker="2">232788</Counter>
+ <Counter worker="3">232794</Counter>
+ <Counter worker="4">232786</Counter>
+ <Counter worker="5">232795</Counter>
+ <Counter worker="6">232785</Counter>
+ <Counter worker="7">232792</Counter>
+ <Counter worker="8">232938</Counter>
+ <Counter worker="9">232423</Counter>
+ <Counter worker="10">232786</Counter>
+ <Counter worker="11">232784</Counter>
+ <Counter worker="12">232784</Counter>
+ <Counter worker="13">232788</Counter>
+ <Counter worker="14">232776</Counter>
+ <Counter worker="15">232805</Counter>
+ <Counter worker="16">407811</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ <Removals worker="13">3</Removals>
+ <Removals worker="14">3</Removals>
+ <Removals worker="15">3</Removals>
+ <Removals worker="16">2</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="18">
+ <Counter worker="0">219185</Counter>
+ <Counter worker="1">218792</Counter>
+ <Counter worker="2">219052</Counter>
+ <Counter worker="3">219051</Counter>
+ <Counter worker="4">219049</Counter>
+ <Counter worker="5">219050</Counter>
+ <Counter worker="6">219049</Counter>
+ <Counter worker="7">219052</Counter>
+ <Counter worker="8">219206</Counter>
+ <Counter worker="9">218704</Counter>
+ <Counter worker="10">219041</Counter>
+ <Counter worker="11">219055</Counter>
+ <Counter worker="12">219041</Counter>
+ <Counter worker="13">219061</Counter>
+ <Counter worker="14">219057</Counter>
+ <Counter worker="15">219044</Counter>
+ <Counter worker="16">219042</Counter>
+ <Counter worker="17">219048</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ <Removals worker="13">3</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="19">
+ <Counter worker="0">197527</Counter>
+ <Counter worker="1">198092</Counter>
+ <Counter worker="2">158895</Counter>
+ <Counter worker="3">158890</Counter>
+ <Counter worker="4">197869</Counter>
+ <Counter worker="5">197874</Counter>
+ <Counter worker="6">198124</Counter>
+ <Counter worker="7">198132</Counter>
+ <Counter worker="8">197900</Counter>
+ <Counter worker="9">197918</Counter>
+ <Counter worker="10">158882</Counter>
+ <Counter worker="11">158901</Counter>
+ <Counter worker="12">198074</Counter>
+ <Counter worker="13">197615</Counter>
+ <Counter worker="14">198135</Counter>
+ <Counter worker="15">198135</Counter>
+ <Counter worker="16">197911</Counter>
+ <Counter worker="17">197923</Counter>
+ <Counter worker="18">307966</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="20">
+ <Counter worker="0">176815</Counter>
+ <Counter worker="1">176895</Counter>
+ <Counter worker="2">176880</Counter>
+ <Counter worker="3">176877</Counter>
+ <Counter worker="4">176855</Counter>
+ <Counter worker="5">176854</Counter>
+ <Counter worker="6">177056</Counter>
+ <Counter worker="7">176612</Counter>
+ <Counter worker="8">176863</Counter>
+ <Counter worker="9">176880</Counter>
+ <Counter worker="10">176882</Counter>
+ <Counter worker="11">176880</Counter>
+ <Counter worker="12">176570</Counter>
+ <Counter worker="13">177022</Counter>
+ <Counter worker="14">176848</Counter>
+ <Counter worker="15">176856</Counter>
+ <Counter worker="16">176878</Counter>
+ <Counter worker="17">176882</Counter>
+ <Counter worker="18">176885</Counter>
+ <Counter worker="19">176878</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">2</Removals>
+ <Removals worker="11">2</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ <Removals worker="19">2</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="21">
+ <Counter worker="0">154576</Counter>
+ <Counter worker="1">155081</Counter>
+ <Counter worker="2">155108</Counter>
+ <Counter worker="3">154685</Counter>
+ <Counter worker="4">153720</Counter>
+ <Counter worker="5">153702</Counter>
+ <Counter worker="6">154913</Counter>
+ <Counter worker="7">154922</Counter>
+ <Counter worker="8">154909</Counter>
+ <Counter worker="9">154897</Counter>
+ <Counter worker="10">154907</Counter>
+ <Counter worker="11">154909</Counter>
+ <Counter worker="12">153714</Counter>
+ <Counter worker="13">153712</Counter>
+ <Counter worker="14">154913</Counter>
+ <Counter worker="15">154922</Counter>
+ <Counter worker="16">154907</Counter>
+ <Counter worker="17">154915</Counter>
+ <Counter worker="18">154916</Counter>
+ <Counter worker="19">154905</Counter>
+ <Counter worker="20">300604</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">2</Removals>
+ <Removals worker="9">2</Removals>
+ <Removals worker="10">2</Removals>
+ <Removals worker="11">2</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ <Removals worker="19">2</Removals>
+ <Removals worker="20">2</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="22">
+ <Counter worker="0">147956</Counter>
+ <Counter worker="1">148026</Counter>
+ <Counter worker="2">148009</Counter>
+ <Counter worker="3">148015</Counter>
+ <Counter worker="4">148011</Counter>
+ <Counter worker="5">148013</Counter>
+ <Counter worker="6">148031</Counter>
+ <Counter worker="7">148016</Counter>
+ <Counter worker="8">148008</Counter>
+ <Counter worker="9">148015</Counter>
+ <Counter worker="10">148016</Counter>
+ <Counter worker="11">148018</Counter>
+ <Counter worker="12">148013</Counter>
+ <Counter worker="13">148016</Counter>
+ <Counter worker="14">148019</Counter>
+ <Counter worker="15">148019</Counter>
+ <Counter worker="16">148170</Counter>
+ <Counter worker="17">147750</Counter>
+ <Counter worker="18">148023</Counter>
+ <Counter worker="19">148021</Counter>
+ <Counter worker="20">147810</Counter>
+ <Counter worker="21">148209</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">2</Removals>
+ <Removals worker="7">2</Removals>
+ <Removals worker="8">2</Removals>
+ <Removals worker="9">2</Removals>
+ <Removals worker="10">2</Removals>
+ <Removals worker="11">2</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ <Removals worker="19">2</Removals>
+ <Removals worker="20">2</Removals>
+ <Removals worker="21">2</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="23">
+ <Counter worker="0">129551</Counter>
+ <Counter worker="1">129617</Counter>
+ <Counter worker="2">129599</Counter>
+ <Counter worker="3">129612</Counter>
+ <Counter worker="4">129613</Counter>
+ <Counter worker="5">129605</Counter>
+ <Counter worker="6">128731</Counter>
+ <Counter worker="7">128725</Counter>
+ <Counter worker="8">129601</Counter>
+ <Counter worker="9">129605</Counter>
+ <Counter worker="10">129358</Counter>
+ <Counter worker="11">129751</Counter>
+ <Counter worker="12">129408</Counter>
+ <Counter worker="13">129789</Counter>
+ <Counter worker="14">128723</Counter>
+ <Counter worker="15">128724</Counter>
+ <Counter worker="16">129606</Counter>
+ <Counter worker="17">129614</Counter>
+ <Counter worker="18">129610</Counter>
+ <Counter worker="19">129613</Counter>
+ <Counter worker="20">129611</Counter>
+ <Counter worker="21">129610</Counter>
+ <Counter worker="22">252076</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">2</Removals>
+ <Removals worker="5">2</Removals>
+ <Removals worker="6">2</Removals>
+ <Removals worker="7">2</Removals>
+ <Removals worker="8">2</Removals>
+ <Removals worker="9">2</Removals>
+ <Removals worker="10">2</Removals>
+ <Removals worker="11">2</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ <Removals worker="19">2</Removals>
+ <Removals worker="20">2</Removals>
+ <Removals worker="21">2</Removals>
+ <Removals worker="22">2</Removals>
+ </EnterListOpExit>
+ <EnterListOpExit activeWorker="24">
+ <Counter worker="0">123985</Counter>
+ <Counter worker="1">124060</Counter>
+ <Counter worker="2">123992</Counter>
+ <Counter worker="3">123979</Counter>
+ <Counter worker="4">124046</Counter>
+ <Counter worker="5">124041</Counter>
+ <Counter worker="6">124049</Counter>
+ <Counter worker="7">124034</Counter>
+ <Counter worker="8">124034</Counter>
+ <Counter worker="9">124040</Counter>
+ <Counter worker="10">124039</Counter>
+ <Counter worker="11">124035</Counter>
+ <Counter worker="12">124037</Counter>
+ <Counter worker="13">124041</Counter>
+ <Counter worker="14">124039</Counter>
+ <Counter worker="15">124038</Counter>
+ <Counter worker="16">124042</Counter>
+ <Counter worker="17">124044</Counter>
+ <Counter worker="18">124046</Counter>
+ <Counter worker="19">124045</Counter>
+ <Counter worker="20">124050</Counter>
+ <Counter worker="21">124044</Counter>
+ <Counter worker="22">123895</Counter>
+ <Counter worker="23">124094</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">2</Removals>
+ <Removals worker="3">2</Removals>
+ <Removals worker="4">2</Removals>
+ <Removals worker="5">2</Removals>
+ <Removals worker="6">2</Removals>
+ <Removals worker="7">2</Removals>
+ <Removals worker="8">2</Removals>
+ <Removals worker="9">2</Removals>
+ <Removals worker="10">2</Removals>
+ <Removals worker="11">2</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ <Removals worker="19">2</Removals>
+ <Removals worker="20">2</Removals>
+ <Removals worker="21">2</Removals>
+ <Removals worker="22">2</Removals>
+ <Removals worker="23">2</Removals>
+ </EnterListOpExit>
+ <EnterExitPreempt activeWorker="1">
+ <Counter worker="0">3254304</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="2">
+ <Counter worker="0">3230085</Counter>
+ <Counter worker="1">3236178</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="3">
+ <Counter worker="0">3211428</Counter>
+ <Counter worker="1">3217655</Counter>
+ <Counter worker="2">3218102</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="4">
+ <Counter worker="0">3137290</Counter>
+ <Counter worker="1">3143467</Counter>
+ <Counter worker="2">3143784</Counter>
+ <Counter worker="3">3143780</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="5">
+ <Counter worker="0">3121319</Counter>
+ <Counter worker="1">3127640</Counter>
+ <Counter worker="2">3127958</Counter>
+ <Counter worker="3">3127959</Counter>
+ <Counter worker="4">3128057</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="6">
+ <Counter worker="0">3103155</Counter>
+ <Counter worker="1">3109433</Counter>
+ <Counter worker="2">3109748</Counter>
+ <Counter worker="3">3109767</Counter>
+ <Counter worker="4">3109757</Counter>
+ <Counter worker="5">3109759</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="7">
+ <Counter worker="0">3086415</Counter>
+ <Counter worker="1">3092876</Counter>
+ <Counter worker="2">3093221</Counter>
+ <Counter worker="3">3093213</Counter>
+ <Counter worker="4">3093229</Counter>
+ <Counter worker="5">3093185</Counter>
+ <Counter worker="6">3093274</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="8">
+ <Counter worker="0">3071553</Counter>
+ <Counter worker="1">3077980</Counter>
+ <Counter worker="2">3078324</Counter>
+ <Counter worker="3">3078349</Counter>
+ <Counter worker="4">3078325</Counter>
+ <Counter worker="5">3078323</Counter>
+ <Counter worker="6">3078319</Counter>
+ <Counter worker="7">3078334</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="9">
+ <Counter worker="0">3118587</Counter>
+ <Counter worker="1">3125168</Counter>
+ <Counter worker="2">3125567</Counter>
+ <Counter worker="3">3125553</Counter>
+ <Counter worker="4">3125549</Counter>
+ <Counter worker="5">3125570</Counter>
+ <Counter worker="6">3125575</Counter>
+ <Counter worker="7">3125543</Counter>
+ <Counter worker="8">3125601</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="10">
+ <Counter worker="0">3097251</Counter>
+ <Counter worker="1">3103660</Counter>
+ <Counter worker="2">3104036</Counter>
+ <Counter worker="3">3104018</Counter>
+ <Counter worker="4">3104034</Counter>
+ <Counter worker="5">3104018</Counter>
+ <Counter worker="6">3104026</Counter>
+ <Counter worker="7">3104039</Counter>
+ <Counter worker="8">3103976</Counter>
+ <Counter worker="9">3103973</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="11">
+ <Counter worker="0">3009773</Counter>
+ <Counter worker="1">3016278</Counter>
+ <Counter worker="2">3016622</Counter>
+ <Counter worker="3">3016633</Counter>
+ <Counter worker="4">3016620</Counter>
+ <Counter worker="5">3016618</Counter>
+ <Counter worker="6">3016613</Counter>
+ <Counter worker="7">3016611</Counter>
+ <Counter worker="8">3016571</Counter>
+ <Counter worker="9">3016566</Counter>
+ <Counter worker="10">3016697</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="12">
+ <Counter worker="0">3012166</Counter>
+ <Counter worker="1">3018631</Counter>
+ <Counter worker="2">3018994</Counter>
+ <Counter worker="3">3018969</Counter>
+ <Counter worker="4">3018981</Counter>
+ <Counter worker="5">3018971</Counter>
+ <Counter worker="6">3018989</Counter>
+ <Counter worker="7">3018985</Counter>
+ <Counter worker="8">3018945</Counter>
+ <Counter worker="9">3018931</Counter>
+ <Counter worker="10">3018945</Counter>
+ <Counter worker="11">3018928</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="13">
+ <Counter worker="0">2769364</Counter>
+ <Counter worker="1">2775917</Counter>
+ <Counter worker="2">2776139</Counter>
+ <Counter worker="3">2776123</Counter>
+ <Counter worker="4">2776138</Counter>
+ <Counter worker="5">2776129</Counter>
+ <Counter worker="6">2776122</Counter>
+ <Counter worker="7">2776139</Counter>
+ <Counter worker="8">2776078</Counter>
+ <Counter worker="9">2776100</Counter>
+ <Counter worker="10">2776089</Counter>
+ <Counter worker="11">2776083</Counter>
+ <Counter worker="12">3007128</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="14">
+ <Counter worker="0">2623497</Counter>
+ <Counter worker="1">2630018</Counter>
+ <Counter worker="2">2630058</Counter>
+ <Counter worker="3">2630062</Counter>
+ <Counter worker="4">2630066</Counter>
+ <Counter worker="5">2630072</Counter>
+ <Counter worker="6">2630068</Counter>
+ <Counter worker="7">2630078</Counter>
+ <Counter worker="8">2630041</Counter>
+ <Counter worker="9">2630033</Counter>
+ <Counter worker="10">2630043</Counter>
+ <Counter worker="11">2630043</Counter>
+ <Counter worker="12">2630030</Counter>
+ <Counter worker="13">2630038</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="15">
+ <Counter worker="0">2434866</Counter>
+ <Counter worker="1">2441461</Counter>
+ <Counter worker="2">2441341</Counter>
+ <Counter worker="3">2441313</Counter>
+ <Counter worker="4">2441338</Counter>
+ <Counter worker="5">2441343</Counter>
+ <Counter worker="6">2441343</Counter>
+ <Counter worker="7">2441332</Counter>
+ <Counter worker="8">2441314</Counter>
+ <Counter worker="9">2441312</Counter>
+ <Counter worker="10">2441299</Counter>
+ <Counter worker="11">2441306</Counter>
+ <Counter worker="12">2441313</Counter>
+ <Counter worker="13">2441302</Counter>
+ <Counter worker="14">2789683</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="16">
+ <Counter worker="0">2298098</Counter>
+ <Counter worker="1">2304721</Counter>
+ <Counter worker="2">2304400</Counter>
+ <Counter worker="3">2304378</Counter>
+ <Counter worker="4">2304392</Counter>
+ <Counter worker="5">2304385</Counter>
+ <Counter worker="6">2304386</Counter>
+ <Counter worker="7">2304387</Counter>
+ <Counter worker="8">2304344</Counter>
+ <Counter worker="9">2304362</Counter>
+ <Counter worker="10">2304344</Counter>
+ <Counter worker="11">2304327</Counter>
+ <Counter worker="12">2304362</Counter>
+ <Counter worker="13">2304342</Counter>
+ <Counter worker="14">2304362</Counter>
+ <Counter worker="15">2304326</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="17">
+ <Counter worker="0">2147614</Counter>
+ <Counter worker="1">2154193</Counter>
+ <Counter worker="2">2153754</Counter>
+ <Counter worker="3">2153721</Counter>
+ <Counter worker="4">2153738</Counter>
+ <Counter worker="5">2153745</Counter>
+ <Counter worker="6">2153730</Counter>
+ <Counter worker="7">2153753</Counter>
+ <Counter worker="8">2153699</Counter>
+ <Counter worker="9">2153705</Counter>
+ <Counter worker="10">2153707</Counter>
+ <Counter worker="11">2153685</Counter>
+ <Counter worker="12">2153725</Counter>
+ <Counter worker="13">2153696</Counter>
+ <Counter worker="14">2153693</Counter>
+ <Counter worker="15">2153714</Counter>
+ <Counter worker="16">2629739</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="18">
+ <Counter worker="0">2052413</Counter>
+ <Counter worker="1">2058999</Counter>
+ <Counter worker="2">2058481</Counter>
+ <Counter worker="3">2058454</Counter>
+ <Counter worker="4">2058478</Counter>
+ <Counter worker="5">2058472</Counter>
+ <Counter worker="6">2058462</Counter>
+ <Counter worker="7">2058474</Counter>
+ <Counter worker="8">2058443</Counter>
+ <Counter worker="9">2058433</Counter>
+ <Counter worker="10">2058425</Counter>
+ <Counter worker="11">2058426</Counter>
+ <Counter worker="12">2058420</Counter>
+ <Counter worker="13">2058425</Counter>
+ <Counter worker="14">2058422</Counter>
+ <Counter worker="15">2058417</Counter>
+ <Counter worker="16">2058471</Counter>
+ <Counter worker="17">2058464</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="19">
+ <Counter worker="0">1914695</Counter>
+ <Counter worker="1">1921298</Counter>
+ <Counter worker="2">1920678</Counter>
+ <Counter worker="3">1920660</Counter>
+ <Counter worker="4">1920673</Counter>
+ <Counter worker="5">1920655</Counter>
+ <Counter worker="6">1920651</Counter>
+ <Counter worker="7">1920669</Counter>
+ <Counter worker="8">1920641</Counter>
+ <Counter worker="9">1920636</Counter>
+ <Counter worker="10">1920620</Counter>
+ <Counter worker="11">1920633</Counter>
+ <Counter worker="12">1920637</Counter>
+ <Counter worker="13">1920643</Counter>
+ <Counter worker="14">1920642</Counter>
+ <Counter worker="15">1920619</Counter>
+ <Counter worker="16">1920662</Counter>
+ <Counter worker="17">1920662</Counter>
+ <Counter worker="18">2400814</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="20">
+ <Counter worker="0">1853771</Counter>
+ <Counter worker="1">1860358</Counter>
+ <Counter worker="2">1859645</Counter>
+ <Counter worker="3">1859629</Counter>
+ <Counter worker="4">1859640</Counter>
+ <Counter worker="5">1859661</Counter>
+ <Counter worker="6">1859636</Counter>
+ <Counter worker="7">1859635</Counter>
+ <Counter worker="8">1859605</Counter>
+ <Counter worker="9">1859616</Counter>
+ <Counter worker="10">1859606</Counter>
+ <Counter worker="11">1859600</Counter>
+ <Counter worker="12">1859605</Counter>
+ <Counter worker="13">1859597</Counter>
+ <Counter worker="14">1859608</Counter>
+ <Counter worker="15">1859591</Counter>
+ <Counter worker="16">1859649</Counter>
+ <Counter worker="17">1859655</Counter>
+ <Counter worker="18">1859650</Counter>
+ <Counter worker="19">1859637</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="21">
+ <Counter worker="0">1770522</Counter>
+ <Counter worker="1">1777082</Counter>
+ <Counter worker="2">1776390</Counter>
+ <Counter worker="3">1776350</Counter>
+ <Counter worker="4">1604585</Counter>
+ <Counter worker="5">1604578</Counter>
+ <Counter worker="6">1776398</Counter>
+ <Counter worker="7">1776385</Counter>
+ <Counter worker="8">1776294</Counter>
+ <Counter worker="9">1776271</Counter>
+ <Counter worker="10">1776340</Counter>
+ <Counter worker="11">1776318</Counter>
+ <Counter worker="12">1604553</Counter>
+ <Counter worker="13">1604546</Counter>
+ <Counter worker="14">1776369</Counter>
+ <Counter worker="15">1776347</Counter>
+ <Counter worker="16">1776327</Counter>
+ <Counter worker="17">1776319</Counter>
+ <Counter worker="18">1776372</Counter>
+ <Counter worker="19">1776370</Counter>
+ <Counter worker="20">2138618</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="22">
+ <Counter worker="0">1688290</Counter>
+ <Counter worker="1">1694844</Counter>
+ <Counter worker="2">1694326</Counter>
+ <Counter worker="3">1694309</Counter>
+ <Counter worker="4">1694320</Counter>
+ <Counter worker="5">1694311</Counter>
+ <Counter worker="6">1694315</Counter>
+ <Counter worker="7">1694320</Counter>
+ <Counter worker="8">1693870</Counter>
+ <Counter worker="9">1693878</Counter>
+ <Counter worker="10">1694261</Counter>
+ <Counter worker="11">1694262</Counter>
+ <Counter worker="12">1694278</Counter>
+ <Counter worker="13">1694250</Counter>
+ <Counter worker="14">1694280</Counter>
+ <Counter worker="15">1694266</Counter>
+ <Counter worker="16">1693923</Counter>
+ <Counter worker="17">1693910</Counter>
+ <Counter worker="18">1694306</Counter>
+ <Counter worker="19">1694317</Counter>
+ <Counter worker="20">1694317</Counter>
+ <Counter worker="21">1694320</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="23">
+ <Counter worker="0">1622418</Counter>
+ <Counter worker="1">1628964</Counter>
+ <Counter worker="2">1628407</Counter>
+ <Counter worker="3">1628383</Counter>
+ <Counter worker="4">1628403</Counter>
+ <Counter worker="5">1628399</Counter>
+ <Counter worker="6">1465626</Counter>
+ <Counter worker="7">1465635</Counter>
+ <Counter worker="8">1627950</Counter>
+ <Counter worker="9">1627955</Counter>
+ <Counter worker="10">1628362</Counter>
+ <Counter worker="11">1628357</Counter>
+ <Counter worker="12">1628380</Counter>
+ <Counter worker="13">1628365</Counter>
+ <Counter worker="14">1465617</Counter>
+ <Counter worker="15">1465586</Counter>
+ <Counter worker="16">1627992</Counter>
+ <Counter worker="17">1627979</Counter>
+ <Counter worker="18">1628385</Counter>
+ <Counter worker="19">1628387</Counter>
+ <Counter worker="20">1628395</Counter>
+ <Counter worker="21">1628404</Counter>
+ <Counter worker="22">1953187</Counter>
+ </EnterExitPreempt>
+ <EnterExitPreempt activeWorker="24">
+ <Counter worker="0">1547993</Counter>
+ <Counter worker="1">1554439</Counter>
+ <Counter worker="2">1553873</Counter>
+ <Counter worker="3">1553847</Counter>
+ <Counter worker="4">1553859</Counter>
+ <Counter worker="5">1553837</Counter>
+ <Counter worker="6">1553795</Counter>
+ <Counter worker="7">1553795</Counter>
+ <Counter worker="8">1553385</Counter>
+ <Counter worker="9">1553384</Counter>
+ <Counter worker="10">1553811</Counter>
+ <Counter worker="11">1553799</Counter>
+ <Counter worker="12">1553813</Counter>
+ <Counter worker="13">1553824</Counter>
+ <Counter worker="14">1553780</Counter>
+ <Counter worker="15">1553757</Counter>
+ <Counter worker="16">1553429</Counter>
+ <Counter worker="17">1553428</Counter>
+ <Counter worker="18">1553837</Counter>
+ <Counter worker="19">1553863</Counter>
+ <Counter worker="20">1553847</Counter>
+ <Counter worker="21">1553849</Counter>
+ <Counter worker="22">1552296</Counter>
+ <Counter worker="23">1553928</Counter>
+ </EnterExitPreempt>
+ <EnterListOpExitPreempt activeWorker="1">
+ <Counter worker="0">3245559</Counter>
+ <Removals worker="0">59</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="2">
+ <Counter worker="0">2206622</Counter>
+ <Counter worker="1">2209597</Counter>
+ <Removals worker="0">22</Removals>
+ <Removals worker="1">21</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="3">
+ <Counter worker="0">1649698</Counter>
+ <Counter worker="1">1652658</Counter>
+ <Counter worker="2">2031932</Counter>
+ <Removals worker="0">16</Removals>
+ <Removals worker="1">16</Removals>
+ <Removals worker="2">15</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="4">
+ <Counter worker="0">1349747</Counter>
+ <Counter worker="1">1350236</Counter>
+ <Counter worker="2">1350671</Counter>
+ <Counter worker="3">1348893</Counter>
+ <Removals worker="0">13</Removals>
+ <Removals worker="1">13</Removals>
+ <Removals worker="2">12</Removals>
+ <Removals worker="3">12</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="5">
+ <Counter worker="0">1115317</Counter>
+ <Counter worker="1">1115351</Counter>
+ <Counter worker="2">1115527</Counter>
+ <Counter worker="3">1114853</Counter>
+ <Counter worker="4">1454344</Counter>
+ <Removals worker="0">10</Removals>
+ <Removals worker="1">10</Removals>
+ <Removals worker="2">10</Removals>
+ <Removals worker="3">10</Removals>
+ <Removals worker="4">10</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="6">
+ <Counter worker="0">968405</Counter>
+ <Counter worker="1">968578</Counter>
+ <Counter worker="2">968652</Counter>
+ <Counter worker="3">968274</Counter>
+ <Counter worker="4">969229</Counter>
+ <Counter worker="5">966044</Counter>
+ <Removals worker="0">9</Removals>
+ <Removals worker="1">9</Removals>
+ <Removals worker="2">8</Removals>
+ <Removals worker="3">8</Removals>
+ <Removals worker="4">8</Removals>
+ <Removals worker="5">8</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="7">
+ <Counter worker="0">828360</Counter>
+ <Counter worker="1">829352</Counter>
+ <Counter worker="2">829124</Counter>
+ <Counter worker="3">828959</Counter>
+ <Counter worker="4">828988</Counter>
+ <Counter worker="5">828579</Counter>
+ <Counter worker="6">1108607</Counter>
+ <Removals worker="0">8</Removals>
+ <Removals worker="1">7</Removals>
+ <Removals worker="2">7</Removals>
+ <Removals worker="3">7</Removals>
+ <Removals worker="4">7</Removals>
+ <Removals worker="5">7</Removals>
+ <Removals worker="6">7</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="8">
+ <Counter worker="0">753109</Counter>
+ <Counter worker="1">753288</Counter>
+ <Counter worker="2">753649</Counter>
+ <Counter worker="3">753545</Counter>
+ <Counter worker="4">753699</Counter>
+ <Counter worker="5">753247</Counter>
+ <Counter worker="6">753597</Counter>
+ <Counter worker="7">752832</Counter>
+ <Removals worker="0">7</Removals>
+ <Removals worker="1">7</Removals>
+ <Removals worker="2">6</Removals>
+ <Removals worker="3">6</Removals>
+ <Removals worker="4">6</Removals>
+ <Removals worker="5">6</Removals>
+ <Removals worker="6">6</Removals>
+ <Removals worker="7">6</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="9">
+ <Counter worker="0">642421</Counter>
+ <Counter worker="1">642491</Counter>
+ <Counter worker="2">642972</Counter>
+ <Counter worker="3">641575</Counter>
+ <Counter worker="4">642638</Counter>
+ <Counter worker="5">642537</Counter>
+ <Counter worker="6">642517</Counter>
+ <Counter worker="7">642455</Counter>
+ <Counter worker="8">908107</Counter>
+ <Removals worker="0">6</Removals>
+ <Removals worker="1">6</Removals>
+ <Removals worker="2">6</Removals>
+ <Removals worker="3">6</Removals>
+ <Removals worker="4">6</Removals>
+ <Removals worker="5">5</Removals>
+ <Removals worker="6">5</Removals>
+ <Removals worker="7">5</Removals>
+ <Removals worker="8">5</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="10">
+ <Counter worker="0">601583</Counter>
+ <Counter worker="1">601726</Counter>
+ <Counter worker="2">601700</Counter>
+ <Counter worker="3">601691</Counter>
+ <Counter worker="4">601704</Counter>
+ <Counter worker="5">601660</Counter>
+ <Counter worker="6">601817</Counter>
+ <Counter worker="7">600992</Counter>
+ <Counter worker="8">601642</Counter>
+ <Counter worker="9">600148</Counter>
+ <Removals worker="0">5</Removals>
+ <Removals worker="1">5</Removals>
+ <Removals worker="2">5</Removals>
+ <Removals worker="3">5</Removals>
+ <Removals worker="4">5</Removals>
+ <Removals worker="5">5</Removals>
+ <Removals worker="6">5</Removals>
+ <Removals worker="7">5</Removals>
+ <Removals worker="8">5</Removals>
+ <Removals worker="9">5</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="11">
+ <Counter worker="0">509029</Counter>
+ <Counter worker="1">509215</Counter>
+ <Counter worker="2">508785</Counter>
+ <Counter worker="3">509365</Counter>
+ <Counter worker="4">509373</Counter>
+ <Counter worker="5">508757</Counter>
+ <Counter worker="6">509223</Counter>
+ <Counter worker="7">509199</Counter>
+ <Counter worker="8">509142</Counter>
+ <Counter worker="9">508823</Counter>
+ <Counter worker="10">762921</Counter>
+ <Removals worker="0">5</Removals>
+ <Removals worker="1">5</Removals>
+ <Removals worker="2">5</Removals>
+ <Removals worker="3">5</Removals>
+ <Removals worker="4">5</Removals>
+ <Removals worker="5">5</Removals>
+ <Removals worker="6">4</Removals>
+ <Removals worker="7">4</Removals>
+ <Removals worker="8">4</Removals>
+ <Removals worker="9">4</Removals>
+ <Removals worker="10">4</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="12">
+ <Counter worker="0">474520</Counter>
+ <Counter worker="1">474639</Counter>
+ <Counter worker="2">474620</Counter>
+ <Counter worker="3">474665</Counter>
+ <Counter worker="4">474652</Counter>
+ <Counter worker="5">474648</Counter>
+ <Counter worker="6">474643</Counter>
+ <Counter worker="7">474648</Counter>
+ <Counter worker="8">474399</Counter>
+ <Counter worker="9">474399</Counter>
+ <Counter worker="10">474715</Counter>
+ <Counter worker="11">473587</Counter>
+ <Removals worker="0">5</Removals>
+ <Removals worker="1">5</Removals>
+ <Removals worker="2">4</Removals>
+ <Removals worker="3">4</Removals>
+ <Removals worker="4">4</Removals>
+ <Removals worker="5">4</Removals>
+ <Removals worker="6">4</Removals>
+ <Removals worker="7">4</Removals>
+ <Removals worker="8">4</Removals>
+ <Removals worker="9">4</Removals>
+ <Removals worker="10">4</Removals>
+ <Removals worker="11">4</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="13">
+ <Counter worker="0">390853</Counter>
+ <Counter worker="1">390987</Counter>
+ <Counter worker="2">390723</Counter>
+ <Counter worker="3">390678</Counter>
+ <Counter worker="4">390913</Counter>
+ <Counter worker="5">390937</Counter>
+ <Counter worker="6">390962</Counter>
+ <Counter worker="7">390979</Counter>
+ <Counter worker="8">390938</Counter>
+ <Counter worker="9">390912</Counter>
+ <Counter worker="10">390866</Counter>
+ <Counter worker="11">390543</Counter>
+ <Counter worker="12">614015</Counter>
+ <Removals worker="0">4</Removals>
+ <Removals worker="1">4</Removals>
+ <Removals worker="2">4</Removals>
+ <Removals worker="3">4</Removals>
+ <Removals worker="4">4</Removals>
+ <Removals worker="5">4</Removals>
+ <Removals worker="6">4</Removals>
+ <Removals worker="7">4</Removals>
+ <Removals worker="8">4</Removals>
+ <Removals worker="9">4</Removals>
+ <Removals worker="10">4</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="14">
+ <Counter worker="0">354581</Counter>
+ <Counter worker="1">354671</Counter>
+ <Counter worker="2">354654</Counter>
+ <Counter worker="3">354641</Counter>
+ <Counter worker="4">354636</Counter>
+ <Counter worker="5">354663</Counter>
+ <Counter worker="6">354653</Counter>
+ <Counter worker="7">354665</Counter>
+ <Counter worker="8">354363</Counter>
+ <Counter worker="9">354896</Counter>
+ <Counter worker="10">354843</Counter>
+ <Counter worker="11">354281</Counter>
+ <Counter worker="12">354830</Counter>
+ <Counter worker="13">353645</Counter>
+ <Removals worker="0">4</Removals>
+ <Removals worker="1">4</Removals>
+ <Removals worker="2">4</Removals>
+ <Removals worker="3">4</Removals>
+ <Removals worker="4">4</Removals>
+ <Removals worker="5">4</Removals>
+ <Removals worker="6">4</Removals>
+ <Removals worker="7">4</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ <Removals worker="13">3</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="15">
+ <Counter worker="0">298506</Counter>
+ <Counter worker="1">298083</Counter>
+ <Counter worker="2">298405</Counter>
+ <Counter worker="3">298409</Counter>
+ <Counter worker="4">298447</Counter>
+ <Counter worker="5">298465</Counter>
+ <Counter worker="6">298479</Counter>
+ <Counter worker="7">298451</Counter>
+ <Counter worker="8">298450</Counter>
+ <Counter worker="9">298459</Counter>
+ <Counter worker="10">298367</Counter>
+ <Counter worker="11">298373</Counter>
+ <Counter worker="12">298745</Counter>
+ <Counter worker="13">297826</Counter>
+ <Counter worker="14">488482</Counter>
+ <Removals worker="0">4</Removals>
+ <Removals worker="1">4</Removals>
+ <Removals worker="2">4</Removals>
+ <Removals worker="3">4</Removals>
+ <Removals worker="4">4</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ <Removals worker="13">3</Removals>
+ <Removals worker="14">3</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="16">
+ <Counter worker="0">273162</Counter>
+ <Counter worker="1">273268</Counter>
+ <Counter worker="2">273263</Counter>
+ <Counter worker="3">273254</Counter>
+ <Counter worker="4">273272</Counter>
+ <Counter worker="5">273278</Counter>
+ <Counter worker="6">273268</Counter>
+ <Counter worker="7">273277</Counter>
+ <Counter worker="8">273279</Counter>
+ <Counter worker="9">273297</Counter>
+ <Counter worker="10">273284</Counter>
+ <Counter worker="11">273278</Counter>
+ <Counter worker="12">273295</Counter>
+ <Counter worker="13">273262</Counter>
+ <Counter worker="14">273814</Counter>
+ <Counter worker="15">271757</Counter>
+ <Removals worker="0">4</Removals>
+ <Removals worker="1">4</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ <Removals worker="13">3</Removals>
+ <Removals worker="14">3</Removals>
+ <Removals worker="15">3</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="17">
+ <Counter worker="0">233516</Counter>
+ <Counter worker="1">233625</Counter>
+ <Counter worker="2">233571</Counter>
+ <Counter worker="3">233567</Counter>
+ <Counter worker="4">233346</Counter>
+ <Counter worker="5">233748</Counter>
+ <Counter worker="6">233628</Counter>
+ <Counter worker="7">233599</Counter>
+ <Counter worker="8">233573</Counter>
+ <Counter worker="9">233599</Counter>
+ <Counter worker="10">233550</Counter>
+ <Counter worker="11">233543</Counter>
+ <Counter worker="12">233272</Counter>
+ <Counter worker="13">233723</Counter>
+ <Counter worker="14">233575</Counter>
+ <Counter worker="15">233448</Counter>
+ <Counter worker="16">394982</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ <Removals worker="13">3</Removals>
+ <Removals worker="14">3</Removals>
+ <Removals worker="15">3</Removals>
+ <Removals worker="16">3</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="18">
+ <Counter worker="0">217987</Counter>
+ <Counter worker="1">218048</Counter>
+ <Counter worker="2">218051</Counter>
+ <Counter worker="3">218037</Counter>
+ <Counter worker="4">217730</Counter>
+ <Counter worker="5">218164</Counter>
+ <Counter worker="6">218054</Counter>
+ <Counter worker="7">218021</Counter>
+ <Counter worker="8">218054</Counter>
+ <Counter worker="9">218022</Counter>
+ <Counter worker="10">218030</Counter>
+ <Counter worker="11">218013</Counter>
+ <Counter worker="12">218032</Counter>
+ <Counter worker="13">218049</Counter>
+ <Counter worker="14">218229</Counter>
+ <Counter worker="15">217757</Counter>
+ <Counter worker="16">218105</Counter>
+ <Counter worker="17">217412</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">3</Removals>
+ <Removals worker="13">3</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="19">
+ <Counter worker="0">196715</Counter>
+ <Counter worker="1">196796</Counter>
+ <Counter worker="2">169727</Counter>
+ <Counter worker="3">169746</Counter>
+ <Counter worker="4">197077</Counter>
+ <Counter worker="5">197091</Counter>
+ <Counter worker="6">197826</Counter>
+ <Counter worker="7">197828</Counter>
+ <Counter worker="8">196758</Counter>
+ <Counter worker="9">196731</Counter>
+ <Counter worker="10">169676</Counter>
+ <Counter worker="11">169675</Counter>
+ <Counter worker="12">197102</Counter>
+ <Counter worker="13">197081</Counter>
+ <Counter worker="14">197523</Counter>
+ <Counter worker="15">197995</Counter>
+ <Counter worker="16">196953</Counter>
+ <Counter worker="17">196313</Counter>
+ <Counter worker="18">304517</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">3</Removals>
+ <Removals worker="11">3</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="20">
+ <Counter worker="0">178383</Counter>
+ <Counter worker="1">178028</Counter>
+ <Counter worker="2">178311</Counter>
+ <Counter worker="3">178276</Counter>
+ <Counter worker="4">178340</Counter>
+ <Counter worker="5">178325</Counter>
+ <Counter worker="6">178082</Counter>
+ <Counter worker="7">178470</Counter>
+ <Counter worker="8">178268</Counter>
+ <Counter worker="9">178283</Counter>
+ <Counter worker="10">178312</Counter>
+ <Counter worker="11">178303</Counter>
+ <Counter worker="12">178348</Counter>
+ <Counter worker="13">178339</Counter>
+ <Counter worker="14">178321</Counter>
+ <Counter worker="15">178316</Counter>
+ <Counter worker="16">178338</Counter>
+ <Counter worker="17">178233</Counter>
+ <Counter worker="18">178280</Counter>
+ <Counter worker="19">177905</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">3</Removals>
+ <Removals worker="9">3</Removals>
+ <Removals worker="10">2</Removals>
+ <Removals worker="11">2</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ <Removals worker="19">2</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="21">
+ <Counter worker="0">156035</Counter>
+ <Counter worker="1">156118</Counter>
+ <Counter worker="2">155850</Counter>
+ <Counter worker="3">156210</Counter>
+ <Counter worker="4">151663</Counter>
+ <Counter worker="5">151652</Counter>
+ <Counter worker="6">156116</Counter>
+ <Counter worker="7">156118</Counter>
+ <Counter worker="8">156103</Counter>
+ <Counter worker="9">156104</Counter>
+ <Counter worker="10">156092</Counter>
+ <Counter worker="11">156092</Counter>
+ <Counter worker="12">151664</Counter>
+ <Counter worker="13">151667</Counter>
+ <Counter worker="14">156123</Counter>
+ <Counter worker="15">156108</Counter>
+ <Counter worker="16">156118</Counter>
+ <Counter worker="17">156108</Counter>
+ <Counter worker="18">156283</Counter>
+ <Counter worker="19">155715</Counter>
+ <Counter worker="20">289582</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">3</Removals>
+ <Removals worker="7">3</Removals>
+ <Removals worker="8">2</Removals>
+ <Removals worker="9">2</Removals>
+ <Removals worker="10">2</Removals>
+ <Removals worker="11">2</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ <Removals worker="19">2</Removals>
+ <Removals worker="20">2</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="22">
+ <Counter worker="0">146560</Counter>
+ <Counter worker="1">146648</Counter>
+ <Counter worker="2">146628</Counter>
+ <Counter worker="3">146601</Counter>
+ <Counter worker="4">146606</Counter>
+ <Counter worker="5">146602</Counter>
+ <Counter worker="6">146646</Counter>
+ <Counter worker="7">146641</Counter>
+ <Counter worker="8">146632</Counter>
+ <Counter worker="9">146627</Counter>
+ <Counter worker="10">146624</Counter>
+ <Counter worker="11">146633</Counter>
+ <Counter worker="12">146352</Counter>
+ <Counter worker="13">146736</Counter>
+ <Counter worker="14">146805</Counter>
+ <Counter worker="15">146444</Counter>
+ <Counter worker="16">146645</Counter>
+ <Counter worker="17">146641</Counter>
+ <Counter worker="18">146648</Counter>
+ <Counter worker="19">146632</Counter>
+ <Counter worker="20">146586</Counter>
+ <Counter worker="21">146279</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">3</Removals>
+ <Removals worker="5">3</Removals>
+ <Removals worker="6">2</Removals>
+ <Removals worker="7">2</Removals>
+ <Removals worker="8">2</Removals>
+ <Removals worker="9">2</Removals>
+ <Removals worker="10">2</Removals>
+ <Removals worker="11">2</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ <Removals worker="19">2</Removals>
+ <Removals worker="20">2</Removals>
+ <Removals worker="21">2</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="23">
+ <Counter worker="0">131235</Counter>
+ <Counter worker="1">131314</Counter>
+ <Counter worker="2">131299</Counter>
+ <Counter worker="3">131299</Counter>
+ <Counter worker="4">131242</Counter>
+ <Counter worker="5">131224</Counter>
+ <Counter worker="6">127385</Counter>
+ <Counter worker="7">127375</Counter>
+ <Counter worker="8">131303</Counter>
+ <Counter worker="9">131301</Counter>
+ <Counter worker="10">131304</Counter>
+ <Counter worker="11">131303</Counter>
+ <Counter worker="12">131295</Counter>
+ <Counter worker="13">131288</Counter>
+ <Counter worker="14">127373</Counter>
+ <Counter worker="15">127369</Counter>
+ <Counter worker="16">131311</Counter>
+ <Counter worker="17">131309</Counter>
+ <Counter worker="18">131313</Counter>
+ <Counter worker="19">131313</Counter>
+ <Counter worker="20">131326</Counter>
+ <Counter worker="21">131229</Counter>
+ <Counter worker="22">246942</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">3</Removals>
+ <Removals worker="3">3</Removals>
+ <Removals worker="4">2</Removals>
+ <Removals worker="5">2</Removals>
+ <Removals worker="6">2</Removals>
+ <Removals worker="7">2</Removals>
+ <Removals worker="8">2</Removals>
+ <Removals worker="9">2</Removals>
+ <Removals worker="10">2</Removals>
+ <Removals worker="11">2</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ <Removals worker="19">2</Removals>
+ <Removals worker="20">2</Removals>
+ <Removals worker="21">2</Removals>
+ <Removals worker="22">2</Removals>
+ </EnterListOpExitPreempt>
+ <EnterListOpExitPreempt activeWorker="24">
+ <Counter worker="0">123660</Counter>
+ <Counter worker="1">123740</Counter>
+ <Counter worker="2">123738</Counter>
+ <Counter worker="3">123718</Counter>
+ <Counter worker="4">123743</Counter>
+ <Counter worker="5">123732</Counter>
+ <Counter worker="6">123720</Counter>
+ <Counter worker="7">123714</Counter>
+ <Counter worker="8">123724</Counter>
+ <Counter worker="9">123726</Counter>
+ <Counter worker="10">123723</Counter>
+ <Counter worker="11">123737</Counter>
+ <Counter worker="12">123727</Counter>
+ <Counter worker="13">123718</Counter>
+ <Counter worker="14">123714</Counter>
+ <Counter worker="15">123708</Counter>
+ <Counter worker="16">123738</Counter>
+ <Counter worker="17">123745</Counter>
+ <Counter worker="18">123733</Counter>
+ <Counter worker="19">123743</Counter>
+ <Counter worker="20">123749</Counter>
+ <Counter worker="21">123728</Counter>
+ <Counter worker="22">123925</Counter>
+ <Counter worker="23">123062</Counter>
+ <Removals worker="0">3</Removals>
+ <Removals worker="1">3</Removals>
+ <Removals worker="2">2</Removals>
+ <Removals worker="3">2</Removals>
+ <Removals worker="4">2</Removals>
+ <Removals worker="5">2</Removals>
+ <Removals worker="6">2</Removals>
+ <Removals worker="7">2</Removals>
+ <Removals worker="8">2</Removals>
+ <Removals worker="9">2</Removals>
+ <Removals worker="10">2</Removals>
+ <Removals worker="11">2</Removals>
+ <Removals worker="12">2</Removals>
+ <Removals worker="13">2</Removals>
+ <Removals worker="14">2</Removals>
+ <Removals worker="15">2</Removals>
+ <Removals worker="16">2</Removals>
+ <Removals worker="17">2</Removals>
+ <Removals worker="18">2</Removals>
+ <Removals worker="19">2</Removals>
+ <Removals worker="20">2</Removals>
+ <Removals worker="21">2</Removals>
+ <Removals worker="22">2</Removals>
+ <Removals worker="23">2</Removals>
+ </EnterListOpExitPreempt>
+ <Mutex activeWorker="1">
+ <Counter worker="0">7680476</Counter>
+ </Mutex>
+ <Mutex activeWorker="2">
+ <Counter worker="0">7649787</Counter>
+ <Counter worker="1">7658861</Counter>
+ </Mutex>
+ <Mutex activeWorker="3">
+ <Counter worker="0">7393540</Counter>
+ <Counter worker="1">7402581</Counter>
+ <Counter worker="2">7403140</Counter>
+ </Mutex>
+ <Mutex activeWorker="4">
+ <Counter worker="0">7194089</Counter>
+ <Counter worker="1">7203046</Counter>
+ <Counter worker="2">7203574</Counter>
+ <Counter worker="3">7203560</Counter>
+ </Mutex>
+ <Mutex activeWorker="5">
+ <Counter worker="0">7087003</Counter>
+ <Counter worker="1">7095852</Counter>
+ <Counter worker="2">7096389</Counter>
+ <Counter worker="3">7096363</Counter>
+ <Counter worker="4">7096491</Counter>
+ </Mutex>
+ <Mutex activeWorker="6">
+ <Counter worker="0">7006696</Counter>
+ <Counter worker="1">7015461</Counter>
+ <Counter worker="2">7015941</Counter>
+ <Counter worker="3">7016000</Counter>
+ <Counter worker="4">7015947</Counter>
+ <Counter worker="5">7015996</Counter>
+ </Mutex>
+ <Mutex activeWorker="7">
+ <Counter worker="0">6976943</Counter>
+ <Counter worker="1">6985731</Counter>
+ <Counter worker="2">6985651</Counter>
+ <Counter worker="3">6985612</Counter>
+ <Counter worker="4">6986001</Counter>
+ <Counter worker="5">6986054</Counter>
+ <Counter worker="6">7043421</Counter>
+ </Mutex>
+ <Mutex activeWorker="8">
+ <Counter worker="0">6682168</Counter>
+ <Counter worker="1">6690928</Counter>
+ <Counter worker="2">6690996</Counter>
+ <Counter worker="3">6691019</Counter>
+ <Counter worker="4">6691217</Counter>
+ <Counter worker="5">6691300</Counter>
+ <Counter worker="6">6692801</Counter>
+ <Counter worker="7">6692823</Counter>
+ </Mutex>
+ <Mutex activeWorker="9">
+ <Counter worker="0">6736624</Counter>
+ <Counter worker="1">6745348</Counter>
+ <Counter worker="2">6746148</Counter>
+ <Counter worker="3">6746156</Counter>
+ <Counter worker="4">6746117</Counter>
+ <Counter worker="5">6746141</Counter>
+ <Counter worker="6">6747971</Counter>
+ <Counter worker="7">6747968</Counter>
+ <Counter worker="8">7676536</Counter>
+ </Mutex>
+ <Mutex activeWorker="10">
+ <Counter worker="0">6749025</Counter>
+ <Counter worker="1">6757723</Counter>
+ <Counter worker="2">6757477</Counter>
+ <Counter worker="3">6757456</Counter>
+ <Counter worker="4">6757723</Counter>
+ <Counter worker="5">6757783</Counter>
+ <Counter worker="6">6757880</Counter>
+ <Counter worker="7">6757911</Counter>
+ <Counter worker="8">7693258</Counter>
+ <Counter worker="9">7693223</Counter>
+ </Mutex>
+ <Mutex activeWorker="11">
+ <Counter worker="0">6671003</Counter>
+ <Counter worker="1">6679706</Counter>
+ <Counter worker="2">6679612</Counter>
+ <Counter worker="3">6679621</Counter>
+ <Counter worker="4">6680804</Counter>
+ <Counter worker="5">6680858</Counter>
+ <Counter worker="6">6681681</Counter>
+ <Counter worker="7">6681689</Counter>
+ <Counter worker="8">7404669</Counter>
+ <Counter worker="9">7404627</Counter>
+ <Counter worker="10">7404685</Counter>
+ </Mutex>
+ <Mutex activeWorker="12">
+ <Counter worker="0">6737618</Counter>
+ <Counter worker="1">6746369</Counter>
+ <Counter worker="2">6746416</Counter>
+ <Counter worker="3">6746489</Counter>
+ <Counter worker="4">6746789</Counter>
+ <Counter worker="5">6746824</Counter>
+ <Counter worker="6">6747222</Counter>
+ <Counter worker="7">6747265</Counter>
+ <Counter worker="8">7343011</Counter>
+ <Counter worker="9">7343034</Counter>
+ <Counter worker="10">7342977</Counter>
+ <Counter worker="11">7343007</Counter>
+ </Mutex>
+ <Mutex activeWorker="13">
+ <Counter worker="0">6733332</Counter>
+ <Counter worker="1">6742056</Counter>
+ <Counter worker="2">6742233</Counter>
+ <Counter worker="3">6742219</Counter>
+ <Counter worker="4">6742386</Counter>
+ <Counter worker="5">6742452</Counter>
+ <Counter worker="6">6742845</Counter>
+ <Counter worker="7">6742844</Counter>
+ <Counter worker="8">7210529</Counter>
+ <Counter worker="9">7210535</Counter>
+ <Counter worker="10">7210484</Counter>
+ <Counter worker="11">7210534</Counter>
+ <Counter worker="12">7210645</Counter>
+ </Mutex>
+ <Mutex activeWorker="14">
+ <Counter worker="0">6691733</Counter>
+ <Counter worker="1">6700510</Counter>
+ <Counter worker="2">6700036</Counter>
+ <Counter worker="3">6700084</Counter>
+ <Counter worker="4">6700173</Counter>
+ <Counter worker="5">6700238</Counter>
+ <Counter worker="6">6701304</Counter>
+ <Counter worker="7">6701287</Counter>
+ <Counter worker="8">7072832</Counter>
+ <Counter worker="9">7072830</Counter>
+ <Counter worker="10">7088968</Counter>
+ <Counter worker="11">7088996</Counter>
+ <Counter worker="12">7088977</Counter>
+ <Counter worker="13">7089011</Counter>
+ </Mutex>
+ <Mutex activeWorker="15">
+ <Counter worker="0">6721849</Counter>
+ <Counter worker="1">6730583</Counter>
+ <Counter worker="2">6730294</Counter>
+ <Counter worker="3">6730321</Counter>
+ <Counter worker="4">6730411</Counter>
+ <Counter worker="5">6730453</Counter>
+ <Counter worker="6">6730146</Counter>
+ <Counter worker="7">6730131</Counter>
+ <Counter worker="8">7074144</Counter>
+ <Counter worker="9">7074121</Counter>
+ <Counter worker="10">7076841</Counter>
+ <Counter worker="11">7076863</Counter>
+ <Counter worker="12">7077436</Counter>
+ <Counter worker="13">7077458</Counter>
+ <Counter worker="14">7090189</Counter>
+ </Mutex>
+ <Mutex activeWorker="16">
+ <Counter worker="0">6718027</Counter>
+ <Counter worker="1">6726778</Counter>
+ <Counter worker="2">6726041</Counter>
+ <Counter worker="3">6726047</Counter>
+ <Counter worker="4">6727528</Counter>
+ <Counter worker="5">6727525</Counter>
+ <Counter worker="6">6729605</Counter>
+ <Counter worker="7">6729631</Counter>
+ <Counter worker="8">6767904</Counter>
+ <Counter worker="9">6767992</Counter>
+ <Counter worker="10">6779521</Counter>
+ <Counter worker="11">6779523</Counter>
+ <Counter worker="12">6779103</Counter>
+ <Counter worker="13">6779108</Counter>
+ <Counter worker="14">6778120</Counter>
+ <Counter worker="15">6778131</Counter>
+ </Mutex>
+ <Mutex activeWorker="17">
+ <Counter worker="0">6687183</Counter>
+ <Counter worker="1">6695943</Counter>
+ <Counter worker="2">6695989</Counter>
+ <Counter worker="3">6696008</Counter>
+ <Counter worker="4">6696296</Counter>
+ <Counter worker="5">6696358</Counter>
+ <Counter worker="6">6696053</Counter>
+ <Counter worker="7">6696009</Counter>
+ <Counter worker="8">6765358</Counter>
+ <Counter worker="9">6765374</Counter>
+ <Counter worker="10">6780587</Counter>
+ <Counter worker="11">6780559</Counter>
+ <Counter worker="12">6779713</Counter>
+ <Counter worker="13">6779703</Counter>
+ <Counter worker="14">6787330</Counter>
+ <Counter worker="15">6787339</Counter>
+ <Counter worker="16">7674353</Counter>
+ </Mutex>
+ <Mutex activeWorker="18">
+ <Counter worker="0">6709011</Counter>
+ <Counter worker="1">6717861</Counter>
+ <Counter worker="2">6717036</Counter>
+ <Counter worker="3">6717045</Counter>
+ <Counter worker="4">6717409</Counter>
+ <Counter worker="5">6717461</Counter>
+ <Counter worker="6">6719484</Counter>
+ <Counter worker="7">6719457</Counter>
+ <Counter worker="8">6797765</Counter>
+ <Counter worker="9">6797773</Counter>
+ <Counter worker="10">6806790</Counter>
+ <Counter worker="11">6806778</Counter>
+ <Counter worker="12">6810897</Counter>
+ <Counter worker="13">6810933</Counter>
+ <Counter worker="14">6809928</Counter>
+ <Counter worker="15">6809954</Counter>
+ <Counter worker="16">7647776</Counter>
+ <Counter worker="17">7647806</Counter>
+ </Mutex>
+ <Mutex activeWorker="19">
+ <Counter worker="0">6739530</Counter>
+ <Counter worker="1">6748279</Counter>
+ <Counter worker="2">6748555</Counter>
+ <Counter worker="3">6748576</Counter>
+ <Counter worker="4">6749205</Counter>
+ <Counter worker="5">6749252</Counter>
+ <Counter worker="6">6750286</Counter>
+ <Counter worker="7">6750300</Counter>
+ <Counter worker="8">6826144</Counter>
+ <Counter worker="9">6826201</Counter>
+ <Counter worker="10">6836017</Counter>
+ <Counter worker="11">6836059</Counter>
+ <Counter worker="12">6837710</Counter>
+ <Counter worker="13">6837763</Counter>
+ <Counter worker="14">6835561</Counter>
+ <Counter worker="15">6835505</Counter>
+ <Counter worker="16">7397983</Counter>
+ <Counter worker="17">7397940</Counter>
+ <Counter worker="18">7397972</Counter>
+ </Mutex>
+ <Mutex activeWorker="20">
+ <Counter worker="0">6748499</Counter>
+ <Counter worker="1">6757232</Counter>
+ <Counter worker="2">6757547</Counter>
+ <Counter worker="3">6757498</Counter>
+ <Counter worker="4">6758242</Counter>
+ <Counter worker="5">6758254</Counter>
+ <Counter worker="6">6757309</Counter>
+ <Counter worker="7">6757363</Counter>
+ <Counter worker="8">6817716</Counter>
+ <Counter worker="9">6817763</Counter>
+ <Counter worker="10">6824387</Counter>
+ <Counter worker="11">6824430</Counter>
+ <Counter worker="12">6827806</Counter>
+ <Counter worker="13">6827825</Counter>
+ <Counter worker="14">6827134</Counter>
+ <Counter worker="15">6827190</Counter>
+ <Counter worker="16">7366015</Counter>
+ <Counter worker="17">7366019</Counter>
+ <Counter worker="18">7365997</Counter>
+ <Counter worker="19">7365984</Counter>
+ </Mutex>
+ <Mutex activeWorker="21">
+ <Counter worker="0">6726093</Counter>
+ <Counter worker="1">6734831</Counter>
+ <Counter worker="2">6734482</Counter>
+ <Counter worker="3">6734490</Counter>
+ <Counter worker="4">6734692</Counter>
+ <Counter worker="5">6734702</Counter>
+ <Counter worker="6">6736344</Counter>
+ <Counter worker="7">6736363</Counter>
+ <Counter worker="8">6794287</Counter>
+ <Counter worker="9">6794321</Counter>
+ <Counter worker="10">6800684</Counter>
+ <Counter worker="11">6800717</Counter>
+ <Counter worker="12">6803867</Counter>
+ <Counter worker="13">6803909</Counter>
+ <Counter worker="14">6804429</Counter>
+ <Counter worker="15">6804434</Counter>
+ <Counter worker="16">7239650</Counter>
+ <Counter worker="17">7239630</Counter>
+ <Counter worker="18">7239608</Counter>
+ <Counter worker="19">7239574</Counter>
+ <Counter worker="20">7239666</Counter>
+ </Mutex>
+ <Mutex activeWorker="22">
+ <Counter worker="0">6685849</Counter>
+ <Counter worker="1">6692439</Counter>
+ <Counter worker="2">6692689</Counter>
+ <Counter worker="3">6692630</Counter>
+ <Counter worker="4">6692772</Counter>
+ <Counter worker="5">6692826</Counter>
+ <Counter worker="6">6692845</Counter>
+ <Counter worker="7">6692843</Counter>
+ <Counter worker="8">6745537</Counter>
+ <Counter worker="9">6745542</Counter>
+ <Counter worker="10">6755830</Counter>
+ <Counter worker="11">6755841</Counter>
+ <Counter worker="12">6758086</Counter>
+ <Counter worker="13">6758133</Counter>
+ <Counter worker="14">6760475</Counter>
+ <Counter worker="15">6760440</Counter>
+ <Counter worker="16">7082100</Counter>
+ <Counter worker="17">7082147</Counter>
+ <Counter worker="18">7082086</Counter>
+ <Counter worker="19">7082122</Counter>
+ <Counter worker="20">7082104</Counter>
+ <Counter worker="21">7082114</Counter>
+ </Mutex>
+ <Mutex activeWorker="23">
+ <Counter worker="0">6726178</Counter>
+ <Counter worker="1">6734879</Counter>
+ <Counter worker="2">6734932</Counter>
+ <Counter worker="3">6734960</Counter>
+ <Counter worker="4">6735119</Counter>
+ <Counter worker="5">6735172</Counter>
+ <Counter worker="6">6734709</Counter>
+ <Counter worker="7">6734748</Counter>
+ <Counter worker="8">6813708</Counter>
+ <Counter worker="9">6813787</Counter>
+ <Counter worker="10">6819414</Counter>
+ <Counter worker="11">6819381</Counter>
+ <Counter worker="12">6821850</Counter>
+ <Counter worker="13">6821903</Counter>
+ <Counter worker="14">6822277</Counter>
+ <Counter worker="15">6822309</Counter>
+ <Counter worker="16">7050874</Counter>
+ <Counter worker="17">7050860</Counter>
+ <Counter worker="18">7051104</Counter>
+ <Counter worker="19">7051114</Counter>
+ <Counter worker="20">7051298</Counter>
+ <Counter worker="21">7051302</Counter>
+ <Counter worker="22">7058421</Counter>
+ </Mutex>
+ <Mutex activeWorker="24">
+ <Counter worker="0">6732039</Counter>
+ <Counter worker="1">6740799</Counter>
+ <Counter worker="2">6739953</Counter>
+ <Counter worker="3">6739922</Counter>
+ <Counter worker="4">6740444</Counter>
+ <Counter worker="5">6740482</Counter>
+ <Counter worker="6">6743768</Counter>
+ <Counter worker="7">6743812</Counter>
+ <Counter worker="8">6763824</Counter>
+ <Counter worker="9">6763887</Counter>
+ <Counter worker="10">6778202</Counter>
+ <Counter worker="11">6778178</Counter>
+ <Counter worker="12">6778302</Counter>
+ <Counter worker="13">6778317</Counter>
+ <Counter worker="14">6776805</Counter>
+ <Counter worker="15">6776837</Counter>
+ <Counter worker="16">6768008</Counter>
+ <Counter worker="17">6768084</Counter>
+ <Counter worker="18">6773716</Counter>
+ <Counter worker="19">6773687</Counter>
+ <Counter worker="20">6778367</Counter>
+ <Counter worker="21">6778379</Counter>
+ <Counter worker="22">6777990</Counter>
+ <Counter worker="23">6780252</Counter>
+ </Mutex>
+</TestEpoch01>
diff --git a/testsuite/epoch01/test_main.c b/testsuite/epoch01/test_main.c
new file mode 100644
index 00000000..7f8003b5
--- /dev/null
+++ b/testsuite/epoch01/test_main.c
@@ -0,0 +1,596 @@
+/*
+ * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <machine/rtems-bsd-kernel-space.h>
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/systm.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/epoch.h>
+
+#include <assert.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <ck_queue.h>
+
+#include <rtems.h>
+#include <rtems/cpuuse.h>
+#include <rtems/test.h>
+#include <rtems/thread.h>
+
+#define TEST_NAME "LIBBSD EPOCH 1"
+
+#define TEST_XML_NAME "TestEpoch01"
+
+#define CPU_COUNT 32
+
+typedef struct {
+ uint32_t counter[CPU_COUNT];
+ uint32_t removals[CPU_COUNT];
+ uint32_t item_counter[CPU_COUNT][CPU_COUNT];
+} test_stats;
+
+typedef struct test_item {
+ CK_SLIST_ENTRY(test_item) link;
+ struct epoch_context ec;
+ size_t index;
+ size_t worker_index;
+} test_item;
+
+typedef struct {
+ rtems_test_parallel_context base;
+ size_t active_workers;
+ CK_SLIST_HEAD(, test_item) item_list;
+ rtems_mutex mtx[2];
+ test_item items[CPU_COUNT];
+ test_stats stats;
+} test_context;
+
+static test_context test_instance;
+
+static rtems_interval
+test_duration(void)
+{
+
+ return (1 * rtems_clock_get_ticks_per_second());
+}
+
+static rtems_interval
+test_init(rtems_test_parallel_context *base, void *arg, size_t active_workers)
+{
+ test_context *ctx;
+
+ ctx = (test_context *)base;
+ memset(&ctx->stats, 0, sizeof(ctx->stats));
+ return (test_duration());
+}
+
+static void
+test_fini(rtems_test_parallel_context *base, const char *name,
+ size_t active_workers)
+{
+ test_context *ctx;
+ size_t i;
+
+ ctx = (test_context *)base;
+
+ printf(" <%s activeWorker=\"%zu\">\n", name, active_workers);
+
+ for (i = 0; i < active_workers; ++i) {
+ printf(" <Counter worker=\"%zu\">%" PRIu32 "</Counter>\n",
+ i, ctx->stats.counter[i]);
+ }
+
+ for (i = 0; i < active_workers; ++i) {
+ uint32_t r;
+
+ r = ctx->stats.removals[i];
+ if (r > 0) {
+ printf(" <Removals worker=\"%zu\">%" PRIu32
+ "</Removals>\n", i, r);
+ }
+ }
+
+ printf(" </%s>\n", name);
+}
+
+static void
+test_enter_exit_body(rtems_test_parallel_context *base, void *arg,
+ size_t active_workers, size_t worker_index)
+{
+ test_context *ctx = (test_context *)base;
+ epoch_t e = global_epoch;
+ uint32_t counter;
+
+ ctx = (test_context *)base;
+ e = global_epoch;
+ counter = 0;
+
+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
+ epoch_enter(e);
+ ++counter;
+ epoch_exit(e);
+ }
+
+ ctx->stats.counter[worker_index] = counter;
+}
+
+static void
+test_enter_exit_fini(rtems_test_parallel_context *base, void *arg,
+ size_t active_workers)
+{
+
+ test_fini(base, "EnterExit", active_workers);
+}
+
+static rtems_interval
+test_list_init(rtems_test_parallel_context *base, void *arg,
+ size_t active_workers)
+{
+ test_context *ctx;
+ size_t i;
+
+ ctx = (test_context *)base;
+ ctx->active_workers = active_workers;
+ CK_SLIST_INIT(&ctx->item_list);
+
+ for (i = 0; i < active_workers; ++i) {
+ test_item *item = &ctx->items[i];
+
+ CK_SLIST_INSERT_HEAD(&ctx->item_list, item, link);
+ item->index = i;
+
+ if (i == 0) {
+ item->worker_index = 0;
+ } else {
+ item->worker_index = CPU_COUNT;
+ }
+ }
+
+ return (test_init(&ctx->base, arg, active_workers));
+}
+
+static void
+test_list_callback(epoch_context_t ec)
+{
+ test_context *ctx;
+ test_item *item;
+ test_item *next;
+
+ ctx = &test_instance;
+ item = __containerof(ec, struct test_item, ec);
+ item->worker_index = (item->worker_index + 1) % ctx->active_workers;
+ next = CK_SLIST_NEXT(item, link);
+
+ if (next != NULL) {
+ CK_SLIST_INSERT_AFTER(next, item, link);
+ } else {
+ CK_SLIST_INSERT_HEAD(&ctx->item_list, item, link);
+ }
+}
+
+static void
+test_enter_list_op_exit_body(rtems_test_parallel_context *base, void *arg,
+ size_t active_workers, size_t worker_index)
+{
+ test_context *ctx;
+ epoch_t e;
+ uint32_t counter;
+ uint32_t removals;
+ uint32_t item_counter[CPU_COUNT];
+
+ ctx = (test_context *)base;
+ e = global_epoch;
+ counter = 0;
+ removals = 0;
+ memset(item_counter, 0, sizeof(item_counter));
+
+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
+ test_item *prev;
+ test_item *item;
+ test_item *tmp;
+ test_item *rm;
+
+ epoch_enter(e);
+ ++counter;
+
+ prev = NULL;
+ rm = NULL;
+ CK_SLIST_FOREACH_SAFE(item, &ctx->item_list, link, tmp) {
+ ++item_counter[item->index];
+
+ if (item->worker_index == worker_index) {
+ ++removals;
+ rm = item;
+
+ if (prev != NULL) {
+ CK_SLIST_REMOVE_AFTER(prev, link);
+ } else {
+ CK_SLIST_REMOVE_HEAD(&ctx->item_list,
+ link);
+ }
+ }
+
+ prev = item;
+ }
+
+ epoch_exit(e);
+
+ if (rm != NULL) {
+ epoch_call(e, &rm->ec, test_list_callback);
+ epoch_wait(e);
+ }
+ }
+
+ ctx->stats.counter[worker_index] = counter;
+ ctx->stats.removals[worker_index] = removals;
+ memcpy(ctx->stats.item_counter[worker_index], item_counter,
+ sizeof(ctx->stats.item_counter[worker_index]));
+}
+
+static void
+test_enter_list_op_exit_fini(rtems_test_parallel_context *base, void *arg,
+ size_t active_workers)
+{
+
+ test_fini(base, "EnterListOpExit", active_workers);
+}
+
+static void
+test_enter_exit_preempt_body(rtems_test_parallel_context *base, void *arg,
+ size_t active_workers, size_t worker_index)
+{
+ test_context *ctx = (test_context *)base;
+ epoch_t e = global_epoch;
+ uint32_t counter;
+
+ ctx = (test_context *)base;
+ e = global_epoch;
+ counter = 0;
+
+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
+ epoch_enter_preempt(e);
+ ++counter;
+ epoch_exit_preempt(e);
+ }
+
+ ctx->stats.counter[worker_index] = counter;
+}
+
+static void
+test_enter_exit_preempt_fini(rtems_test_parallel_context *base,
+ void *arg, size_t active_workers)
+{
+
+ test_fini(base, "EnterExitPreempt", active_workers);
+}
+
+static void
+test_enter_list_op_exit_preempt_body(rtems_test_parallel_context *base,
+ void *arg, size_t active_workers, size_t worker_index)
+{
+ test_context *ctx;
+ epoch_t e;
+ uint32_t counter;
+ uint32_t removals;
+ uint32_t item_counter[CPU_COUNT];
+
+ ctx = (test_context *)base;
+ e = global_epoch;
+ counter = 0;
+ removals = 0;
+ memset(item_counter, 0, sizeof(item_counter));
+
+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
+ test_item *prev;
+ test_item *item;
+ test_item *tmp;
+ test_item *rm;
+
+ epoch_enter_preempt(e);
+ ++counter;
+
+ prev = NULL;
+ rm = NULL;
+ CK_SLIST_FOREACH_SAFE(item, &ctx->item_list, link, tmp) {
+ ++item_counter[item->index];
+
+ if (item->worker_index == worker_index) {
+ ++removals;
+ rm = item;
+
+ if (prev != NULL) {
+ CK_SLIST_REMOVE_AFTER(prev, link);
+ } else {
+ CK_SLIST_REMOVE_HEAD(&ctx->item_list,
+ link);
+ }
+ }
+
+ prev = item;
+ }
+
+ epoch_exit_preempt(e);
+
+ if (rm != NULL) {
+ epoch_call(e, &rm->ec, test_list_callback);
+ epoch_wait_preempt(e);
+ }
+ }
+
+ ctx->stats.counter[worker_index] = counter;
+ ctx->stats.removals[worker_index] = removals;
+ memcpy(ctx->stats.item_counter[worker_index], item_counter,
+ sizeof(ctx->stats.item_counter[worker_index]));
+}
+
+static void
+test_enter_list_op_exit_preempt_fini(rtems_test_parallel_context *base,
+ void *arg, size_t active_workers)
+{
+
+ test_fini(base, "EnterListOpExitPreempt", active_workers);
+}
+
+static void
+test_thread_local_mutex_body(rtems_test_parallel_context *base, void *arg,
+ size_t active_workers, size_t worker_index)
+{
+ test_context *ctx = (test_context *)base;
+ rtems_mutex mtx;
+ uint32_t counter;
+
+ ctx = (test_context *)base;
+ rtems_mutex_init(&mtx, "test");
+ counter = 0;
+
+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
+ rtems_mutex_lock(&mtx);
+ ++counter;
+ rtems_mutex_unlock(&mtx);
+ }
+
+ rtems_mutex_destroy(&mtx);
+ ctx->stats.counter[worker_index] = counter;
+}
+
+static void
+test_thread_local_mutex_fini(rtems_test_parallel_context *base,
+ void *arg, size_t active_workers)
+{
+
+ test_fini(base, "ThreadLocalMutex", active_workers);
+}
+
+static void
+test_enter_mutex_exit_preempt_body(rtems_test_parallel_context *base,
+ void *arg, size_t active_workers, size_t worker_index)
+{
+ test_context *ctx = (test_context *)base;
+ epoch_t e = global_epoch;
+ uint32_t counter;
+ rtems_mutex *mtx;
+
+ ctx = (test_context *)base;
+ e = global_epoch;
+ counter = 0;
+ mtx = &ctx->mtx[worker_index % RTEMS_ARRAY_SIZE(ctx->mtx)];
+
+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
+ epoch_enter_preempt(e);
+ rtems_mutex_lock(mtx);
+ ++counter;
+ rtems_mutex_unlock(mtx);
+ epoch_exit_preempt(e);
+ }
+
+ ctx->stats.counter[worker_index] = counter;
+}
+
+static void
+test_enter_mutex_exit_preempt_fini(rtems_test_parallel_context *base,
+ void *arg, size_t active_workers)
+{
+
+ test_fini(base, "EnterMutexExitPreempt", active_workers);
+}
+
+static const rtems_test_parallel_job test_jobs[] = {
+ {
+ .init = test_init,
+ .body = test_enter_exit_body,
+ .fini = test_enter_exit_fini,
+ .cascade = true
+ }, {
+ .init = test_list_init,
+ .body = test_enter_list_op_exit_body,
+ .fini = test_enter_list_op_exit_fini,
+ .cascade = true
+ }, {
+ .init = test_init,
+ .body = test_enter_exit_preempt_body,
+ .fini = test_enter_exit_preempt_fini,
+ .cascade = true
+ }, {
+ .init = test_list_init,
+ .body = test_enter_list_op_exit_preempt_body,
+ .fini = test_enter_list_op_exit_preempt_fini,
+ .cascade = true
+ }, {
+ .init = test_init,
+ .body = test_thread_local_mutex_body,
+ .fini = test_thread_local_mutex_fini,
+ .cascade = true
+ }, {
+ .init = test_init,
+ .body = test_enter_mutex_exit_preempt_body,
+ .fini = test_enter_mutex_exit_preempt_fini,
+ .cascade = true
+ }
+};
+
+static void
+set_affinity(rtems_id task, size_t cpu_index)
+{
+ rtems_status_code sc;
+ cpu_set_t set;
+ rtems_id sched;
+ rtems_task_priority prio;
+
+ sc = rtems_scheduler_ident_by_processor(cpu_index, &sched);
+ assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_task_set_priority(task, RTEMS_CURRENT_PRIORITY, &prio);
+ assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_task_set_scheduler(task, sched, prio);
+ assert(sc == RTEMS_SUCCESSFUL);
+
+ CPU_ZERO(&set);
+ CPU_SET((int)cpu_index, &set);
+ sc = rtems_task_set_affinity(task, sizeof(set), &set);
+ assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void
+setup_worker(rtems_test_parallel_context *base, size_t worker_index,
+ rtems_id worker_id)
+{
+
+ set_affinity(worker_id, worker_index);
+}
+
+static void
+test_main(void)
+{
+ test_context *ctx;
+
+ ctx = &test_instance;
+ rtems_mutex_init(&ctx->mtx[0], "test 0");
+ rtems_mutex_init(&ctx->mtx[1], "test 1");
+
+ printf("<" TEST_XML_NAME ">\n");
+
+ setup_worker(&ctx->base, 0, rtems_task_self());
+ rtems_test_parallel(&ctx->base, setup_worker, &test_jobs[0],
+ RTEMS_ARRAY_SIZE(test_jobs));
+
+ printf("</" TEST_XML_NAME ">\n");
+ rtems_mutex_destroy(&ctx->mtx[0]);
+ rtems_mutex_destroy(&ctx->mtx[1]);
+ exit(0);
+}
+
+#define CONFIGURE_MAXIMUM_PROCESSORS CPU_COUNT
+
+#ifdef RTEMS_SMP
+
+#define CONFIGURE_SCHEDULER_EDF_SMP
+
+#include <rtems/scheduler.h>
+
+RTEMS_SCHEDULER_EDF_SMP(a, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(b, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(c, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(d, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(e, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(g, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(h, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(i, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(j, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(k, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(l, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(m, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(n, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(o, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(p, CPU_COUNT);
+RTEMS_SCHEDULER_EDF_SMP(q, CPU_COUNT);
+
+#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(a, rtems_build_name(' ', ' ', ' ', 'a')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(b, rtems_build_name(' ', ' ', ' ', 'b')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(c, rtems_build_name(' ', ' ', ' ', 'c')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(d, rtems_build_name(' ', ' ', ' ', 'd')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(e, rtems_build_name(' ', ' ', ' ', 'e')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(g, rtems_build_name(' ', ' ', ' ', 'g')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(h, rtems_build_name(' ', ' ', ' ', 'h')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(i, rtems_build_name(' ', ' ', ' ', 'i')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(j, rtems_build_name(' ', ' ', ' ', 'j')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(k, rtems_build_name(' ', ' ', ' ', 'k')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(l, rtems_build_name(' ', ' ', ' ', 'l')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(m, rtems_build_name(' ', ' ', ' ', 'm')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(n, rtems_build_name(' ', ' ', ' ', 'n')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(o, rtems_build_name(' ', ' ', ' ', 'o')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(p, rtems_build_name(' ', ' ', ' ', 'p')), \
+ RTEMS_SCHEDULER_TABLE_EDF_SMP(q, rtems_build_name(' ', ' ', ' ', 'q')) \
+
+#define CONFIGURE_SCHEDULER_ASSIGNMENTS \
+ RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+ RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(3, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(3, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(4, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(4, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(5, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(5, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(6, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(6, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(7, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(7, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(8, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(8, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(9, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(9, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(10, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(10, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(11, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(11, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(12, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(12, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(13, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(13, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(14, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(14, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(15, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(15, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
+
+#endif /* RTEMS_SMP */
+
+#include <rtems/bsd/test/default-init.h>