{"item":"cont-a","blocked":null,"design_url":"https://api.imdnotdead.fun/artifacts/6e46dc1999de3dc981752e3049cb9c8ecb549b2bf96dbbf91c2b960aac34babe","code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.24;\n\nimport {AMMStrategyBase} from \"./AMMStrategyBase.sol\";\nimport {TradeInfo} from \"./IAMMStrategy.sol\";\n\ncontract Strategy is AMMStrategyBase {\n    uint256 constant ELAPSED_CAP = 8;\n    uint256 constant SIGNAL_THRESHOLD = WAD / 650;\n    uint256 constant DIR_DECAY = 750000000000000000;\n    uint256 constant ACT_DECAY = 530000000000000000;\n    uint256 constant SIZE_DECAY = 530000000000000000;\n    uint256 constant TOX_DECAY = 910000000000000000;\n    uint256 constant SIGMA_DECAY = 690000000000000000;\n    uint256 constant LAMBDA_DECAY = 990000000000000000;\n    uint256 constant SIZE_BLEND_DECAY = 828000000000000000;\n    uint256 constant TOX_BLEND_DECAY = 51000000000000000;\n    uint256 constant ACT_BLEND_DECAY = 985000000000000000;\n    uint256 constant PHAT_ALPHA = 270000000000000000;\n    uint256 constant PHAT_ALPHA_RETAIL = 60000000000000000;\n    uint256 constant PHAT_ALPHA_SAME = 120000000000000000;\n    uint256 constant REVERT_U = 0;\n    uint256 constant DIR_IMPACT_MULT = 4;\n    uint256 constant GATE_SIGMA_MULT = 7200000000000000000;\n    uint256 constant MIN_GATE = 30000000000000000;\n    uint256 constant TRADE_TOX_BOOST = 3500 * BPS;\n    uint256 constant STALE_ATTRACT_FRAC = 1050000000000000000;\n    uint256 constant RET_CAP = WAD / 35;\n    uint256 constant TOX_CAP = WAD / 5;\n    uint256 constant TRADE_RATIO_CAP = WAD / 5;\n    uint256 constant LAMBDA_CAP = 1820000000000000000;\n    uint256 constant STEP_COUNT_CAP = 64;\n    uint256 constant BASE_FEE = 4 * BPS;\n    uint256 constant SIGMA_COEF = 200000000000000000;\n    uint256 constant LAMBDA_COEF = 12 * BPS;\n    uint256 constant FLOW_SIZE_COEF = 4842 * BPS;\n    uint256 constant TOX_COEF = 300 * BPS;\n    uint256 constant TOX_QUAD_COEF = 15000 * BPS;\n    uint256 constant ACT_COEF = 91843 * BPS;\n    uint256 constant DIR_COEF = 20 * BPS;\n    uint256 constant DIR_TOX_COEF = 100 * BPS;\n    uint256 constant STALE_DIR_COEF = 6850 * BPS;\n    uint256 constant SIGMA_TOX_COEF = 500 * BPS;\n    uint256 constant TAIL_KNEE = 600 * BPS;\n    uint256 constant TAIL_SLOPE_PROTECT = 930000000000000000;\n    uint256 constant TAIL_SLOPE_ATTRACT = 850000000000000000;\n\n    function afterInitialize(uint256 initialX, uint256 initialY) external override returns (uint256, uint256) {\n        slots[0] = BASE_FEE; slots[1] = BASE_FEE; slots[3] = WAD; \n        slots[5] = initialX > 0 ? wdiv(initialY, initialX) : 100 * WAD;\n        slots[6] = 950000000000000; slots[7] = 800000000000000000; slots[8] = 2000000000000000;\n        slots[13] = 902500000000; slots[14] = slots[5]; \n        return (BASE_FEE, BASE_FEE);\n    }\n\n    function afterSwap(TradeInfo calldata trade) external override returns (uint256, uint256) {\n        uint256 prevBidFee = slots[0]; uint256 prevAskFee = slots[1]; uint256 lastTs = uint64(slots[2]);\n        uint256 dirState = slots[3]; uint256 actEma = slots[4]; uint256 pHat = slots[5];\n        uint256 sigmaHat = slots[6]; uint256 lambdaHat = slots[7]; uint256 sizeHat = slots[8];\n        uint256 toxEma = slots[9]; uint256 stepTradeCount = slots[10];\n\n        uint256 sigmaForFast = sigmaHat;\n        uint256 fastHat = slots[14];\n        uint256 uncertainty = slots[13];\n        uint256 silent = trade.timestamp > lastTs ? trade.timestamp - lastTs : 0;\n        bool isNewStep = trade.timestamp > lastTs;\n        if (isNewStep) {\n            uint256 elapsedRaw = trade.timestamp - lastTs;\n            uint256 elapsed = elapsedRaw > ELAPSED_CAP ? ELAPSED_CAP : elapsedRaw;\n            dirState = _decayCentered(dirState, DIR_DECAY, elapsed);\n            actEma = wmul(actEma, _powWad(ACT_DECAY, elapsed));\n            sizeHat = wmul(sizeHat, _powWad(SIZE_DECAY, elapsed));\n            toxEma = wmul(toxEma, _powWad(TOX_DECAY, elapsed));\n            if (stepTradeCount > 0 && elapsedRaw > 0) {\n                uint256 lambdaInst = (stepTradeCount * WAD) / elapsedRaw;\n                if (lambdaInst > LAMBDA_CAP) lambdaInst = LAMBDA_CAP;\n                lambdaHat = wmul(lambdaHat, LAMBDA_DECAY) + wmul(lambdaInst, WAD - LAMBDA_DECAY);\n            }\n            // Process variance is propagated inside the censored update.\n            if (uncertainty > 100000000000000) uncertainty = 100000000000000;\n            stepTradeCount = 0;\n        }\n\n        bool firstInStep = stepTradeCount == 0;\n        uint256 spot = trade.reserveX > 0 ? wdiv(trade.reserveY, trade.reserveX) : pHat;\n        if (pHat == 0) pHat = spot;\n\n        uint256 feeUsed = trade.isBuy ? prevBidFee : prevAskFee;\n        uint256 gamma = feeUsed < WAD ? WAD - feeUsed : 0;\n        uint256 pImplied;\n        if (gamma == 0) { pImplied = spot; }\n        else { pImplied = trade.isBuy ? wmul(spot, gamma) : wdiv(spot, gamma); }\n\n        // S: infer a no-trade interval center from the last post-trade spot.\n        uint256 silenceScale = WAD;\n        if (firstInStep && silent > 1) {\n            uint256 g = silent - 1;\n            if (g > 1) g = 1;\n            uint256 w = WAD - _powWad(800000000000000000, g);\n            uint256 s = slots[2] >> 64;\n            if (s == 0) s = pHat;\n            uint256 c = (wmul(s, WAD - prevBidFee) + wdiv(s, WAD - prevAskFee)) / 2;\n            if (c >= pHat) pHat += wmul(w, c - pHat);\n            else pHat -= wmul(w, pHat - c);\n            silenceScale = WAD - wmul(300000000000000000, w);\n        }\n\n        {\n            uint256 ret = pHat > 0 ? wdiv(absDiff(pImplied, pHat), pHat) : 0;\n            uint256 alpha = firstInStep ? PHAT_ALPHA : PHAT_ALPHA_RETAIL;\n            uint256 prePhat = pHat;\n            bool secondPrint = !firstInStep && stepTradeCount == 1;\n            bool sameDir = false; bool oppDir = false;\n            if (secondPrint) {\n                bool up2 = pImplied >= pHat;\n                uint256 d1 = slots[12];\n                if (d1 != 0) { sameDir = (d1 == 1) == up2; oppDir = !sameDir; }\n                if (sameDir) alpha = PHAT_ALPHA_SAME;\n            }\n            if (firstInStep) { slots[12] = pImplied >= pHat ? 1 : 2; }\n            uint256 adaptiveGate = wmul(sigmaHat, GATE_SIGMA_MULT);\n            if (adaptiveGate < MIN_GATE) adaptiveGate = MIN_GATE;\n            alpha = wmul(alpha, silenceScale);\n            adaptiveGate = wmul(adaptiveGate, silenceScale);\n            if (ret <= adaptiveGate) { pHat = wmul(pHat, WAD - alpha) + wmul(pImplied, alpha); }\n            if (oppDir && REVERT_U > 0) {\n                uint256 pre = slots[11];\n                if (pre > pHat) pHat = pHat + wmul(pre - pHat, REVERT_U);\n                else pHat = pHat - wmul(pHat - pre, REVERT_U);\n            }\n            if (firstInStep) {\n                if (ret > RET_CAP) ret = RET_CAP;\n                sigmaHat = wmul(sigmaHat, SIGMA_DECAY) + wmul(ret, WAD - SIGMA_DECAY);\n            }\n        }\n\n        // Interior retail routing equalizes fee-adjusted marginal prices.\n        // Subsequent trades in a step cannot be the initial arbitrage trade.\n        if (!firstInStep && feeUsed > 30 * BPS && gamma > 0) {\n            uint256 normalSpot = trade.isBuy\n                ? wdiv(wmul(spot, gamma), WAD - 30 * BPS)\n                : wdiv(wmul(spot, WAD - 30 * BPS), gamma);\n            pHat = wmul(pHat, 90 * WAD / 100) + wmul(normalSpot, 10 * WAD / 100);\n        }\n\n        // Censored assumed-density posterior. No external or future inputs.\n        (fastHat, uncertainty) = _posterior(PosteriorInput(\n            fastHat, uncertainty, pImplied, spot, slots[2] >> 64,\n            prevBidFee, prevAskFee, firstInStep, silent, trade.isBuy,\n            trade.reserveY > 0 ? wdiv(trade.amountY, trade.reserveY) : 0\n        ));\n        slots[13] = uncertainty;\n        slots[14] = fastHat;\n        uint256 tradeRatio = trade.reserveY > 0 ? wdiv(trade.amountY, trade.reserveY) : 0;\n        if (tradeRatio > TRADE_RATIO_CAP) tradeRatio = TRADE_RATIO_CAP;\n\n        if (tradeRatio > SIGNAL_THRESHOLD) {\n            uint256 push = tradeRatio * DIR_IMPACT_MULT;\n            if (push > WAD / 4) push = WAD / 4;\n            if (trade.isBuy) {\n                dirState = dirState + push;\n                if (dirState > 2 * WAD) dirState = 2 * WAD;\n            } else {\n                dirState = dirState > push ? dirState - push : 0;\n            }\n            actEma = wmul(actEma, ACT_BLEND_DECAY) + wmul(tradeRatio, WAD - ACT_BLEND_DECAY);\n            sizeHat = wmul(sizeHat, SIZE_BLEND_DECAY) + wmul(tradeRatio, WAD - SIZE_BLEND_DECAY);\n            if (sizeHat > WAD) sizeHat = WAD;\n        }\n\n        uint256 tox = pHat > 0 ? wdiv(absDiff(spot, pHat), pHat) : 0;\n        if (tox > TOX_CAP) tox = TOX_CAP;\n        toxEma = wmul(toxEma, TOX_BLEND_DECAY) + wmul(tox, WAD - TOX_BLEND_DECAY);\n        uint256 toxSignal = toxEma;\n\n        stepTradeCount = stepTradeCount + 1;\n        if (stepTradeCount > STEP_COUNT_CAP) stepTradeCount = STEP_COUNT_CAP;\n\n        uint256 flowSize = wmul(lambdaHat, sizeHat);\n        uint256 fBase = BASE_FEE + wmul(SIGMA_COEF, sigmaHat) + wmul(LAMBDA_COEF, lambdaHat) + wmul(FLOW_SIZE_COEF, flowSize);\n        uint256 fMid = fBase + wmul(TOX_COEF, toxSignal) + wmul(TOX_QUAD_COEF, wmul(toxSignal, toxSignal)) + wmul(ACT_COEF, actEma);\n        fMid = fMid + wmul(SIGMA_TOX_COEF, wmul(sigmaHat, toxSignal));\n\n        uint256 dirDev; bool sellPressure;\n        if (dirState >= WAD) { dirDev = dirState - WAD; sellPressure = true; }\n        else { dirDev = WAD - dirState; sellPressure = false; }\n\n        uint256 skew = wmul(DIR_COEF, dirDev) + wmul(DIR_TOX_COEF, wmul(dirDev, toxSignal));\n        uint256 bidFee; uint256 askFee;\n        if (sellPressure) {\n            bidFee = fMid + skew;\n            askFee = fMid > skew ? fMid - skew : 0;\n        } else {\n            askFee = fMid + skew;\n            bidFee = fMid > skew ? fMid - skew : 0;\n        }\n\n        {\n            uint256 staleHat = wmul(pHat, 700000000000000000) + wmul(fastHat, 300000000000000000);\n            uint256 staleTox = wdiv(absDiff(spot, staleHat), staleHat);\n            if (staleTox > TOX_CAP) staleTox = TOX_CAP;\n            uint256 staleShift = wmul(STALE_DIR_COEF, staleTox);\n            uint256 attractShift = wmul(staleShift, STALE_ATTRACT_FRAC);\n            if (spot >= staleHat) {\n                bidFee = bidFee + staleShift;\n                askFee = askFee > attractShift ? askFee - attractShift : 0;\n            } else {\n                askFee = askFee + staleShift;\n                bidFee = bidFee > attractShift ? bidFee - attractShift : 0;\n            }\n        }\n\n        {\n            bool tradeAligned = (trade.isBuy && spot >= pHat) || (!trade.isBuy && spot < pHat);\n            if (tradeAligned) {\n                uint256 tradeBoost = wmul(TRADE_TOX_BOOST, tradeRatio);\n                if (!firstInStep && tradeBoost > 16 * BPS) tradeBoost = 16 * BPS;\n                if (trade.isBuy) { bidFee = bidFee + tradeBoost; }\n                else { askFee = askFee + tradeBoost; }\n            }\n        }\n\n        if (sellPressure) {\n            bidFee = clampFee(_compressTailWithSlope(bidFee, TAIL_SLOPE_PROTECT));\n            askFee = clampFee(_compressTailWithSlope(askFee, TAIL_SLOPE_ATTRACT));\n        } else {\n            askFee = clampFee(_compressTailWithSlope(askFee, TAIL_SLOPE_PROTECT));\n            bidFee = clampFee(_compressTailWithSlope(bidFee, TAIL_SLOPE_ATTRACT));\n        }\n\n        if (firstInStep) {\n            if (askFee > bidFee && bidFee > 30 * BPS) bidFee = 30 * BPS;\n            else if (bidFee > askFee && askFee > 30 * BPS) askFee = 30 * BPS;\n        }\n\n        if (bidFee > askFee && askFee > 36 * BPS) askFee = 36 * BPS;\n        else if (askFee > bidFee && bidFee > 36 * BPS) bidFee = 36 * BPS;\n\n        slots[0] = bidFee; slots[1] = askFee; slots[2] = (spot << 64) | trade.timestamp;\n        slots[3] = dirState; slots[4] = actEma; slots[5] = pHat;\n        slots[6] = sigmaHat; slots[7] = lambdaHat; slots[8] = sizeHat;\n        slots[9] = toxEma; slots[10] = stepTradeCount;\n\n        (bidFee, askFee) = _cont(bidFee, askFee, trade, firstInStep);\n        slots[0] = bidFee; slots[1] = askFee;\n        return (bidFee, askFee);\n    }\n\n\n\n    // Own-observable table only; 27 state cells x (later + 4 first-event buckets).\n    bytes constant CONT = hex\"020402040202020202020204020402020202020202020202020202020202020402040202020402020204020402020204020402040202020202020202020402040202020402020204020402020204020402040202020202020204020202020202020202020202020202020202020202020202020202020202040204020202020402020402020202020202020202020202020202020202040204020202020402020204040202020202020202020202020202020202040202020202040202020402020202020402020202020202020202020202040204020202040202020402040204020402020204020202020202020202040204020202040202020402040204020402020204020202040202020202\";\n    function _cont(uint256 bid, uint256 ask, TradeInfo calldata t, bool first)\n        internal view returns (uint256, uint256) {\n        uint256 stale = wmul(slots[5], 7e17) + wmul(slots[14], 3e17);\n        if (t.reserveX == 0 || t.reserveY == 0 || stale == 0) return (bid,ask);\n        uint256 spot = wdiv(t.reserveY,t.reserveX);\n        if (spot < wmul(stale,96e16) || spot > wmul(stale,104e16)) return (bid,ask);\n        uint256 v = slots[13];\n        uint256 flow = wmul(slots[7],slots[8]);\n        if (v > 1e14 || flow > 2e16) return (bid,ask);\n        uint256 u = spot < wmul(stale,999e15) ? 0 : (spot > wmul(stale,1001e15) ? 2 : 1);\n        uint256 vi = v < 25e10 ? 0 : (v > 225e10 ? 2 : 1);\n        uint256 li = flow < 25e13 ? 0 : (flow > 15e14 ? 2 : 1);\n        uint256 eventBucket = first ? 1 + (t.isBuy ? 2 : 0) + (wdiv(t.amountY,t.reserveY)>3e15 ? 1 : 0) : 0;\n        uint256 i = (((u*3+vi)*3+li)*5+eventBucket)*2;\n        int256 db = int256(uint256(uint8(CONT[i]))) - 2;\n        int256 da = int256(uint256(uint8(CONT[i+1]))) - 2;\n        if (db == 0 && da == 0) return (bid,ask);\n        int256 bb = int256(bid) + db * int256(BPS/4);\n        int256 aa = int256(ask) + da * int256(BPS/4);\n        // Reject the entire action if it would clip or violate either V10 cap.\n        if (bb < 0 || aa < 0 || bb > int256(WAD/10) || aa > int256(WAD/10)) return (bid,ask);\n        uint256 b=uint256(bb); uint256 a=uint256(aa);\n        if ((b>a && a>36*BPS) || (a>b && b>36*BPS)) return (bid,ask);\n        if (first && ((b>a && a>30*BPS) || (a>b && b>30*BPS))) return (bid,ask);\n        return (b,a);\n    }\n\n    struct PosteriorInput {\n        uint256 mu; uint256 v; uint256 obs; uint256 spot; uint256 preSpot;\n        uint256 bid; uint256 ask; bool first; uint256 silent; bool buy; uint256 size;\n    }\n    function _posterior(PosteriorInput memory x) internal pure returns (uint256, uint256) {\n        if (x.mu == 0) x.mu = x.spot;\n        if (x.v < 10000000000) x.v = 10000000000;\n        uint256 lo = wmul(x.preSpot, WAD-x.bid);\n        uint256 hi = wdiv(x.preSpot, WAD-x.ask);\n        if (x.first) {\n            if (x.silent>1 && x.preSpot>0) {\n                uint256 elapsed=x.silent>8?8:x.silent;\n                x.v += 902500000000*(elapsed-1);\n                (x.mu,x.v)=_band(x.mu,x.v,lo,hi);\n            }\n            x.v+=902500000000;\n        }\n        uint256 mRetail = x.mu;\n        uint256 vRetail = x.v;\n        // A missing own-pool trade is a censored price observation.\n        if (x.first && x.preSpot > 0) {\n            (mRetail, vRetail) = _band(x.mu, x.v, lo, hi);\n        }\n        if (!x.first) {\n            // A later print is retail. Only an interior route is an observation\n            // of the other pool, with explicit observation uncertainty.\n            uint256 fee = x.buy ? x.bid : x.ask;\n            if (fee > 30 * BPS) {\n                uint256 normal = x.buy ? wdiv(wmul(x.spot, WAD-fee), WAD-30*BPS)\n                    : wdiv(wmul(x.spot, WAD-30*BPS), WAD-fee);\n                uint256 residual = wdiv(absDiff(normal, x.mu),x.mu);\n                uint256 noise = 9000000000000 + wmul(residual,residual);\n                uint256 k = wdiv(x.v,x.v+noise);\n                return (_blend(x.mu,normal,k),wmul(x.v,WAD-k));\n            }\n            return (x.mu,x.v);\n        }\n        uint256 e = wdiv(absDiff(x.obs,x.mu),x.mu);\n        uint256 totalV = x.v + 22500000000;\n        uint256 z = wdiv(wmul(e,e),totalV);\n        uint256 density = _powWad(wdiv(WAD,WAD+z/8),4);\n        uint256 odds = wmul(density,wdiv(4000000000000000,_isqrt(totalV*WAD)));\n        if (x.size > 3000000000000000) odds = wmul(odds,4*WAD/10);\n        if (x.silent > 1) odds = wmul(odds,8*WAD/10);\n        uint256 sd = _isqrt(x.v*WAD);\n        uint256 width = wdiv(hi-lo,x.mu);\n        uint256 distance = x.mu<lo?lo-x.mu:(x.mu>hi?x.mu-hi:0);\n        uint256 zBand = wdiv(wdiv(distance,x.mu),sd);\n        uint256 mass = wmul(wdiv(width,width+2*sd),wdiv(WAD,WAD+wmul(zBand,zBand)));\n        if (mass < WAD/100) mass = WAD/100;\n        odds = wdiv(odds,mass);\n        uint256 prob = wdiv(odds,WAD+odds);\n        uint256 kArb = wdiv(x.v,totalV);\n        uint256 mArb = _blend(x.mu,x.obs,kArb);\n        uint256 mean = _blend(mRetail,mArb,prob);\n        uint256 between = wdiv(absDiff(mArb,mRetail),x.mu);\n        uint256 variance = wmul(prob,wmul(x.v,WAD-kArb)) + wmul(WAD-prob,vRetail)\n            + wmul(wmul(prob,WAD-prob),wmul(between,between));\n        if (variance > 100000000000000) variance = 100000000000000;\n        return (mean,variance);\n    }\n    function _blend(uint256 a,uint256 b,uint256 w) internal pure returns(uint256) {\n        return b>=a ? a+wmul(b-a,w) : a-wmul(a-b,w);\n    }\n    function _band(uint256 mu,uint256 v,uint256 lo,uint256 hi) internal pure returns(uint256,uint256) {\n        // Soft interval likelihood avoids discontinuities at quadrature nodes.\n        uint256 sd=wmul(mu,_isqrt(v*WAD));\n        uint256[3] memory acc;\n        for(uint256 j=0;j<7;j++) {\n            uint256 p=j<3 ? (mu>(3-j)*sd?mu-(3-j)*sd:1) : mu+(j-3)*sd;\n            uint256 w=j==3?72:(j==2||j==4?45:(j==1||j==5?10:1));\n            uint256 distance=p<lo?lo-p:(p>hi?p-hi:0);\n            uint256 z=sd>0?wdiv(distance,sd):0;\n            uint256 likelihood=wdiv(WAD,WAD+4*wmul(z,z));\n            w=wmul(w*WAD,likelihood);\n            acc[0]+=w;acc[1]+=wmul(w,p);\n            uint256 d=wdiv(absDiff(p,mu),mu);\n            acc[2]+=wmul(w,wmul(d,d));\n        }\n        uint256 m=wdiv(acc[1],acc[0]);\n        uint256 d=wdiv(absDiff(m,mu),mu);\n        uint256 second=wdiv(acc[2],acc[0]);\n        return(m,second>wmul(d,d)?second-wmul(d,d):10000000000);\n    }\n\n    function _compressTailWithSlope(uint256 fee, uint256 slope) internal pure returns (uint256) {\n        if (fee <= TAIL_KNEE) return fee;\n        return TAIL_KNEE + wmul(fee - TAIL_KNEE, slope);\n    }\n\n    function _powWad(uint256 factor, uint256 exp) internal pure returns (uint256 result) {\n        result = WAD;\n        while (exp > 0) {\n            if (exp & 1 == 1) result = wmul(result, factor);\n            factor = wmul(factor, factor);\n            exp >>= 1;\n        }\n    }\n\n    function _decayCentered(uint256 centered, uint256 decayFactor, uint256 elapsed) internal pure returns (uint256) {\n        uint256 mul = _powWad(decayFactor, elapsed);\n        if (centered >= WAD) { return WAD + wmul(centered - WAD, mul); }\n        uint256 below = wmul(WAD - centered, mul);\n        return below < WAD ? WAD - below : 0;\n    }\n\n    // Floor square root: bit-length seed and seven Newton steps (all uint256).\n    function _isqrt(uint256 x) internal pure returns (uint256 r) {\n        if (x == 0) return 0;\n        unchecked {\n            uint256 y = x;\n            r = 1;\n            if (y >> 128 != 0) { y >>= 128; r <<= 64; }\n            if (y >> 64 != 0) { y >>= 64; r <<= 32; }\n            if (y >> 32 != 0) { y >>= 32; r <<= 16; }\n            if (y >> 16 != 0) { y >>= 16; r <<= 8; }\n            if (y >> 8 != 0) { y >>= 8; r <<= 4; }\n            if (y >> 4 != 0) { y >>= 4; r <<= 2; }\n            if (y >> 2 != 0) { r <<= 1; }\n            r = (r + x / r) >> 1;\n            r = (r + x / r) >> 1;\n            r = (r + x / r) >> 1;\n            r = (r + x / r) >> 1;\n            r = (r + x / r) >> 1;\n            r = (r + x / r) >> 1;\n            r = (r + x / r) >> 1;\n            uint256 t = x / r;\n            return r < t ? r : t;\n        }\n    }\n\n    function getName() external pure override returns (string memory) { return \"censored_10\"; }\n}\n","sha256":"ff0575c4bfc0c15da14f44baf03e6b193aa1fb4fffd90687b05b1dd806d3d3d9","family":"B: bounded two-step empirical table argmax G+C","params":{"baseline":{"name":"V10","sha256":"cd9bdb45ab0537ad25c4fd90ca8618898cef6386de3df65f192eaef65fbca245"},"simulator":{"commit":"6b6921f8d463314aa7c96234e1be25a25245f704","wheel_sha256":"aedb68280aca34c110968f00148387c95885207913fb2cf19a1ab4c5cfd6887a","numpy":"2.5.4","python":"3.12.16","workers":8},"actions_signed_quarter_bps":[[0,0],[1,0],[-1,0],[0,1],[0,-1],[2,0],[-2,0],[0,2],[0,-2],[1,-1],[-1,1]],"tables":{"B":[7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,7,7,0,7,0,7,7,0,7,7,7,0,0,0,0,7,7,0,7,0,7,7,0,7,7,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,7,0,5,0,0,0,0,0,0,0,0,0,5,5,0,7,0,7,5,0,0,0,0,0,0,0,0,5,0,0,5,0,5,0,0,5,0,0,0,0,0,0,5,5,0,5,0,5,5,5,5,0,5,0,0,0,0,5,5,0,5,0,5,5,5,5,0,5,0,5,0,0],"C0":[7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,7,7,0,7,0,7,7,0,7,7,7,0,0,0,0,7,7,0,7,0,7,7,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,5,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,8,0,0,0,0,0,0,5,0,0,5,0,5,0,0,5,0,0,0,0,0,0,5,5,0,5,0,5,5,5,5,0,5,0,0,0,0,5,5,0,5,0,5,5,5,5,0,5,0,5,0,0],"D":[9,9,0,0,0,9,9,0,0,0,0,0,0,0,0,9,9,0,9,0,9,9,0,9,9,9,0,0,0,0,9,9,0,1,0,9,9,0,9,9,9,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,3,0,3,0,0,0,0,0,0,0,0,0,3,1,0,3,0,1,3,0,1,0,0,0,0,0,0,10,0,0,10,0,10,0,0,10,0,0,0,0,0,0,10,10,0,10,0,10,10,10,10,0,10,0,0,0,0,10,3,0,10,0,10,10,10,10,0,10,0,10,0,0]},"state_grid":{"cells":135,"u":"spot/staleHat: below 0.999, [0.999,1.001], above 1.001; identity outside [0.96,1.04]","v":"slot13 relative variance: below 2.5e-7, [2.5e-7,2.25e-6], above 2.25e-6; identity above 1e-4","flow":"lambdaHat*sizeHat (both WAD; sizeHat already reserve-normalized): below .00025, [.00025,.0015], above .0015; identity above .02","event":"later=0; first=1+2*isBuy+(amountY/reserveY>.003); first determined by V10 after elapsed-step reset","index":"((u*3+v)*3+flow)*5+event"},"gates":{"min_cell_samples":256,"min_valid_action_samples":128,"margin":"mean paired objective delta > 1.5*SE + 1e-8; identity tie winner","curvature":"B and C0 reject significantly positive central retail curvature; threshold 2*(SEplus+SEminus)+1e-8","unsupported":"identity","fee_caps":"Whole action rejected if any clamp, underflow, 10% bound, first-step 30 bps lower-side cap, or 36 bps lower-side cap would be violated"},"fit":{"start":760256,"n":512,"steps":2000,"stride":4,"callbacks":1046975,"samples":253701,"v10_sha256":"cd9bdb45ab0537ad25c4fd90ca8618898cef6386de3df65f192eaef65fbca245","seconds":599.9974374771118},"action_diagnostics":{"weighted_B_C0_action_disagreement":0.07853733331756674,"training_samples":253701,"table_selections_before_runtime_cap_rejection":{"B":[{"action":[0,0],"samples":3140},{"action":[1,0],"samples":0},{"action":[-1,0],"samples":0},{"action":[0,1],"samples":0},{"action":[0,-1],"samples":0},{"action":[2,0],"samples":128629},{"action":[-2,0],"samples":0},{"action":[0,2],"samples":121932},{"action":[0,-2],"samples":0},{"action":[1,-1],"samples":0},{"action":[-1,1],"samples":0}],"C0":[{"action":[0,0],"samples":12672},{"action":[1,0],"samples":0},{"action":[-1,0],"samples":0},{"action":[0,1],"samples":0},{"action":[0,-1],"samples":0},{"action":[2,0],"samples":127702},{"action":[-2,0],"samples":0},{"action":[0,2],"samples":112116},{"action":[0,-2],"samples":1211},{"action":[1,-1],"samples":0},{"action":[-1,1],"samples":0}],"D":[{"action":[0,0],"samples":1929},{"action":[1,0],"samples":22804},{"action":[-1,0],"samples":0},{"action":[0,1],"samples":27595},{"action":[0,-1],"samples":0},{"action":[2,0],"samples":0},{"action":[-2,0],"samples":0},{"action":[0,2],"samples":0},{"action":[0,-2],"samples":0},{"action":[1,-1],"samples":101394},{"action":[-1,1],"samples":99979}]}},"active_cells":{"B":51,"C0":46,"D":52},"freeze":{"frozen_at_utc":"2026-11-08T21:58:25.693012+00:00","name":"B","ablation":"C0","sha256":"ff0575c4bfc0c15da14f44baf03e6b193aa1fb4fffd90687b05b1dd806d3d3d9","rule":"largest paired recheck mean among top two gas-valid screen arms","screen_seeds":[760000,760255],"recheck_seeds":[764000,764255],"heldout_seeds":[765000,765511]},"estimator":"Empirical conditional common-random-number rollouts, all remaining current-step retail plus next-opening arb; actual V10 bytecode transitions after every hypothetical own trade; fee perturbation is applied once at sampled callback, then V10 resumes.","D_target":"Only action-induced terminal endpoint change, evaluated with identity-branch terminal fees held fixed. Finite differences at signed quarter-bps actions estimate the endpoint-only direction.","fit_seed_range":[760256,760767],"diagnostic_seed_range":[760768,760831],"screen_seed_range":[760000,760255],"recheck_seed_range":[764000,764255]},"parity":{"n":32,"seeds":[766000,766031],"max_abs_diff":0.0,"max_abs_retail_diff":0.0,"max_abs_arb_diff":0.0,"disabled_sha256":"c687891715a7b7246840b36ebc60b5f118761151f09d34859cb540b094947071","gas":{"max_ok":198772,"init_max_ok":220990,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"afterSwap_calls":337555,"afterInitialize_calls":32}},"screen":[{"name":"B","sha256":"ff0575c4bfc0c15da14f44baf03e6b193aa1fb4fffd90687b05b1dd806d3d3d9","n":256,"mean_diff":-0.01875251716096593,"se":0.01750544536021506,"worst":[{"seed":760249,"d":-0.8499523760179954},{"seed":760089,"d":-0.7646660908786771},{"seed":760146,"d":-0.7082828120547902},{"seed":760003,"d":-0.703048920084143},{"seed":760251,"d":-0.614407173170548}],"retail_edge_delta":{"mean":-0.46142882574621336,"se":0.01835712786019437},"arb_edge_delta":{"mean":0.4426763085852503,"se":0.007100668792306017},"gas":{"max_ok":199391,"init_max_ok":220990,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"afterSwap_calls":2569554,"afterInitialize_calls":256},"reconciliation_max_abs":9.947598300641403e-14,"valid":true},{"name":"C0","sha256":"1bb4c3445f8b4f7a12ff0772b9e163aae4bb1c362d4c2b54fa0727d48933127c","n":256,"mean_diff":-0.03003308625602341,"se":0.017720809299978425,"worst":[{"seed":760249,"d":-1.0866406037821434},{"seed":760089,"d":-0.79130996902893},{"seed":760153,"d":-0.7241857503773872},{"seed":760146,"d":-0.7019113144980338},{"seed":760003,"d":-0.677751535306129}],"retail_edge_delta":{"mean":-0.4598502733509313,"se":0.01814228523274839},"arb_edge_delta":{"mean":0.4298171870949075,"se":0.007194466531044267},"gas":{"max_ok":199391,"init_max_ok":220990,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"afterSwap_calls":2570137,"afterInitialize_calls":256},"reconciliation_max_abs":1.0302869668521453e-13,"valid":true},{"name":"D","sha256":"d5c05d023b1785f1900fa24715df6e9ab9edfaea9ef9a32553ec070c67bc318d","n":256,"mean_diff":-0.056026151151740144,"se":0.012704422846003866,"worst":[{"seed":760246,"d":-0.7810746987112225},{"seed":760172,"d":-0.5888762000679435},{"seed":760127,"d":-0.565603118574245},{"seed":760122,"d":-0.5430244172647463},{"seed":760030,"d":-0.5278889269309275}],"retail_edge_delta":{"mean":0.11255815435784777,"se":0.012651061374922975},"arb_edge_delta":{"mean":-0.16858430550958703,"se":0.0055674821385334776},"gas":{"max_ok":199371,"init_max_ok":220990,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"afterSwap_calls":2599784,"afterInitialize_calls":256},"reconciliation_max_abs":1.0302869668521453e-13,"valid":true}],"recheck":[{"name":"B","sha256":"ff0575c4bfc0c15da14f44baf03e6b193aa1fb4fffd90687b05b1dd806d3d3d9","n":256,"mean_diff":-0.054658680202137155,"se":0.019148305983620613,"worst":[{"seed":764005,"d":-0.9437795198849699},{"seed":764031,"d":-0.891731986712216},{"seed":764155,"d":-0.8873639446123889},{"seed":764084,"d":-0.8858573941497525},{"seed":764248,"d":-0.783254280683991}],"retail_edge_delta":{"mean":-0.5149281448636662,"se":0.020292176036634618},"arb_edge_delta":{"mean":0.4602694646615283,"se":0.006703842905048703},"gas":{"max_ok":197349,"init_max_ok":220990,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"afterSwap_calls":2623629,"afterInitialize_calls":256},"reconciliation_max_abs":9.947598300641403e-14,"valid":true},{"name":"C0","sha256":"1bb4c3445f8b4f7a12ff0772b9e163aae4bb1c362d4c2b54fa0727d48933127c","n":256,"mean_diff":-0.05787586482593787,"se":0.0179752358444643,"worst":[{"seed":764084,"d":-0.9587376001194343},{"seed":764023,"d":-0.9203028668808884},{"seed":764033,"d":-0.8723968606597055},{"seed":764155,"d":-0.8483622937151267},{"seed":764005,"d":-0.6947464466170459}],"retail_edge_delta":{"mean":-0.5055948720667724,"se":0.018943534765210886},"arb_edge_delta":{"mean":0.4477190072408349,"se":0.006181476010211282},"gas":{"max_ok":197349,"init_max_ok":220990,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"afterSwap_calls":2624363,"afterInitialize_calls":256},"reconciliation_max_abs":1.1013412404281553e-13,"valid":true}],"held_out":{"seeds":[765000,765511],"frozen":{"name":"B","sha256":"ff0575c4bfc0c15da14f44baf03e6b193aa1fb4fffd90687b05b1dd806d3d3d9","n":512,"mean_diff":-0.04449439399748534,"se":0.012973072985185826,"worst":[{"seed":765190,"d":-1.2528658439185278},{"seed":765030,"d":-1.0834999601752315},{"seed":765206,"d":-1.0120015883217093},{"seed":765040,"d":-0.9794469813867863},{"seed":765326,"d":-0.920062016527595}],"retail_edge_delta":{"mean":-0.48914170915166333,"se":0.013476422924830544},"arb_edge_delta":{"mean":0.4446473151541761,"se":0.004960695602876861},"gas":{"max_ok":199536,"init_max_ok":220990,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"afterSwap_calls":5153074,"afterInitialize_calls":512},"reconciliation_max_abs":1.9895196601282805e-13},"ablation":{"name":"C0","sha256":"1bb4c3445f8b4f7a12ff0772b9e163aae4bb1c362d4c2b54fa0727d48933127c","n":512,"mean_diff":-0.046409840746823194,"se":0.012069378954380367,"worst":[{"seed":765206,"d":-1.0470446318543054},{"seed":765326,"d":-1.0063863183438002},{"seed":765030,"d":-0.9541522337511879},{"seed":765249,"d":-0.8524177635880505},{"seed":765009,"d":-0.8304911849832024}],"retail_edge_delta":{"mean":-0.4815798018846569,"se":0.012709790645812874},"arb_edge_delta":{"mean":0.4351699611378315,"se":0.004965086629815902},"gas":{"max_ok":199536,"init_max_ok":220990,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"afterSwap_calls":5154236,"afterInitialize_calls":512},"reconciliation_max_abs":1.1368683772161603e-13},"baseline":{"sha256":"cd9bdb45ab0537ad25c4fd90ca8618898cef6386de3df65f192eaef65fbca245","n":512,"gas":{"max_ok":194858,"init_max_ok":220981,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"afterSwap_calls":5200231,"afterInitialize_calls":512}},"valid":true},"gas":{"max_ok":199536,"init_max_ok":220990,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"scope":"Frozen source hash across screen, re-check and held-out: 1024 seeds; submission callback maxima, all-role halt counters.","n":1024},"falsifiers_run":{"cli_validation":{"B":{"passed":true,"sha256":"ff0575c4bfc0c15da14f44baf03e6b193aa1fb4fffd90687b05b1dd806d3d3d9"},"C0":{"passed":true,"sha256":"1bb4c3445f8b4f7a12ff0772b9e163aae4bb1c362d4c2b54fa0727d48933127c"},"D":{"passed":true,"sha256":"d5c05d023b1785f1900fa24715df6e9ab9edfaea9ef9a32553ec070c67bc318d"}},"reference_CH":{"n":1000,"seeds":[0,999],"expected":525.5258821780834,"observed":525.5258821780834,"sha256":"6dd68f77a70900319460215374143dbd5d924198450a46d9f5f91f6b1e3d35c3","gas":{"max_ok":151647,"init_max_ok":185532,"oog":0,"revert":0,"other_halt":0,"tx_error":0,"bad_return":0,"afterSwap_calls":10445223,"afterInitialize_calls":1000}},"math":{"router_half_split":true,"constant_product":true,"endpoint_sign":[-0.075263060014926,-0.07387827164211203,-0.07250630622189291],"no_retail_fixed_price_zero_target":true,"identity_tie":true,"fee_caps":true,"all_135_cells_reachable":true,"poisson_truncation_residual":0,"poisson_method":"direct untruncated NumPy Poisson sampling","caveat":"No-retail/fixed-price assertion is for the offline target, not a promise that an empirical policy can observe hidden absence of future retail."},"solidity":{"n":1000,"all_equal":true,"tests":"Own-observable table index, unsupported cells, signed deltas, underflow, upper bound, 30/36 bps caps; actual Solidity helper vs Python model"},"state_parity":{"callbacks":5121,"all_15_slots_equal":true,"returned_fees_equal":true,"steps":5000,"seed":766000,"scope":"Supplemental NumPy-generated callback sequence; official parity is the separate 32-seed Rust run."},"overlay_transition":{"callbacks_per_arm":2025,"arms":["B","C0","D"],"fee_model_equal":true,"non_fee_slots_equal":true,"nonidentity_callbacks":{"B":1965,"C0":1902,"D":1974},"seed":763900,"scope":"Synthetic screening-range callback sequence; candidate state reset to identical V10 pre-state on every callback to isolate the overlay transition."},"paired_mechanism_contrasts":{"B_minus_D":{"name":"B","sha256":"ff0575c4bfc0c15da14f44baf03e6b193aa1fb4fffd90687b05b1dd806d3d3d9","n":256,"mean_diff":0.03727363399077421,"se":0.019725940239420557,"worst":[{"seed":760146,"d":-1.084431110659466},{"seed":760003,"d":-0.8332767700773047},{"seed":760089,"d":-0.695738206866281},{"seed":760081,"d":-0.6846616439345325},{"seed":760251,"d":-0.6625995408957124}],"retail_edge_delta":{"mean":-0.5739869801040611,"se":0.020180354806022163},"arb_edge_delta":{"mean":0.6112606140948373,"se":0.007128933374266683},"reconciliation_max_abs":1.0658141036401503e-13},"B_minus_C0":{"name":"B","sha256":"ff0575c4bfc0c15da14f44baf03e6b193aa1fb4fffd90687b05b1dd806d3d3d9","n":256,"mean_diff":0.01128056909505748,"se":0.008424928469806994,"worst":[{"seed":760122,"d":-0.7672865928810779},{"seed":760063,"d":-0.37991880949562074},{"seed":760019,"d":-0.37337468777354843},{"seed":760005,"d":-0.27213765864451034},{"seed":760145,"d":-0.2542572979559736}],"retail_edge_delta":{"mean":-0.0015785523952820402,"se":0.008382661399699782},"arb_edge_delta":{"mean":0.012859121490342768,"se":0.0029904084683167118},"reconciliation_max_abs":1.0658141036401503e-13},"recheck_B_minus_C0":{"name":"B","sha256":"ff0575c4bfc0c15da14f44baf03e6b193aa1fb4fffd90687b05b1dd806d3d3d9","n":256,"mean_diff":0.0032171846238007173,"se":0.00988592653650191,"worst":[{"seed":764014,"d":-0.5041480501073465},{"seed":764061,"d":-0.49335239291065136},{"seed":764105,"d":-0.4898015657660153},{"seed":764028,"d":-0.40951627568813365},{"seed":764001,"d":-0.4045270545054791}],"retail_edge_delta":{"mean":-0.009333272796893777,"se":0.010506897754112853},"arb_edge_delta":{"mean":0.012550457420693412,"se":0.003690586281376138},"reconciliation_max_abs":9.947598300641403e-14},"heldout_B_minus_C0":{"name":"B","sha256":"ff0575c4bfc0c15da14f44baf03e6b193aa1fb4fffd90687b05b1dd806d3d3d9","n":512,"mean_diff":0.0019154467493378569,"se":0.005859231140295059,"worst":[{"seed":765040,"d":-0.9838064804633859},{"seed":765190,"d":-0.5578946490099383},{"seed":765447,"d":-0.5355069741079888},{"seed":765323,"d":-0.4601444492917608},{"seed":765275,"d":-0.3867697725247581}],"retail_edge_delta":{"mean":-0.007561907267006451,"se":0.006162979242593917},"arb_edge_delta":{"mean":0.009477354016344593,"se":0.0022863321365103662},"reconciliation_max_abs":1.4210854715202004e-13}},"endpoint_permutation":{"seeds":[760768,760831],"policy":"B","n":7527,"endpoint_permuted_rows_with_changed_C":4223,"original_C":{"n":7527,"mean":9.049002283034011e-05,"se":2.4538375085797367e-06},"permuted_C":{"n":7527,"mean":0.00022666523265202205,"se":1.0551784789764746e-05},"paired_C_change":{"n":7527,"mean":0.00013617520982168196,"se":1.0620974518206664e-05},"retail_unchanged":{"n":7527,"mean":4.433322559079081e-05,"se":3.875103566409841e-06},"scope":"Offline counterfactual target, not a market benchmark; no tables changed from this test.","interpretation":"A small or unresolved paired change weakens evidence that endpoint state dependence explains the result; C0 and D market comparisons are the main causal contrasts."}},"offline_source":{"encoding":"base85(zlib(JSON object mapping relative paths to UTF-8 source strings))","sha256_uncompressed":"6150a8822eed7d7d767aec191f30883879c61e5f440aa97bc68f0710bd7b6976","data":"c-rlK4R_l%vglvowx=smhGbFxh;5n9a~!wL*)++<Zqr^_Plu9do3%tLBqdA9=D)xB06_3VvXi!Z-`<<_R3-^vFc<)XnZaQ2@tb56d+F$QJG#D}1fk!Wt-d+>=8FEi7{$IHHWS|;`(w+W&Vo1?c@rzWkD5v9&#crNPJHV+NYfy^X<2XQp%sMIEC@r$Kf3itchNj;U4^HkbPnZyaoW~!mHMM->|4ovHk$-~VtJE^bv;k#v2V?yNibSjY3zkbkOonhw5(V2>6?}H=In?4U2Ep0x5-tQc+(lwo8J1Wt|W~{w_cJ4BWvQ_CtXZiSss9V_4*R<N>c0Xs~?)d*bh@~LhSwSkJ2ax3;@9&gE1rl7%xSP!m$<m-X!<{pe1TiJoe*+K+Y5R{QA|)->mB>wnkAnCR_okxA0@{25E5>G6}E3U^<K9)cQS%LNNvWMH)<f0m$A?f}!x@o0%6U{#AG#M^kDbe70nvH}I+<g!AbP+LTz~Oyyq1{$i>!pa1fc{C?}jp`Row;R2`%D6Y;T=)s8}Uxn{nr`>2c2VLvuS1&HzciY>$ZTJTrb$0pU^{WfFS8t29E$R;aHu+CmIP}}ZKOIi#$dnGJbf^qvfI^PlzY1TSxz5fW&?6lC*Vf3NOzMePij}wy;v^Nr`AT>z`{*jP;2(6r#CPjSZ?E5Yvc2uJx00T-+i&dPv%USUYbCQNbywR<&L3P`VU%()=puS)9qu>i!?BB*k6owL-sLYxu@9XYT1|(G&)qhHplp<((K<XlwERipTOE~h!YKfy?QoJTy>J1!o&NSaew`rRPx_6dchKM7eh1iE-&zTbp&z}}3KDA!{SL!A3MbGvf>8Ype`)CG<}6MezqyNTnVhuRog&7IfKgr?cUpUX^NE4$;-u5+z_<Mzk`q~Aat!#lJ9|a}tf1}e<+A$=m?5sS)oBD_T8GZDxA4JRZLcu*j*SJW=eSs#i%Bf&^?74wYZ2J+JAvQ5ErO>ye*sf!T!%p~#zQgocm$}f9}eB&)_B;!5!v-T*V`I<^rA^K4Z`{mN_+Nk8woV^mh%1N9gYu0tM9!DPAFMwI6Uz@n$n(kva{cytnjZoH{=-(DL0gRFgFtdbJy$nl5JhmMpWy0ER0mU0<!#a8P9zr-Du*$WPU@uQ4$NOIT!?CkPZg*#GhOX<f)33G?U<C%Xfh()a@?40NaDf@7CJOPWw^+I<*2gZ#<4&2HYC^vq`k7^B-S+<|+sm7k>ow_}q8f;>Jr{M}oBrP_a<GcChor^RIWG)I<+5Hr@%!-gwuyvldfMYAyUA>rBiR4;5-tm|xzFKcMWg)h2pr<m%=K{5JMd&&7o)X(9i-^_N(Sy)~@WTE9my>Szkstuz`?uKG?#)P})L&88K=!$ps<$+fq$S7<Htq7UqN;=?euU3Y&sOOibf^$-TKnqlu~r_+~JZNC$x<ekn@mYmUvmN6of9$h_28(1h|h2lgeK){U%uo1BCLYlLOd|Ls#_Ms{wI!v|l2x|o)wrb#wM$tS>2jvRdVkk%8BQiTshtZIGZzk);Wnu{{g-CJnF!7KrG{(}XGxUbTJseAliwWw&W#gTETH#Yl&-x>N!{K%nehafL0wG}zV#bk$i`6g~3op5A(HI<hqdN=u_zHfk=pG~<$lYQd2bI<FReS*OAkQdF35f7qOzYmc%f_l}tyb=8tL`*CyYZpBT)KDLt5w%qy36J=Ti*c25f_}ah#tf!kQi9Q65y`vJQJpG)LW3nTPp6G;L=N|y?+ojKxT=U4eiEz!t-u>x$Js?Z*#R;j~a3;fX=<N88gW9USa0NLq=>SQkXmd&V3byzVMg+XrB5mwRk<Y8Xph~j%UWmc<<tpfy>0QiK164c^{|syX`vDd}iAyy}**+SQ^uG<^^LHb1j?i?dHnfrrZeseQwR8<#K%EyI7z(YrM}sLtacdacP};f9&e@gWK6|32Yz%m5r33TX`UyW;BT?fFtC6SN2LiZT*0GFA&c{#}wv}*+JL<A<JS(Spw0_lNiWbH>lg7VY5B6n@b|y5Q&@>0EGYs5mHx;uZ^T_yl+B@e-~v5gom8QEzg!pict<G6%Br`Fyt{w4f7aU;xo)Jil>593LNw1WK2Lu5hyjfl-$h?ckZ5n7`O<43*5L)v+j|w3PriGz;JImE)47^-Pq0gX4$xDz<4%3z?V)#kA_PZE6#($FWWOt2UbVj4MfI?bt&p`qh4RF@+Fo_dkdgm+Rb_~#fA}avlT<7wk_+7KvRp|%O=3?`U{%(UFv$(VE_TrQ21;+N4Y*k!0S6uGh!$$Nz8z~6--vom^XzXy>=iJ0U?y8w=w`N+&ZZv*oS%~U<0s`r6$lIz|O=Ksz7z9)UNX=!Lm><4eQ+4%0?0mK!2f?tO&H+aPFaM0jL9C&5yYR2Hh<5mnnetMwlxviYIMm9wbKCT^xQ%yLZ&-cS&w{xlB$2TO-;_Oc8g^KAI6|5JW<6mfS{ZUA8HWSEekt<!V&`9$69SVo4H5hFVHco#j#&_1b-EYtQM6AqY$!sA1h7TyyTDtV2XVd55V{)%Q$R=$p-xw)?}D>z724A4ImIA(?GLinCn@pzTdoM@$9K-$5R#k7l;&yXzpW1L5OTgaU0W3H-)5o&XOJR%d98$S;UVJaW-cP_HRd&M!{8l|+-84e-73AO#el8%Lo2yG2_--ENKeu?}$Tu9Q*nTPvB5MyRUNiyy~PoX8sI)5HyDtq*=2CH4BNGl4R#v>n)D*9Lj-{oITF#Ko*o!)!$efXug{pe@GfYUaBji^<+id_T<cL-s5~H;q6ociY{ef8(M_rG-CGOYD!Jj}o^hWmxQRv|wfOEt8jiw?b2r99`dFZIEjmO+mxC_U4mx5QjH)1OSafwhWnC^DqFg)4FpgIu29`^Cb7ZwJ#jZelzv*-+==h9CQTg-SA|N;do=s@uuW0CkH5iPD5p@0VVw9tPX!h&<pcveHOQH411G$v$fYC^!QiEUmR}$&CX4(iOZ^IoyLK(-`QQBc2H4^b+r~YtG&y=b{A_ZCGXIWou7`W*)@QHU7V0EH>#KRyR%TgY&rcdPhhuK9|AJ<IF=-;+sCavTU<{fFRg#DS;P52)x@nybR(%i3n9GLv19FK>q$pAt&V^^vnWUsV4m2sw$g?&68ky+NE3Yk{MR)FS>z7_WrBj>pt(L~rk9!I?p3+Tev%DlQ-WC>abnAx&HQj&ulozl-ecb`0Q%OtV5_NjodWYizO%BJwKUUPt=4ow?}Bt#-UG6xrnf;D2H_3R4pe=phRiv6z|ple@rJN&31uuLHJI(F|7=<R@co%JgmnzErBEK_{cT{CUNC`r=LuP0O_11Izh{G@=@6UXw%NteA<6MOh=dg>Yx_%f19Vy?hfjLH_cfQV1`F&hbyemq=cr%KMv{e*uM%^Af!0AB07r7+_RIN*+ikf{C4}^NkHlfh^c{EV23WK<yXgt=1Hael{~gq!<Kz8Zy9qNN!Qf}7-FMw~xonc7<j9rw+~VTPw%vxmuqzQB9k(~&hg`om>Q}ZFMi$J54FV2Qo5UNGZKN2IS!v`_Q_)qlHQ*w6Xop$`=_B?Iia41NWB$8oi&0y^#Av%gd2;XsIS<FcP{OoHHUn69Zv51`gISSSLk~o~AoMMsbl!yQEnO=}K}8u&=3_spf{0rm;{cYrlo@_=h;z-qzQ!*wA4j(^b8y<C_|c4D;^GT}Zk53y4g+7}NNfq410-D2c`Sq+t(z6J{3@o@8*yj!dd!R$KwZU{7cf$6(OAG3?2`f8q%_OHvQ#bf!kXQ0>{CxJuqUyn`uz$FsjmaH#9=l+oKJn^;&m)wuR%H>+w>!*A@#Tzjj+RUuvF(5`9wt|BTfqZ<ItZrG?oAEK+A!^%^dBkp^g1X>f!S5#j&@l_imav=0;5zb|X+b@zvg{(+9f`QU|Q{Ky@#G2}DJeESCG&;3O8wR7%BslM}(1^sbwT+7LMN=+<KK)$%4VdO^a%{XNQ6%jsz(q%>LHa_sL8+!CjTF&siKgX~)qW@b@S>rzq^#N9-VH~-)riy*6Lp=blbV=eJ<FAh?Gqr=cMgu*5WiMV-nJ((xBZq=d;(yq7gKh#mmCh-=3gqC9YuaFWf{}Cje;*SLOrvNb~7zy>j%@LlxRcooKg<FXr+uz4Q>a%c<Us~h&be7a*Cbj$*VQefr4n|V>aHR_3N+rZKRS{QeB)V^0?i$%MZn0w)PJ58tdY!#}S8jW@_!U)-mLH-x3He&L{&F1L0ROJrLiVLw=tL4tuRxl%27}O>`h$V%)&_&A7leaBO^zyW=BjPg)@ghL3?NM3;2UT=U2lel=7A@_*K184Y%sp0Y9XY2?LOIW1Co_R!iwxp=U@$ZAYDa%+=W?F0LfcXq8dK*Y)xm;Iv~uYRyg}mt1Kc%SWRmGP%4dL7!NQpuz(9ih<sQm0ivN&>a}=Gc&$+2GmZ!ROGCkH;h6VY5-@bqH$r<BOuf6DTfzAhR<|L}QPj$&(>b{jG})OT0**5ARtcKcfuD3Osh(Q*0SJ(CyI*c_x2pEo<q-R#4Rz@Qp>j)ULA*M<3ZI=`oIgg*z6yUlfBEM8ty`-}F1WpIy}l2d(GUjUg4!rs3c^6w>O5hVNju|-wY2IeB*)g4wabE9lcaoWI3L~lX=2Oun|6TE&;x}b_3ZVlOUt!j23>t~dHU?-`PDaFss7GG>SJqwt6F^y;|T_}h5H$ndhwDwVO_@F*nbgTN0!<Wvr=K9Ud4DA921K9G0G~7z`vJ9kHk{2HC)^Jn3Yj=@m9TS-B0HrI8LGz_xgqP#CM+9&}iecvkTvM@OwAEoTNZ+q^19><+@he`q#fK{pmOTNmc}Jwl;6eT^tjj#%l(G2cR_$7Fh+qiL9<77F6I^B8+v3!+qa@Mq}NWc4DSE?OjZK6e<hALy};pUy%+n(S4qRPx^u%4*Eqj7l4Q3JG+P$6+E#zgytg<nIj_QW*#2;&Yo>O1v(!|IuzR4c4UqY<Zvq67y#@A0PgJhAT>x>h-^oFSzC63WvMM(d`A_R?Q{09y&C|~jCw{B3L()Z{!`0=;RjtGB+uq6S-OowvM$GjH^mj(7!tqPConwss3_%ypNiTL+xi;M2u8wgbh^3Og~i50D96ugX3^h+I!^Xp(1*3qYFbq#z0D=JoT{=gR<KH(J%9f@!FXuuC{|)13b~ME0H~opJ$rMpy<1VtGq6O!Sj^i{4A|&fAAPn+`9VLf*tdB7LgZmdxsT?Pu{D|mGt^=iL4=&t@&h!WlWYpBQ+^ky4!9pPy8v|L6MQ>SSiC!Zj*dq%L-F&YCehGUeJ~u_-Hhkz&z@JDv-RPLhn+zFDnJOTzwVt3@#9c^+}t++h6gqjF#)!#0P@Gp5OtE!_<p(yX_aHkwGYdBot8F%qM6dQ46g@D1O)=uQ(D9((UAQv>L0c`nHz$1D^xZ+xeViwM;TG=7~J}knIF5n+`^okO}vp`uhH^X69`*o{FXaELf5^JG-H3<CAY&U4sJ;4ChkejeIRZ?J5mrbhW<4cnMBduT#Xy{U%<6pkp)Thz3&TLMB%RugPK>`{C9yKhaf01w|Nm>fc#`qm)Uo_55>7)S1kefiD7glx!Deb0!h~DQZMDP>Y}=YsBb--Q`z3#Bo7`$y*bRjHxbBwaS+8X!r45vKGp<x#8&M}`S4Ze)4lNuMh7m>AmovRH$`a*?Gwsx5lw=iawf{H5+K4%zFAo~u9O8MFN@W-FbxzO7RU_!CdqG_6*Z7*{loB?0FF~fDN>E+F{<K|$Q$$5Zs?ACHB@(M{oWDTar>-R<9Al_YW?n*H!`N)GMIu^6bfatpZZ>y5D3r}YyEA=2w)^2>GS8sX4$sD+^kF%3p5E_qtVeDC|HvAdI8F|0VQ7yeKpla98SK({rIUn4!oN%LNhSFX1gg!Y1$NmqM)7JAeV({+N;-|)x?f)(DYufowaMCtzMqjM2DXHhUQN-xxIdusqBw)W^VGW&5XdW&Wgqxe*%-2Ahi2s`>_{@I&DSTc{7k=CeBeG+FWf*re0&C$T4Vj<X8%??fx+gnGMz<+zSQTfJ*wjM#gX4Ecb?>SPyMMe?8kiaW+Gs9;C`M8uyP~q;eziiwRqf-#pj=@LTJYv;<T=(qMsBLzpr?>Kk+Xgw}d;)JA;^KE<eONZWku-+S@6RS9&0qSicwAs9^-{&+j|Zy3G?E1*0r*PfLGH=wcyBh*xQS}#!j@mp(2_%|fs8e`o!nBtC)Lq5klV%P4kvBE{+!e6?EUuBi4a5kAI=*=)saGW6QHPxzB6$`koL;X7*x~_Ea<j*_&*~8Bdm=Os@MJ!kKI-%3<Z>e{}Otky!VT4ftvz$hTDoigAm&B2-5IE^H2#_96NIG^vU00OyY-psKpUM>M1qGwq=r&4x_9#(##ht%$C*E`jqM#QXRn7&wON>K-Whi!Oe~iB$Dc+*8lZ^{?ZFi)sABrV#iM|NQg2gkQTsnjCfWIlmAamLR5!8JrzqZn75=bK!_e(Ls+?!)|+rvTMcj?9CyYjngL~ffGaYRmB!)7e}8f}uPoM;Zc^=hIhlqoMR{0w}v@#;*}fF)ptam}t;SsB4c7!Kva!GDCgco@%;=83B}{U2e_ljfLYm1r9&wRM%Wy!d8;ELASl>J#oP82)O~zN{N6*0euww^CLn!*qowT*y*noIUZT(<Vrj6F}+4*QZ_t8>}$jFb@3dS^|sEB8a1KN?V}RXTShwtMoPst*kCf8YHbfc9(|t(CY95z{T|;feAaN9s!jm90y}q8&L4EE-p{c{((<d;q!>LQb3f#nF><ply=L=6(X_H2<HckO5|NE5+k3Ma#s2Din6Ebb1V8d%jeqJ6u{|pkOb2K9;r!SftX4-_#LOZpOWy`@)uL(pc1b?&tf<}T?aRba-dPmyZrnmE+KKa(IvzX;L$e(z8k(FEzxmWMiz1tF|(kXNGk^e9Y%6F);f&HHYv6S6l`69U^k&&KBL5XIAG&F`CkY;Ef9E<0c{w%<d{)lnli(Z6V>a=mHrzy!|7l;cjXf!%Z?-XK2BYy2$2PeffvUCu+ae%0Dgo_K+ZWJ%Hfatiq8@}x?@y=9L`tJ5Ktdmd$eQZQg`G<eMzEhc#M5oMOd$>$GU~rzVEWv%8}AhKow$r5T+ct<w=`QBCI5`?xgy19V}rK&1X2DXr~gim?mxIS+oZgU0=5p#7p1=UOdE^pD5ju8zW$rqWVKTCH6=D7~in#Y6<&`u@w$Q3u6nH`!;4%yd2nG5F0y%Nee%4hx4Gv5l{IQdqlvAQ6z3@qUfUiEr5g>2h#Nhbd}*WNboFEtzQ7#J8C+5Ulw#r6SzTdf{BgE149jX13b`CKNFs_5#F*bR&6(Hv+CqL5cD!{H&)UcVyQK%yKSPL-Cbp$8vIGR=E4AOBF^2LAv_^9q|@s>C5;a1C2cTM%a+Xydi}<0U@w&2)D0JP+}A@V^&3x;e7=HtaUD<v_qTrR<JR9vTNstV2LjwAkMMTppnVfZNn+}n^{inx!)-za-MVjvx(JR}Sjoo9srzQwAShY^olJ`OP<kFC1*J)8gq(>N%p14Kt^kM-lZ=58y^pDYZo0^7wF^7}Ac?qz{<4KmZbC}NDZHDT7&RIn#LIbjryU2d<4jeUQgLi?wxhiI8iS6c(t5SnyRY>N$_0wMb;t&((ZsLy1wE^c)mqWNVN9+>^R$)tsa%Wd0787^;zuT=49Zaf=qJ0ZF5e0As(_p=5b&l+eT`~Njg@s6RrELL0f=<(u1|74KDTasz#6-EL2mkYAn`%kAi5jecu9>NKXMtj7P&qoAsVT`Zf12BA*GM~9OS}i9*=yXyl59*7)&OfP+~+T70~<GRSB6VECH}{_DhvJ=M_sIOwU-LABq`W9u7HygRQaE5{KxtbAG5~K0+7!PFrPZ7B}H=#Rqx~aQ84F&ZT{+*{KIaSQj$^Ne1**C&FpGwI`>b?~+WmP(l>@a1k!HFhvij3kF`|63~`>D;;x7KveU`by%NJ(xT}=t>^5v>r$;u46cfPx46QBi>O(&FfeIG(>m%F*7xFx4d@#sE`3Cc-56#DVJB+H5b&*nF@Sy*4{JwQO^xfR9r0gt9&v{o;K`@ph#N*z|0vgCb=xdG_9v=!f~cAs?;mSytgIasjh8e|*LYCWu)Q?*lY$6^=nRO=ehfKEybk6yJ=Bi)@26~fG4A7>E!0bRIUY;zY~s^)p#>=E0Xc|;k6ZXAU3RjMNebFIh)k|yZ>wbo)jSaE>`$hQKLu3;kX4!w&XCca-fnO|#y#%c{!yF_9-Y0%gz10k4%cKQcsg5-3wSMHw+T8y4ds(|R0l~%4tafo(GXR<UefRJFzYvm#)~1IAdJ4T;uTBdI8=q{c}-b48;Zr{;8hUR>pBFu!MsM}a!dA0TqT=a(zcJ$R-{h^OucyJs_{|ieULL^oNga$FbKF$1r3S8IJmxsslmm2JWTpLF7(F)m$UM^Qo9GX3v;ZeCNtsR3!wN|k1E_W`jqV~5lwEep8$p4(O$p*sWdrQ!NA@bkdqt$rdG*j6F;a(hOc%R7BJIMFbPO28{jGjWK_s)qOBV7n++oy9Gzr_2c4Z_|NR_0hrQyun_Zpqnb%c84oMHd)zh(7PNVr((-Q#{_q;n&ZuyQYj<l$46I#&9%RAe*P+*Bs8QV_c(e^K#`9fJhN`5_}R>)GzPZU|377x_BDIMrWyC|j*8rY(i{+_Rq(xlTBK59`$FWs3;qr+#6?h3$}JN`kyDEF>oyj>K<=Cd)aAi9NxTrTI8HaVh++p9&<O$}F7^df}^I_fsK^(Od|E(eqk9*2NB^O9O$<I}5=WwzFL@yvHf`tb^7X%ZWK5F2UQ)7BJMSdb~acuK--0n@%Ix<j5`e!1+MMpB|4YG7;ZqU02ZTO}}sLwRaTO&c;v8hJn79W6{z9H}ZraTdI>i6neyb4SRz0wR6hbm^mLj8;LiU7GH36n!RHC7<CZCvB5oWV@q2^3teey!%BZsC6AgBajB~)jA%#y(N)j$ujdj5@D&dn-<U%XFBjiQ&!6@J7kn*#e#H?-jYU!scWb~!ga_RGNlHf(`lKDdv68{C1fP;bqc%jrvQGzc8B1DZ-9qMfsVs<36<tZ4xBB39ByozIuGpx6wIF3r|hzLt*!YVG2^GfN6HF+!%xz(pB?JQLs9+`g!8--IPylfz|LvJ;`Vn!``;#CvAdk7S3?r?UF=cyr7(xORJMB3a1k3%^066@-X()0iPzn@_g_5oNQ;EBudiP$CT?kH)@?O@wNBX8?0&*&xIdI<@_5X0ol5z*^Ob-3%GIr2wASdb-8AQi{YaJ8*{@b<o&ADJ+x;V&>>4fB_^f*V%hcNLf1ft15P!T@%l`Xl4VQW?9aFE?YEi*3DpPW&xm$7X7F5=5UduI(3viQ(EddL+EB7f4g0K`SYTGptZalXE`tZ7A8>ll=SBabjLNOUlzLI*|y<yHIGa3>OHHbVon4MOiS=gj>)7&AI+hlmIdZ4&KH$pNM+<T^=5mkpBv=Mm&r$osESSfFA{&0Fxqdi`6Qzn>Xr4&jduSR=fs10InHdnI5@|sE%@_IG=3nNLA2|h?OMPD=;qn=Xw`l6&!xuaf%nnh!>kgK3-^@)I<Twp}Cdd1Ky6|epyHk--E%r!QWTghw^0D%SYO&;xZz(r-~^w9?__i3k(ix;rY(#ov;r$`yanhXn}VhiY-bX1ZLRiDH--ce8}%nL*Mn*}q!7|Zc_?pSX^ksY^zOt@XWeGP9P{O#LlGR7_DSsbO&D4MjaR}pWNj^haC{P+<EE^x8LA*|#*^-hB42RcHzUf`q@CA+F5Afk|s*Jdd18VI4r?Ts7D5z&QJ^bhG3a+u%rq%c?OpR{S;&G>TM*}<)O`rJN-1VbLg)LorwDkjTnwIneGy9!m~q0y?&kCM_?`^9P3#FKs6?!^NbQfQ*i&KaZC5bUAL9=Yn(p650vK=E<)=rtgAm8D0sh<GX#5;`^0&8Vj!k7>9jbo9nGm$18enNDWf=yk$*G7flg_V)bzRZW;#B=ic7=!JK<ZOrR>-Ox1{td!YhJ8aW2X?e8l8P+T0Lom=1-vn=XJ#$U=iQ5siYai4WE4}qX45EruPGBY^32HwyWN?tO4@pwXdN|j+ySgvr^v&-x#8M!GIx%F6*{1|1){NT(mAD4ahZ^Bau@kfUbl(}hn(scD^TDHv1TO2rx94X+o}c|A--Q*OH^hA~3Op5?oRh&}&&7}HIqi~s*2crXxB)-)(H(}lq&H-D3OrH$tc!4;TlYao4$4>r`iz$`KG@B2d6Mca{}<Po3rh$p@(le1Qox;J2Sl+3Zk}gvS#N!In~5kof;X{76AuJ2Ij|&7F3emCZ;88WvPXeGz*Oc9G<=eSf|xrCH^5*&_~F1y2lI5~D&E`*qx-tz&n-x?TR{?`1B!=24XyWPJwhX)9+VKkxwIS*&nLcHo8W<WXfz81s-MWw)$*nhdOk!mnh!7wn$&M<65<4@34R%{k-aCm5uMK5BOw66WvRQIx=X3IJ}qfk>K>==?Kw`r(%+5AwRz-no^0HH4~*x(&TE3dSB%%<940LGoDLqg#P2!kn#n^-)?_x4^dX3`tL6Su3k7$0adKxJs1k-UL9ZtaQ}!x+G<r33p?;FYIDwX4=_sjq1u-*v9-7ZyW&q1mUG~#vvSX%<=s%vneE$09%N(<y9Bbtw$-PXQ7)4}80FOTv+R!32g3~sV%5XTjcsDapcKkxb5&GfKah-O{7F51%2K!PwPs60{qd3}h+O+d>X!x?BgA%Uh1c%IwCf{FQF9j-FQ*WW}8G1|3sD6K+5nvey(n3rNb7^_pRahLT#nxd(l)jzYB&TK|%?^=r6ijH>+0d9G!FR<qhM=zO1xaU2T-RWUlXh9gC=N3UY=RLSG)7$9&i9Zk3kt!BdQ{%m-&)_}VJ1J0AQuX76paI2=*g#xyvWdn#q!@{oOD<v(5*$#871j33!;R#@U4I9U}i`zI^bX&kvb}O9k!rIqpk6f1AfalkKbggbO)&|Kpoz#Eim{u{IDf^O)d&;Eco}q%tk0=v1>eI!Lm4Il-plluA;)tm0>ZXGFZ4NPJFsTp}?EmqpM#UNV|`8S;DpV2lvcnNgq;WR5^C51tCO<0TKh0R@gk04|!%tCxatnb^sE<WR{45JSyL{l2r&I3Q8szbe4~eqvX-DE^lGTq576ER{~r?vY?ntIL8xxd<{UNcAHt)h=0uF*23Xo>p-Z{(lUfc9d@M$llzH)pMCt<GiD}cnW*X8cF1KFe{v#d&T81>;G#(RoL^LqrLD=sVjr$ys!FPCui#*n;NhT#v)9E_<}RHnr_gBcx^%dj)b>T=9ZI`T`YwJw;Exmdn1iH49XUA400hlYwtEp9Ro@zfRlcws1MOpXbnNWxb!9)`zGr<@))-_m3<ipv&%@!Lb8j5;ft>*5PCA)4wuUR?Vg|Y&fwcBF9Kg&<L3|jooXIx*R@t6IoRswA>jBw1*ea!h3!tCvcs`O}Rje9x&<$PXw4z!YMgwWsA*RL-qXT4o0}gw{Kms|x1~6~<%e9a3x@QT$0pA-y(+3n20U&xHljBJ*N>p{p7;S^BiD)|x#&Zk{C{*gyPj92KTa(d}K(*%VKstG|grpQjF9E(>(-n+>;d-fCdlkuT`E6=cll^JAzv%RF!eQ({dr+bRH<p9^duUIY1_@qR;h{0W>@dFYVgw&KK7?=G@>LYDuKM8!A*!Hij6<vT2&+KsO4+2KRZ9VAvsR`htT-<{C31UYV2V-FxCGjik4MJ>T)j}%2ehLQk42#C4fLWsMoY}{9vGG1lt;Ir)8#=i)P1V#OYD39h<!>xaJ2lRS7TI3eAoaMZ$%aoM7$GxI{}rz7$+(_9xkbt5#@=;;5%~-D288ub!PXw#<`su5_CY%`fP61HdvOeDk=#UyN^+>iShWd4hw=#^u7uc&~x_sS@;j&Y-^%|=(Fuc43S){5MVYkM2L(IqJx8!V}n5Rby$+XZFhrX;Mc*{mMu>}2f(;f_|>PSCGV2Qtc52eAJ)gxvs2PcCuy>O+-YV>q{kj--r$DP{S&qVIdkHEtmQWNjy}>ZAk4Vh5oh@%8jX)(?mPQEfo@LzZwie8Zr%<k?wH<4tlP@f;FI)s3&@=f=95Aj_khB&7o&6I1jgyyLyyUtYBjndFscfn1UGi*VxR=kg*67~c0tFqa0d!LHRMmPhMoe<s9Ey54#@ub3H}MhVu1EFGJ3RI2d&O-&F*EpptXK4PaNYNp8+`jserFt)afQ57h~nsb3PbAg`5utJIy3`va4R>nN!n8>f~J;UvSMvmoC;Q->H$mPQ%#jth!G_ZQJ6BC3#%wEeAtogNY&UnRh*4ig~HSI)TZ^LXs1nQUX~QR>FFZE)#MD{ps+Z9saY|&x=;2QoAyr=rrWR4nORhzVAyZw5@Ug4);J5J3KsS3n}{pE%6sV_iYp7;e6$CfLJJvwBfdQY>aG$u`t&pdinYsu~!6~OK%HP!C0rE&_kaLKVMqb*j86k>2mv>Si%41rAiq5nge#L6Rxy6^hO+RafCti$yP|0JsDxlmoq+&U)LA%2z?umErTUiMEjP&^1->ue=pg}F5-BHan&6m<JwacKQ7+S#Ts#|?{UelaCzYN7Mjw9D_lOTy~5=~c7@BDt7<&D!pyA~?qC5-%}ZKDMe<JPXn$8_s4%WDU{_IH)B{0Bli{mSAJrU}ThxRgNy%g|V7VCA|HQ3T#u_7y0v78KZ(XA;4~{n`=xjc2@ZtU{nyDdUjFt&_#AT3`Phst}w|8K@pCu@;C0&WNmY-xW7Hg4MZ}>p#6xh_H`b2S2ko*jBbe-5M#jL!%iu&<j<^kAM*$?hZ&aPI;h8!DPkShi1QIC}~M^ysD&>a<geKy9LgXz7tfI8G%RZ5P$p%ObdXhG%$#1~FIhYrS-p>)?2uNQRR&QQe$9~yzdDP^ou#>JEnWIW|nLokfUqEu47%eu2mfEwAAPfJ&o#Z*p!<v{^3KFX?=uDfDG^u{_Rid(Lu+|NLxz!>OAjrt!7dfr`smiWp3J_UoE(aBpFLiwoZduoxMHTX6U4C{`ohY`&k5jfmyH0Z1_JlQ%f`Cv_0^6n!dk!Nw!p|*;^>7BL_HXX94xaq9}8K>KfwOzhUp`KfK%W>O{2;7qOWidxFByGr+g1rH03MMn;&hy83HZ+&Or)Fu7ggm8~^dcEWGvBRU;H8v4x}gJeBl|$}#t$iS%s9LHDFJw>oOh8K1fzf~FR`>2q8T9Z;T^4WI~}?`lW(Am=OJnD1#W1vsV~#af%9SzP12yvIGZZ$H124IKImrNBq7;XSXoF0wbdr0x5}`TA#Q0)(KwMoDq8EVwEQ#pC^Aqp-e%_7sy%|`#SVrCYLVrsHeuw`Vz^wB1De|ST5$Qm7iRHZjnh!Ac&1%PHq7q!ll=qW?sVuIWpr}>C1IVt@8Ah96$Qp9!;>j1Fr6_)^U0bxNG$Z{H^H&dya$dk+_7{&7Z;9v5}=%Y+^IOV=>@Ko5=#Xk$*qdp{;l<f2B4osGgnqZHZ8~ggo6X&_V=x?;|$5`0LY#uOnCRV81a>eLt7<i0K~S|61g4H1c7Fb=1*M_taqf{<J`@`stjr*a`D!2>t=>Ql4yaTkm+pWOKzjloe`x7CmM<E#*C|LdKSDq10fF)WWlE>TfyUV904mNpFxt55i%ZH>URemIh`WjLvnY~*5T<F9zS|P`CbSzIZh;x4w7qJxc&Ol@H1L?>tYj)+b*Hg+rg9gU9x1mbqZI$O~K3UZBBOz^(KHD<yv5_Zi4vHtB0?le?LfEg4UQ7Pc+M5^}wpp(XYM`l~LO7T=cYSpl=;sPG{ccmS|6L+U!~`1zw9L7CjKU7of%3<w*9UA>!xsn}Dv<?~Z0}9tTel%8kU^PGE)0C$>4U0Fo!S4oWn%d6Mf7Gh0q}^#u@U69T9V;_NTQUzgQx(S`)>vyNs>0E`#JI&C|D-D3hhd}J!j#=*>`U5er;)d(EAOBuz87u}^go2fX(QmS<%79_sTW}eo}dV@=trB9r!e9_f5bLas6hz=bGI}Y9<fpR1Iw}{Y1!eo06Jnf(-aJmf83^P!DbEdjbsGyGUi7CTf1H(X-RteNYwqU=M!I^|56Ac1#zNYa-g0z)ytBxz_=FbXBvEsE{>!fSnwbY*Sy984&#(=a#kSuQTxr-h^ywIqjpkfc9n1Ki6DG0tF&#*dn3OcotDMz+6qO&Q_8yV>5-uLeOFtPjv?!%1azC^~dX<t#@_5#TuZB9INdqUpLJ3d`<e*$LtT%pa5Bte2()fhL0e5uI#FMXJ#b5zo*RtilSW}_5jIz8j_dZmzrhn%1!gNqNc3&u@(>5SZxWZ%fFTIhpT-5?QC3|z;zpJP<fEn~|E6>aDW9NKhs`Cln671d5ru}49Mn|FUmA(b(`{*a6WpjD)WkKxfeeYLg~R-NFH9@FfrO3qU`kJV3Cp)#YulDE(bt=_NJ(GHAQ5v<;x@jm&38ZNqS85dw7Fvg@`RBX{%4VzfZ9U3{a<}i6aWp^_tApY@-WF-KqUCLiliYsr%#Ve0A`dYXByo-N$rkh}}&SG_-WhQAwU88_albBq-?j7OlP@?i6rlw&&0tt&!i@YF(7hD}d-t|`sV<O*gEaW9b_@%lD(ga5twCN!eg=G}J-Y8(ZX`l_K?Sg$3<gqSa)|sT}d`n=oIki_|PVGNrPVK>GhLf`wBJ|8=$evi7&^dwxLI5v^md6kD7!xBIh0z>o+&(F1Xz+j2&9L=sAQ*;mgvSV5NaTe23ymZ@hZ~F}ov%icl92=jrUAP0qp^hhpO_RKR^zd4lj{XpYfUpr7=>s$DH~QGL3?lHjWJ68l4cd`ENxcNj!SH8z%XglYgINCeY{ypB6J`SRY$HD-6nA51s2d$E>QA1I}HpoCmjBryfWlkZY=v{J4}Ua@MYE*X{rUWVtd=Vc=P<%=1b5eflD>B&Br6_Cv+W{0jrvNmNJN2|ChHnyH}Yz>c`Wcep0)c&w#;xVj1x2o7Q$Ah2lQqwI8aa-n%!-yf6ys0=Po+W~!yq(2`YvuXgO!UcJ72<oxC7n~U@3gR|2&mTMh!*JQhR@x!armxIe6-=1Im`1<8@$ouZ}xwUQW@3q&JdH&+<;Q9I4>2Hwv$zE~ibX_T6$GX(s&SOhmy!fy4FDQ2T`d3}*(0P1iKm2s6%k3XNw%p6ppPoI>3LYMQR_mU<Jb(3E7e445d`27dW%r!V=!<;O!-Ks?mVNW%>E+<`CH#S6ohR+jE;e|3etG)hB~thc3SXT5bPh$G&ST5IJ^$tW?d9NSD70}zzxe45lI5qLU*e@byX&(4aC&(@;DI8uJ}J8ttSkJ}i&p~#0Hq#3l;55{KOazMzkYpz72-)Zt6@ERbFp?@U7o%?ADmu7S!mMt@QWmC?>(Momy&TXGuYYNGziU{dz+i__7r5Y#}$y1it{=LkM8e_%kwvbv)4brQcc)j+n0D-!{GaK?2g?B2udA(_WJyL9Q5taWDK&L)7f0f_b*?+8xTv71$Ga1A1FfP=gd0~4GPTr&!119Yjo&H<i;X6dSvcH=U{hdb8ehPnnVw0HE?$xH=vCQ_JLnLrpt^<9-KAEl?MNKMdM-rQJF7ZzJ7B)c=Pu4<@p)T%)`ge>a4h&rpWuNCTQWtutJEE%t?<w{hB%d$uGYdet#%V#T+>IG1r3`_n)Y#lDh$=_;IJt)4FRFVeIwkULi)&I<fF7DZ0T)At`h!-q^(B0U;Fu?IWPWJe^eaPcZGEJUK0O4Ohk7Emh!9BM#f0y<&N1x3BL2+v}TcRJXP$dI(J!<5Hfge#96y^(t>p{PgAhrbYlr<BMl>lZ-~Z-S6g-Pw9f0>~1q7dEzDMWdcd~VSiWNYS!sj-KR7T;tLY{T|E?xTa`xX`P9=%yCw=hdZ|g&iYwqS<g}S<KZhco(J)h=7^xVt+DtpBf}ci96S+gPeCp4rbI#C+k<qB#*VD3u>Gx6mJ<ts^OT?@0ih~>`Vlc9*E_wsSE5^+>&_OoeJ(mO%pAe*RL%}M5%S>l5(PSq+EhRNoQvQB4au*JgSN=U-hO_}>;aV$QBsUOq_q$EJS>li1diNDjn`NjKWuc$}<s_%$Jk7lw85s*OjiEXi`y+34=7)4sZe68_Ov4chj$MGF$248B$8W+K%%b~u-ng!HoveHjKsGq}l0JUTKxB%~dKh}_5(s|FAZQ(EJpj5gF+a*r_^P=ao!g~O&E5P*lki1IqrM1^xVQ~+-rD|9co<+#4B^kt!_N{bz?kfSNTNT8oQ|gNw9G&Y5=Wc)Y=tU5<zKhAtv7K*mhFWX2OjRqfPy}YqnUR@z9~USC#Gn3-4Bx}rnvNUF+{l^%;|n&6*M`!zzv+WtC$KxpJQBRhEFE%%1#IH?Pthn3WeRu`xE8OoIH>9&7a1?o=f>n6msGsKg%;my2gk4j;=UVD+AP1$!)KF|7T_i3|ZX}X{>oi#tK)_gd1;4lSe^1rXlcD4g~eJ`ufP(3p|(Pj|=!qkko*WI+JRKIe^HFoXe7L1~UaZZ%ROsU_@8*TQ}dCXxTb~L3i!PmS=@glR)ytuy~XDh!|aVRSL3Py!t7X84+}A&FV7pFGhSvY+fqUR~pLk1FS=?Mlgogt_3%=K2o-(<y0`G8!nFdoHc90y;LEan&Fj2KOmI7rg);))K1?zImxud9B-6;iJ1$-H7C_0<KrGvd?Xu&#B8YN%rqXAHgd*JMa3iQglm)&VM{W!djXX-Ii*{?c@0JsWo~Af`P~|oSD#{^LM|$_Q$fUgdmaB+)4ws@;YyVoEWsNlcqXl`20f!^%RhygW`gr3vs+JH3M&WNQ_~Q2R5mZI0R^;wbL*wm{Yl)A<9@wCBQoUrTXArgxT8}E#GCrhgBWqfqq1H88qH?r$BOZm)m^#d5|sI@gXk;HaZ=fooN(@B@?)pJX8DCof0KMGLmt0k6K(v3db?Q@{w8yEi_4;J3#Z$<_X<Y5&5LV+uMk?Q1r@EA*Zp=%*ytfN_Gakq_5(|PQs!a_T@;OaRbo;Oz_GUE*+s}Ip(rm(BCxoKFCsSyOY&s}zUH^hr4eDAgU4<T5G_iEcr>HN^W-O-v|yA?QU2bo>K{24U{+`w>qD|4OuuX_I_t(F<~lLipX_9X93(Rj6uM@+TXol+;)t$dgu2<xhS!&Wa5z?Djzm9E=2KhpLHSyNp`qLsMx?P7p*tn^b#Ix;>oG4%2QNZCEveluqj^f6oVb$+3P^%dPtzO!K2K15oq91}#LG7fweph2e8{_lDN8PNp3x)zh?|AzJvC&}R~mNE5im&64M2)Ic_E_6XqEhRV(myv9DZd1t7?>~5ytzx7p8bhGF6%Qa#boxT8hT1Ub|fMs8qC2L`!J-vgOHlC=Fd82Vfi))zw)m1bokB>8|hJGo@sBNiv`M<L21MUDFi_dDQb1h9EO5#p)P)fahn;9<ECpg)kKlx<^^Vs^?GN)(iL7RFoH1##fkZc?ql#sXvpUgdsEKZflloFcoH37r^8-k+P1Wu8=QeB!MJ@WZP>@g+}|zIml!vNl|5d!W!RFzzp{f;aQN#4Y()8ofkV_YaunKYn4D1cZ=7~!r45zRZZf;jp8O-#gav(PUKkMwG|ZkUQxj4^h%a&*n0Hi7J*$S1*u#oR!7+`3?QA7Rhp)u)aD*n{|PtiY4)YbU&`|Dr^ncw3VXSlg=Dl>+^LxJkrt`qCiR9IN?EI9Tv^QtQ#Y$MPuNdYN`D$HH|Q12Qa0!mG-Lq8iQ2ZbB}DmZWUV%>6}H?nN<>RVf?}3xlk-JzgACY}_2gz<+3cMEu$5CeDouF#Jy5$0GM}N^z%q&MFQ9WOY-zI3s@ir<PAS>ekfKnwfhx4rqseD%lZwoUr<3#hqC#U<S^rM~8dDezSzhe{ij4BMnWi^Ih3-wxWfssS)Sjr2^U=gY)sBC14bM<0$azKumAwE=;<>-*D%Er{c>{bOubM3kfsDPlJg+{=q9*HU^5&cghM4r+ud+?)@;tB=lu~)A;Z{!A<j%iW14!-O3JF<L)Z7e~1mYY;@)V&DNjNYznu?}A)~PdWON+!%?T*PVLwt*xnA#zuEGOKgr~KCBw>+1rUJmkLDr?Fk^O%|*VTwso&<{&uXUT0R6Fs%yR<;DKwWVPlm&8dc7_!2^HXbYYAtVrkI~#z@EV_ij#cgn{+nM(m5E|6FHh3xd+T~zmP(_7HO=Tlc?>KR@hE`f}R6omyEd%`uxkQf~`EZiQ^{M*a%zv*CC)Ua-#VQ`asMvrKM)Lc^7(H$*6Z0c!<8;E25!{^YM}|2`d0zMb^)JvUt8yGy+D^4BDdBIlVNk|rQIzO$QgG1{hTLnf5j2bHt^xGKa`vSfnXgNIUIQ{O3|EY@3|OVnPO|;-SlCc*T?am%@s41<pTT3DZYjd-mtHV=7o@irlW6AGhf)D7``eUuGd1Q9!StjeS$4w7!F+&`e?cwlF#jXesKmV37n^KXWZhJ(MPdRYQqOH|)X31>X;+R!A{T<o_yWTPaJq&JoTg+2xKax?g4{2IEYB5<-Nwf5mm8abs&tJ~Qi$OgB?Xbpyy42F;rQ6v2gUYZMF)tI<$z2JhR7v7XAm|?on6zhs$l;&Jf*Y~is>SyCG4DMloaYqa1Q&Knv!|Il+=<Ob(BMt8m>%_oHNwMIBsQ8Z#vJ!yhZjH4U=wePdew_bitd)6=GvfX6zc<;N5~#jZ7QPS9!mptSLFKuC>-NYwAy<cx5eZ-j5}-sth3c2#+otw#(LZF83q(5&k6k7IL-)ta6Si+2N<0&p-uHCXrgrmMuv-QfZsZ7SO9o`o0a6yjLm#M72w3$pcgs+y~l0#6EFwE^25eoA(l=M~SOTA3QxcQZE&2BvN53@7mX>OCU|BYM~~Q3n*v1gP|9W^}Cov;x>3-&j9jmxj9F|9D6H`@V9J~cd2(P=)Ev9EV?<v@2N$1NQE~TgSa`<;u3{Q&U{Zeeu9ic#i2c``Y6{4mB#kEL{=!I$TFOf2r&drJ`z@*N}mcg|8;|cnuI5XV!o@2gX_{ked{&e>fnVujc79ik7iLzL$hrqh|x8lJHmTs_;i<rht=sMbubE2v#@E^ZB;7_*R(jm>>z&)nk69N(%7$%F0Tt~--dC`wtoY5w%5QDo@W_A<gJS4PP<XPO;OycFpJAV8LSN($SQ(wQNLqM1r1nR&~JBBy8<!|<xa<Bds|$EP!F3R-DQktfzxq|Kv$Je3(;UW@zvmzSl`(~5@jKf26y%Y^I5^tOkwkU_KVb7wqSsXYFcHcLD0K?;VBNJ=~OZgmHC6Jf!g5<7!O>&(nD8n1-aT?hKfSVvGrRYwhwHvTU9U`j}x^tNFaiW?iT$-1_6beU>q7~g|f@504|<16N=^svmSgFy9i?2X;;C>Jd8@k4l0W2l^Zoji6&5(aIDC7AB@vmMcmt<35;xAhm8aD=O6i!Z68mfr<16Ok4H36PHuyz__ui*995$9;TawiRvn2y3Zxt=N#)`@#nbZ2&xeX4&VqioIt?f!a{WsgsV+gk<*p%!<O8=&JCU*m`EF!Z6i4txam-nTBgSIQWkf{qp(^v;X*@Ki_4<)K<(%e}=Bb4sDhuG9HoAaXx)6*&6e}%@etM7bw+d63%18j~C$aVhRVFv6q`+$sQ*Cj>FO)|urg^?2b7i1Ze#yWju0sATb*x6G!mHFkb-hceVthzPp-R~6Bw(g;7J)hoORcBZ8X34=CHczAhbOLwrY;`H!=@+had*dS@?KaI2)rI6&p-%9i|!|p3BMwfY9GK(RAGq@5z%#;`C3kbJAV?~M$y>v7Eu5*2Bx))?-Zng57J6%z0YnB2%~Y%!y@BYF0~NQmVAr3R>inOol$BT-e}a##l6za|J`kOe?NZG{T)MjuiLzJe?Q&<Vnd}T^_}MLHn5YYz{1q?k%Oe4&bR8nH+S&EIuA|vch}u{`lNGIhlkF;{sq6gPj~m|)uGqDr%oHdtux9hR_M+oW1St<XUI}#C4QRYsctepX+O<#Q(%cl>l_TT-g0wXbGN~KQ+z0)c+dTEkG&zX^5t^^qh7ne<=%Jk$-yUf&77@mvzvF86u1bKB`XBi$-wdQEXMW&Qpr?8Cu9U;SGlg`v6xn1p@%3rEoN{#Rd9I{0UXYKqVavoADa5ZkyGAqC?B6%V;?hw^Xwp8f=LhQ-6eG!CH7-CI}~UuR&<@)Vv--Tvx90Ih3wz@vyfP<Z;+JAvNJ*$D>-WfXekdhK?eRPuuuF{+Fj>Zesus^so!DyG41b`^8eIul(Y_SLLylln*3GeRSl`mOBkHwy=XtJrBVL8j&{G6AA}+7LcZ^d6qJWxK4&0gtH#8ToO9qS4hWG4w?xX=kd;FPw^QXH(V1vxR$w)GSIbNu!F#D(Eia%?w{A6+DzBJSB!8%Zzh(O{n#8bveLsotiXT{$kSI}<9$CX6ZNh4PgBKS0GN4W3FF-DO<=>}xJqyNdwdxq#Oi`~@>@!}qR6~{z58|@nOIp2T!*Z%nsBTtTvzDR4vn-6cxZ+d+*0Vw{G^cZ*9idk|G&=`fD06&FN6D)^Ls#s+Rw##=x!6u;eX*TRp%`Z7V$S~hV$OaM%Y9YsV121#({#f&w5!-G-Kq_Z%GxAbQp!r+<uS~IrL~P+j!o+RPtT&Yd>oXRt6OPd0Ge62iyFgBO&`M-Z~XL?hZmG*uAMZu%EyM2G)5~Si-`tLy81>L2?tL5>Kp2=Pq_d(XFq<8pYt_-&e!-k|B>-?zQ(ut8sFw?e4DTFZNA30`9tw-$dRL6j&@^sXOsiV{O5$eIm|VWojj`S!2d(T+^9bO8s4T`3K8)&BFxu_Fkd6WJQNY;YuuIpm2p@8<APxPcLziG_k<_-4?nN}^^EY>Gs0ib2!A~z{Pm3R*E7Oj&j^1#Bm7sN5#D%uHly*s<@oIE>(SY-M`!J?=Ul&@bN!5SuAhA*^MCyr%&#7mUp*?ndQ|>39+iKpb5<A)M)P4Xs`Sj#chmB<snSsj*_yzc(H?QJsl0|1uN#$*t%_?$7jE&IP~~8iY$x$(`xh?^CKJze#L8bADr$u+HM=YCPt=!$Ug7?6oVtiUvF1A6pr_En+hg-L#Iavmp`te3VJH^*icc{rT`f1lYl{8R-D5A5tDXH=6Uls9U-oKv=X9-~UEUq{YIyl^t#5Br#Wi+nPin$wN0VA6t|#;4)|J;38r^8z+6uk+@#-7?aP`d*JU@d!y(i)cv<&~tp0fY=+Y{r-%(W@C3@iWN9{k6-_BN(IsYu_`zk9}ezU-cS+B5QPN~IiqarMnv`>!O+<NjMmmUf{r2md~@JV&Y=ibI({d&>UfZ->T{nTwyD%GARL=;2Vg9r=Ipza5?G$lqL9<Bya3WaMznEKcE*&b6~46X)!I0#bQ=D>M?UN7U;%^xNb=ke7a&_@~1u9huVMln#}l3{c4F_dmg$&NIdem)1YakJj{j1!?*5zOma-{r^dW6l502ka@_GP3%mfFSCVFig5!dN&D2&_2lIE4-6dRcwl)v*EXFecn<E?2YyOuNGM}}f%j$L_2!9n9V}sume&HaL@TUYe=@`S3FOKNU+};IihZOmz}k2fdc%b4*N7AydV|C=+pJ`d?Z);W`d59r-uQR+`qjnd>8r~Nb)w>r{A+AyCo{4haD3+gWRBQJIUPnzg5E;k;R1xh2z(p`iH>}bZL<s~!6@_0!mKWV>Q>e9leY|}^C@<1bng@S(JARWs}4n;*qdShbo#6GH&pS8tLq5DavkjlK)-k;L07|ctf80S^(zs@i(rz}+pV_q9hSkXg&l79?gNd$P}7_-tLQHsJQtU*-=6+(Zh@ZrSB{?Vb92s%V{e5f!))e`Fn|U|*MKRFp)%lir^A!efQIw<@|G{U;mPd$;~56mfVm4DkmAXFRmm)44XXkO&@S=XY`Q)tNcgsGx-`d2DNM)tFF#omf8kH8I-@!S4R@U6`>wYGioEPU!t>wMV?Un1d~^QR`u^uve8>1-*J(e2Rv65nPtyB{hBOdr?wkEF^I~rbV(9l2x`mQ0RA}r{o|Sb$V(FSpQrmdTdTBLN(OM0uP5Mw*rV_3`OBvK5HLM1f+%|OTPgT@-9xUiWrH5$oim#*x@q8U6p8H`m4Z_MipGOGXUHnrCA>E@^n+S1+3!>%8o>b8arWk@h#K8T_Qj<C7FZ7#6yrPye0RYIM`7@O%XY!VmNiGz{OtLA2p+7d0HO;8<dKNALa%6;K9E^9W?z4?e+}>jePMezewOf_<L|3Kq(reicK-o9;P82Rst2I`n1c?qkTcYN0mY`&n<*PgNjn*vZyNYqCM}C2-Q0g)=4PNl!O9mm<Zn}nVY$759Ei+qMYT~^&=5bfR+-%gd5`b)mdE?9I*-Qsu(D1&baT=HH2U|!}45d$KA1zN-?1iwXfz+=AoqnmUm>*5ti**yNFg>nS-l{2r26Dsx`X%k<sYb?IDM4xE?TxMXCZjn<;IcsCjwTpkYaCo(`!U`*qZtk|;x$azGZ&=tsLw4$W%8VsD=j*fONWju&`4(5`w~Lots+C*5k#Y&bp-!6EpHQrE<gvH@a<|he(vD3Re$CUSCc3VK%koX>1{N&D;6oui&O6obfEVzo1*J7DPYykKo^McnMbQvpLMj_h%yEFw$NsszpSiywpyCNKLFP)yINu94+T@T1icLpTh@mn_@dGJuN3J}^p;ZHUntDI^}R9Pk%OXd^}GnevA<;5m>=uy=8jXb2=L%RIh*d8B#{~676u3!MG=~Dj0T_@17#8T_YcjF_wyk3>x|Das06~g`o=&pn&ZHg^7+*_6^3)(v7+4lO;hR}nqak512e-j+Vojes+4(%TE)c$t1MGUSUKs$AlRQo8IvS13ko6y8~F29q@p3`kD8DS3(%#!C-NF2;}KbAXqO)&(a<`S>4<rY5ZZ~n00s`)f#^h!H^epr+w+(HXpZU}$Dt%^Q9;!tEfe~fuA9R3jg0>k4>mh1B*`rgp*+JdtY%C{^h-iUhFC(?H@B(vtMm|vvDstm*Mhds9<sl7b(~3h$8P$SaUGLBkjeXkY$cUYeyf1;+h;(@ww`4ODG;b9+yQitRydyy{WxDndGdGF6|~v?oxiHYq)@qC3F5a35Wj5z@oAIYkggWH_HdatM~MEM*$c54N<Af$Augv=7{G?T5Ck9?TzV;^o2?AZk8Dy0e7^EKqVOKc&1CX%+9>~Cg@Hz)(kz%mR-HOzcB-;clu+8d!R<LkpbD-e&-h)athz(wc&YA|GKk+Y5WhVhgc9G`#{&PqzXchMrpA1g;KV2lNxyZ|!h0TkXO|AxGQo-fr6WiVAo{#~9>hQAfM-dhQQi%C_ddJ3My8$M5JChj-y7X3<`l_WnI#h{bP8vBVQ@$0ayUkibv5(6Zf%eJJYxgb^@BaLz7r~8RCk8`M^0k?Av*uyr}+sKdQ+b^OUFSnn|P~o^Dc5(c_aMcee}HWlHWe>R<EKJo7DgPF-`uAT^!l499Pcs;^+RghX$=YU*nyaop#QA&hsE|?v3ZT&?nrpth`}eAbTcy*&-_k$Ja$Jnv5duNWEE8ApeGdEM?0zj(KI*M|`D`WT*Wdv6_bs`@DT%TsC0TBsZ+a(I~e}JdSr6$CDrO@pxc9RoMhdXJ4zYe+J@fCjbApNPoHKObMT>Z{)}u(3(Wk$B?x@{XbT_HX#","decode":"json.loads(zlib.decompress(base64.b85decode(result['offline_source']['data'])))","runtime":"Prescribed pinned amm-challenge checkout, Python 3.12, supplied amm_sim_rs wheel, numpy, py-solc-x 2.1.0, pyrevm 0.3.7, solc 0.8.24. No additional dependencies.","commands":["python scratch/checks.py","python scratch/offline.py --start 760256 --n 512 --steps 2000 --stride 4 --out scratch/fit.npz","python scratch/make.py scratch/fit.npz","python scratch/solidity_checks.py","python scratch/evaluate.py V10,disabled 766000 32","python scratch/state_parity.py","python scratch/overlay_transition.py","python scratch/pipeline.py","python scratch/offline.py --start 760768 --n 64 --steps 1000 --stride 8 --out scratch/diagnostic.npz --capture","python scratch/permutation.py"],"environment":"Run from checkout root after sourcing scratch/env.sh. Frozen tables are also included; regenerate candidates with make.emit(table,name) without refitting."},"notes":["No board claim. All reported paired market deltas are against V10, not STACK. STACK source hash was verified as 2eaafc7960e520b8a7fd322ec8afaff8fa677c730228a961efb509cc30b25719; no STACK comparison or seeds >=5000000 were run for this item.","Official measurements use each strategy separately against VanillaStrategy, run_batch(...,8), 10000 steps, MatchRunner-compatible config draws. Retail/arb deltas use the supplied harness reconstruction; no seed dropped.","Offline fitting is an empirical conditional-expectation implementation of the design, not its proposed Gauss-Hermite quadrature. Training uses NumPy PCG64 paths sampling the pinned public laws, not Rust RNG-identical paths. Each fit trajectory has 2000 steps, first 50 discarded for fitting, every fourth own callback sampled; this approximates the true cell distribution and is a material model limitation.","Realized remaining orders, current latent fair price, next price and normalizer state appear only in offline targets. Their cell-conditional averages become static actions; deployed code reads only own TradeInfo and original V10 slots. No calibrated Gaussian interpretation of slot13 is assumed.","Poisson counts are sampled without truncation, so truncation residual is zero. Monte Carlo error remains; callback-level fitting SE ignores within-trajectory dependence and is only a heuristic gate. Market paired SE is the sample standard deviation across seed differences divided by sqrt(n).","The design sketch divides sizeHat by reserveY, but V10 sizeHat is already a dimensionless reserve ratio. This implementation uses lambdaHat*sizeHat to preserve units. The variance bins compare squared boundaries directly, adding no on-chain square root.","The held-out arm was frozen by the declared screen/recheck rule, including if gains were statistically unresolved. No tables, action grid or gates changed after fitting, and no held-out data were used for selection. D and C0 are ablations; the optional polynomial/gradient family was outside this item.","A setup/compiler dependency lives only in scratch and is not a delivered contract dependency. Candidate imports are the pinned base/interface, included in the source bundle. The offline reproduction scripts require the prescribed task runtime.","Frozen B held-out paired mean -0.0444943939975, SE 0.0129730729852; approximate 95% normal interval [-0.0699216170484,-0.0190671709465].","Do not promote this frozen overlay over V10: its held-out paired interval is negative. This is a rejection of the fitted empirical implementation, not a proof against every two-step continuation controller.","Every nonidentity B table entry raises exactly one fee by 0.5 bps. Its policy largely overlaps C0 despite the continuation objective; the implementation does not establish the goal-sized mechanism gain."],"decision":"reject_frozen_overlay_keep_V10"}
