@black-market/sdk 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -89
- package/assets/abyss-ziggurat-v3-pale-text-1500x500.png +0 -0
- package/dist/lifecycle/deployments/dynamic-fee-pool-hook-v1-20261011.d.ts +12 -0
- package/dist/lifecycle/deployments/dynamic-fee-pool-hook-v1-20261011.d.ts.map +1 -0
- package/dist/lifecycle/deployments/dynamic-fee-pool-hook-v1-20261011.js +11 -0
- package/dist/lifecycle/deployments/dynamic-fee-pool-hook-v1-20261011.js.map +1 -0
- package/dist/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.d.ts +67 -0
- package/dist/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.d.ts.map +1 -0
- package/dist/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.js +69 -0
- package/dist/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.js.map +1 -0
- package/dist/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.d.ts +67 -0
- package/dist/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.d.ts.map +1 -0
- package/dist/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.js +69 -0
- package/dist/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.js.map +1 -0
- package/dist/lifecycle/hmm.d.ts +125 -0
- package/dist/lifecycle/hmm.d.ts.map +1 -0
- package/dist/lifecycle/hmm.js +91 -0
- package/dist/lifecycle/hmm.js.map +1 -0
- package/dist/lifecycle/index.d.ts +1 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +1 -0
- package/dist/lifecycle/index.js.map +1 -1
- package/dist/lifecycle/markets.d.ts +3 -0
- package/dist/lifecycle/markets.d.ts.map +1 -1
- package/dist/lifecycle/markets.js +24 -1
- package/dist/lifecycle/markets.js.map +1 -1
- package/dist/lifecycle/presets.d.ts +9 -3
- package/dist/lifecycle/presets.d.ts.map +1 -1
- package/dist/lifecycle/presets.js +103 -1
- package/dist/lifecycle/presets.js.map +1 -1
- package/docs/launch-lifecycle.md +109 -10
- package/examples/README.md +11 -5
- package/examples/hmm-launch-config.ts +29 -0
- package/examples/launch-example.ts +13 -5
- package/package.json +1 -1
- package/src/lifecycle/deployments/dynamic-fee-pool-hook-v1-20261011.ts +12 -0
- package/src/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.ts +71 -0
- package/src/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.ts +71 -0
- package/src/lifecycle/hmm.ts +99 -0
- package/src/lifecycle/index.ts +1 -0
- package/src/lifecycle/markets.ts +22 -1
- package/src/lifecycle/presets.ts +108 -1
- package/assets/abyss-social.webp +0 -0
package/docs/launch-lifecycle.md
CHANGED
|
@@ -7,6 +7,81 @@ The canonical authorities are the registry/certification/adapter/config contract
|
|
|
7
7
|
in the protocol repository. Plan identity is `LaunchPlanV1`. Pool-bound V4 uses **config 6**,
|
|
8
8
|
canonical Abyss uses **config 1**, and generic current shared-V4 support uses **config 4**.
|
|
9
9
|
|
|
10
|
+
## 0.9.0 release: HMM pool hooks
|
|
11
|
+
|
|
12
|
+
The October11 registered **HMM Fixed** and **HMM Dynamic** use
|
|
13
|
+
`KnownLifecycleProfile.V4HmmFixedPool` (`v4-hmm-fixed-pool`) and
|
|
14
|
+
`KnownLifecycleProfile.V4HmmDynamicPool` (`v4-hmm-dynamic-pool`), with hook keys
|
|
15
|
+
`KnownLifecycleHook.HmmFixedPoolV1` / `HmmDynamicPoolV1`. Their frozen profile,
|
|
16
|
+
adapter, envelope, graph, runtime hashes and creation code come from Black Market
|
|
17
|
+
main `1ca9881`, admissions `20261011T214314Z-hmm-fixed` and
|
|
18
|
+
`20261011T220032Z-hmm-dynamic`. Each graph has its own HMM collector/deployer and
|
|
19
|
+
locker; these are not aliases for the existing fixed/dynamic hooks.
|
|
20
|
+
Live `readLifecycleProfiles` remains the authority for `admitted`, not the presets.
|
|
21
|
+
|
|
22
|
+
Both require `lpFeePips: 0` and `developerFeeBps: 0`. Fixed uses `hookFeePips`
|
|
23
|
+
as the static trading fee; Dynamic uses the same minimum/maximum/sensitivity
|
|
24
|
+
policy as the Dynamic Fee Hook. Config6 requires `hmmLaunchConfig`:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
const hmmLaunchConfig = defaultHmmLaunchConfig({
|
|
28
|
+
tokenBudget: marketTokenBudget, quoteAsset: "USDG", quoteDecimals: 6,
|
|
29
|
+
});
|
|
30
|
+
// Optional explicit UI choices:
|
|
31
|
+
hmmLaunchConfig.strategyShareBps = 2500; // 25%; default 50%; 100% is also valid.
|
|
32
|
+
hmmLaunchConfig.strategy.premiumDecaySeconds = 259200; // 72h; default off (0).
|
|
33
|
+
const config = encodePoolBoundV4LifecycleMarketConfig({
|
|
34
|
+
...reviewedV6Fields, lpFeePips: 0, developerFeeBps: 0, hmmLaunchConfig,
|
|
35
|
+
});
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`HmmStrategyConfig` / `HmmLaunchConfig` mirror Solidity
|
|
39
|
+
`HMMStrategyConfigV1` / `HMMLaunchConfigV1`; `encodeHmmLaunchTail` produces exactly
|
|
40
|
+
`abi.encode(HMMLaunchConfigV1)` (448 bytes). The V6 codec automatically appends it
|
|
41
|
+
only for HMM profile IDs and rejects a missing tail. Decoding preserves the typed
|
|
42
|
+
tail through `prepareAndPlanLifecycleLaunch` salt mining and recovery; plain V6,
|
|
43
|
+
noncanonical prefixes and incorrectly sized tails are rejected before RPC planning.
|
|
44
|
+
The full plan hash includes the tail. The hook constructor's market-economics
|
|
45
|
+
commitment hashes only the canonical V6 prefix with zero salt, exactly as the
|
|
46
|
+
HMM collector factory does.
|
|
47
|
+
|
|
48
|
+
`validateHmmLaunchConfig` mirrors the collector factory: share <=10,000 bps;
|
|
49
|
+
positive bid/ask widths and stale displacement, nonnegative gap, positive stale
|
|
50
|
+
seconds and harvest thresholds; resale premium <=5,000 bps; 1–8 asks; exposure
|
|
51
|
+
>= ask count and minimum token harvest; inventory >= minimum token harvest;
|
|
52
|
+
both caps <= uint128 max. Solidity int24/uint32/uint256 widths are enforced.
|
|
53
|
+
Minimum quote deployment may be zero; premium decay is any uint32.
|
|
54
|
+
Widths, gap and displacement are **tick spacings**, not raw ticks.
|
|
55
|
+
|
|
56
|
+
Defaults: 50% share; widths 5/5, gap 1, stale 86,400 seconds/displacement 5,
|
|
57
|
+
resale premium 500 bps, 4 asks, decay off. Token thresholds are raw market-budget
|
|
58
|
+
ratios: harvest budget/100,000, ask exposure budget/10, acquired inventory budget.
|
|
59
|
+
Budgets too small to produce a positive harvest or above uint128 are rejected.
|
|
60
|
+
WETH minimum quote deploy/harvest is 0.0005/0.005 ETH; USDG is 1/10 six-decimal
|
|
61
|
+
units. Symbols and canonical catalog addresses work; supplied decimals must match.
|
|
62
|
+
Other quotes require explicit `minQuoteDeploy` and `minQuoteHarvest` raw values.
|
|
63
|
+
Do not infer USD prices or units for unsupported assets.
|
|
64
|
+
|
|
65
|
+
Each harvest sends the share of collected **QUOTE** fees to the per-market manager;
|
|
66
|
+
the remainder follows the normal owner/holder-reward split. Token-side fees are
|
|
67
|
+
untouched. The fee owner may call `HMMFeeCollectorV1.setStrategyShareBps` later.
|
|
68
|
+
The manager bids below price and re-sells acquired inventory at/above realized
|
|
69
|
+
cost plus premium; it never touches the locked launch positions.
|
|
70
|
+
|
|
71
|
+
Independent Solidity ABI fixtures are generated by
|
|
72
|
+
`node scripts/generate-hmm-fixtures.mjs` (Foundry `cast abi-encode`). Snapshot
|
|
73
|
+
regeneration uses `node --experimental-transform-types scripts/generate-hmm-presets.mjs
|
|
74
|
+
/path/to/black-market`; it reads hash-checked storage-child runtime code from
|
|
75
|
+
Robinhood without modifying the evidence checkout.
|
|
76
|
+
|
|
77
|
+
## 0.8.1 release
|
|
78
|
+
|
|
79
|
+
Adds the Robinhood October11 Dynamic Fee Hook preset:
|
|
80
|
+
`KnownLifecycleHook.DynamicFeePoolV1` and `KnownLifecycleProfile.V4DynamicFeePool`
|
|
81
|
+
(`"v4-dynamic-fee-pool"`), profile
|
|
82
|
+
`0x27f219872fe934a5464bc9b900028256122f215b40cbdb69ef5f88cd5f627ccb`. The fixed
|
|
83
|
+
preset and example default are unchanged.
|
|
84
|
+
|
|
10
85
|
## 0.8.0 release
|
|
11
86
|
|
|
12
87
|
This release adds unstarted-launch topology validation, boundary tails enabled by
|
|
@@ -23,13 +98,16 @@ Known chain/core/profile identities use frozen release construction metadata.
|
|
|
23
98
|
`getKnownLifecycleDeployment`, `getKnownLifecycleProfile` and
|
|
24
99
|
`listKnownLifecycleProfiles` are pure, browser-safe selectors. Profile selection
|
|
25
100
|
accepts either `KnownLifecycleProfile` keys or exact profile IDs.
|
|
26
|
-
`KnownLifecycleHook.FixedFeePoolV1`
|
|
101
|
+
`KnownLifecycleHook.FixedFeePoolV1` and `KnownLifecycleHook.DynamicFeePoolV1`
|
|
102
|
+
identify the fixed hook and **Dynamic Fee Hook** respectively; both use the V2 constructor.
|
|
103
|
+
Select the latter with `KnownLifecycleProfile.V4DynamicFeePool` (`"v4-dynamic-fee-pool"`).
|
|
27
104
|
Unknown identities return no preset; explicit `readLifecycleProfiles` and unlisted
|
|
28
105
|
profile construction retain live discovery/certification. Presets describe release
|
|
29
106
|
availability, never current admission, and contain no `admitted` claim.
|
|
30
|
-
The
|
|
31
|
-
|
|
32
|
-
|
|
107
|
+
The Robinhood presets retain the mined October8 fixed config6 graph and add the
|
|
108
|
+
October11 zero-author-royalty Dynamic Fee Hook, each with its own exact artifact,
|
|
109
|
+
review, terms, runtime pins, creation-code chunks and 20-word V2 constructor.
|
|
110
|
+
Historical config5 codecs and 18-word V1 ABIs remain explicit for
|
|
33
111
|
existing deployments, but October5 evidence is not relabeled or selected as the
|
|
34
112
|
current preset. Explicit live discovery certifies unlisted deployments from actual
|
|
35
113
|
pinned reads.
|
|
@@ -508,12 +586,24 @@ capabilities and explicit atomic/staged behavior are unchanged.
|
|
|
508
586
|
|
|
509
587
|
Robinhood mainnet (`4663`) selects the mined `pool-launch-v1` deployment captured at block
|
|
510
588
|
`82880546` in `contracts/deployments/launch/pool-launch-v1/20261008T000141Z-e174ce6/manifest.json`.
|
|
511
|
-
The manifest records 22 successful receipts and canonical runtime evidence
|
|
512
|
-
adapters and five
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
589
|
+
The October8 manifest records 22 successful receipts and canonical runtime evidence,
|
|
590
|
+
with two adapters and five profiles at that deployment. The subsequent October11
|
|
591
|
+
Dynamic Fee Hook admission adds a third adapter and sixth profile to the same
|
|
592
|
+
core/registry: four canonical Abyss variants and fixed/dynamic pool-bound config6/V2.
|
|
593
|
+
Neither offering deploys a shared V4 root. The fixed preset and example selection
|
|
594
|
+
remain `0xf18140c2fb66a4202a0f22d62d6288bf7976db108de5381e5497aaed332a06f8`,
|
|
595
|
+
with creation hash `0x11c4c7b1f265ed708b7d53ab828c89d237ca821333daa808f1913986c6f8f1ab`.
|
|
596
|
+
The Dynamic Fee Hook profile is
|
|
597
|
+
`0x27f219872fe934a5464bc9b900028256122f215b40cbdb69ef5f88cd5f627ccb`,
|
|
598
|
+
with creation hash `0xd448a4117b78714cc4f96824356c6a90ec666449fde5c57e2b7bbe072f5e4a7a`.
|
|
599
|
+
Its exact graph and terms are prepared in
|
|
600
|
+
`contracts/deployments/launch/pool-hook-template-v1/20261011T033141Z-dynamic-fee-zero-royalty/admission.json`;
|
|
601
|
+
that file is **unsigned preparation, not a mined receipt**. Registration is evidenced
|
|
602
|
+
by the successful `forge-broadcast/AdmitPoolHookTemplateV1.s.sol/4663/admit-latest.json`
|
|
603
|
+
receipt for `0x1928b13d1a6bf8826d08493a18c483fc7d244a3ec4100a7f8118f510a5db640c`.
|
|
604
|
+
Creation bytes concatenate the preserved storage-child runtimes after stripping each
|
|
605
|
+
first STOP byte, exactly as `PoolHookDeployerV1._initCode` does; constructor arguments
|
|
606
|
+
are appended separately. An unpatched artifact runtime is not a deployed hook-instance runtime.
|
|
517
607
|
October5 config5/V1 evidence remains historical, never a substitute for this graph.
|
|
518
608
|
|
|
519
609
|
| SDK field | Mainnet address |
|
|
@@ -649,6 +739,15 @@ calculation. Sensitivity's encoded units are fee-pips × seconds/tick; they do n
|
|
|
649
739
|
imply an active oracle-driven fee formula. Registered oracle configuration still
|
|
650
740
|
governs the pool's oracle behavior, not this hook's fixed fee rate.
|
|
651
741
|
|
|
742
|
+
The registered **Dynamic Fee Hook** instead uses the oracle's upward quote-per-base
|
|
743
|
+
tick velocity: `minimum + floor(positiveTickChange * sensitivity / elapsedSeconds)`,
|
|
744
|
+
capped at `hookFeePips` (the maximum). Quiet/falling prices, zero elapsed time or zero
|
|
745
|
+
sensitivity use the minimum. Select its own preset/terms, set **`lpFeePips: 0`** and
|
|
746
|
+
explicitly encode all three config6 fee settings. Its reviewed author allocation is
|
|
747
|
+
**0 bps**, so `developerFeeBps` must be zero. Generic config6 codecs do not identify
|
|
748
|
+
fee behavior or certify constructor compatibility; live constructor/simulation
|
|
749
|
+
authority remains required. Fixed launch examples continue selecting the fixed preset.
|
|
750
|
+
|
|
652
751
|
```ts
|
|
653
752
|
const profile = profiles.find((row) => row.id === selectedProfileId);
|
|
654
753
|
if (!profile?.admitted || !profile.envelope || !profile.developerTerms) throw new Error("Selected profile is not reviewed/admitted");
|
package/examples/README.md
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
# Examples
|
|
2
2
|
|
|
3
|
-
The launch examples use the public `@black-market/sdk` 0.
|
|
3
|
+
The launch examples use the public `@black-market/sdk` 0.9.0 package and viem.
|
|
4
4
|
Build this checkout before running its examples; in a consumer project install
|
|
5
5
|
`@black-market/sdk@0.8.0` or later for the `positionGaps` and recovery APIs.
|
|
6
|
-
The
|
|
7
|
-
the October8 mined pool-bound V4 config6/V2 and canonical Abyss config1 deployment.
|
|
8
|
-
|
|
6
|
+
The default chain-4663 launch cases retain
|
|
7
|
+
the October8 mined fixed pool-bound V4 config6/V2 and canonical Abyss config1 deployment.
|
|
8
|
+
The SDK additionally knows the October11 zero-author-royalty Dynamic Fee Hook;
|
|
9
|
+
its registration does not change the fixed cases' selection or fee schedule.
|
|
10
|
+
HMM Fixed/Dynamic are additional October11 presets; their required typed launch
|
|
11
|
+
tail and defaults are demonstrated by `hmm-launch-config.ts`. Existing fixed
|
|
12
|
+
cases are intentionally unchanged. See the HMM section in the lifecycle guide.
|
|
13
|
+
Historical October5 config5 evidence is not relabeled as these graphs. Discovery
|
|
9
14
|
is read-only; fixed launch examples default to an unsigned dry run. Only
|
|
10
15
|
`--broadcast` (or deliberate `--resume` continuation) authorizes real writes.
|
|
11
16
|
|
|
@@ -17,6 +22,7 @@ examples; their relative support imports use explicit `.ts` extensions for Node
|
|
|
17
22
|
| Script | Behavior |
|
|
18
23
|
| --- | --- |
|
|
19
24
|
| `quickstart.ts` | Reads the current mainnet orchestrator, checks its registry binding, and discovers admitted profiles. No wallet or writes. |
|
|
25
|
+
| `hmm-launch-config.ts` | Pure HMM fixed/dynamic config construction with typed defaults and an automatically appended launch tail; no RPC, signatures or writes. |
|
|
20
26
|
| `launch.ts` | Reviews/reconstructs an explicit saved plan and selected atomic/staged mode; optional offchain config6/V2 salt mining. Prints simulation, progress, and an admitted unsigned next transaction when evidence permits. |
|
|
21
27
|
| `generate-lifecycle-commitment-fixture.ts` | Frozen independent historical config4/Abyss ABI bytes/hash/identity vector. Its pre-cutover allocations are not an executable 0.7.1 plan. |
|
|
22
28
|
| `launch-lifecycle-smoke.ts` | Actual SDK launch/recovery/custody/fee operations, only on an explicitly authorized owned disposable loopback graph. |
|
|
@@ -483,7 +489,7 @@ The examples have been reviewed against `abyss-app`'s `scripts/launch-node.mjs`,
|
|
|
483
489
|
`launch-node-deploy.mjs`, `launch-browser-wallet.mjs`, `launch-staged-smoke.mjs`,
|
|
484
490
|
`launch-review-smoke.mjs`, and `src/lib/creation` / `src/lib/lifecycle` authoring,
|
|
485
491
|
funding, execution and recovery modules. These are behavioral references, not SDK
|
|
486
|
-
dependencies. The application consumes the published **`@black-market/sdk` 0.8.
|
|
492
|
+
dependencies. The application consumes the published **`@black-market/sdk` 0.8.1** and
|
|
487
493
|
derives current deployment defaults through **`getAddresses`**, as do these examples.
|
|
488
494
|
The package pin alone is not live deployment authority. The mined graph
|
|
489
495
|
is recorded in the contracts repository at
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Pure configuration example; not a priced/admitted launch and never signs or broadcasts.
|
|
2
|
+
import { keccak256, zeroHash } from "viem";
|
|
3
|
+
import {
|
|
4
|
+
KnownLifecycleProfile, defaultHmmLaunchConfig, encodeHmmLaunchTail,
|
|
5
|
+
encodePoolBoundV4LifecycleMarketConfig, getKnownLifecycleProfile,
|
|
6
|
+
} from "@black-market/sdk";
|
|
7
|
+
|
|
8
|
+
const identity = { chainId: 4663n, orchestrator: "0x91560876033d568d25CDe98C78c33ff8FC43962c" as const };
|
|
9
|
+
const tokenBudget = 1000000n * 10n ** 18n;
|
|
10
|
+
for (const key of [KnownLifecycleProfile.V4HmmFixedPool, KnownLifecycleProfile.V4HmmDynamicPool]) {
|
|
11
|
+
const preset = getKnownLifecycleProfile({ ...identity, key })!;
|
|
12
|
+
const envelope = preset.profile.envelope!;
|
|
13
|
+
const hmmLaunchConfig = defaultHmmLaunchConfig({ tokenBudget, quoteAsset: "USDG", quoteDecimals: 6 });
|
|
14
|
+
// Optional explicit choices: share 2500/5000/10000 bps; decay off/259200 (72h).
|
|
15
|
+
const config = encodePoolBoundV4LifecycleMarketConfig({
|
|
16
|
+
version: 6, lpFeePips: 0, tickSpacing: 60, sqrtPriceX96: 1n << 96n,
|
|
17
|
+
hookFeePips: 10000, minimumHookFeePips: 1000, feeSensitivityPipsSecondsPerTick: 7654321,
|
|
18
|
+
feeMode: 0, protocolFeeDenominator: envelope.protocolFeeDenominator,
|
|
19
|
+
treasury: envelope.protocolTreasury, externalLiquidityDisabled: true,
|
|
20
|
+
oracleConfigId: keccak256("0x01"), hookSalt: zeroHash, profileId: preset.profile.id,
|
|
21
|
+
termsDigest: envelope.termsDigest, developerBeneficiary: envelope.beneficiary, developerFeeBps: 0,
|
|
22
|
+
// Illustrative only: derive actual budget-funded one-sided ranges/price and
|
|
23
|
+
// select a real admitted oracle before prepareAndPlanLifecycleLaunch.
|
|
24
|
+
positions: [{ tickLower: 0, tickUpper: 887220, liquidity: 1000n, salt: zeroHash, maxTokenAmount: tokenBudget }],
|
|
25
|
+
hmmLaunchConfig,
|
|
26
|
+
});
|
|
27
|
+
console.log(key, { profileId: preset.profile.id, configBytes: (config.length - 2) / 2,
|
|
28
|
+
tailBytes: (encodeHmmLaunchTail(hmmLaunchConfig).length - 2) / 2 });
|
|
29
|
+
}
|
|
@@ -182,6 +182,18 @@ export async function discoverExampleQuoteOracles({ client, fixture, scenario, q
|
|
|
182
182
|
addressEqual(canonical?.hash, block.hash, "Pinned quote/oracle block remains canonical");
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
+
/** Fixed launch cases retain their exact known offering when more hooks are admitted. */
|
|
186
|
+
export function selectExampleFixedV4Profile({ profiles, fixture, sdk }) {
|
|
187
|
+
const fixed = sdk.getKnownLifecycleProfile({ chainId: BigInt(fixture.chainId), orchestrator: fixture.orchestrator,
|
|
188
|
+
key: sdk.KnownLifecycleProfile.V4FixedFeePool });
|
|
189
|
+
const bound = profiles.filter((row) => (!fixed || same(row.id, fixed.profile.id)) &&
|
|
190
|
+
row.venueKind === "uniswap-v4" && row.topology.hookTopology === 2 &&
|
|
191
|
+
row.topology.configVersion === 6 && same(row.registration.configSchema, sdk.V4_POOL_BOUND_LIFECYCLE_CONFIG_SCHEMA_V6) &&
|
|
192
|
+
row.adapter.configVersion === 6 && row.envelope?.configVersion === 6);
|
|
193
|
+
if (bound.length !== 1 || !bound[0].admitted || !bound[0].envelope || !bound[0].developerTerms) throw exampleError("PROFILE_NOT_ADMITTED", "The fixed case requires its exact admitted pool-bound V4 config6/V2 profile, schema and frozen terms; unlisted graphs require an unambiguous offering", { data: bound });
|
|
194
|
+
return bound[0];
|
|
195
|
+
}
|
|
196
|
+
|
|
185
197
|
|
|
186
198
|
async function constructPlan({ client, fixture, scenario, sdk, artifacts, signal, limits, metadata, image }) {
|
|
187
199
|
const read = contractReader(client);
|
|
@@ -191,11 +203,7 @@ async function constructPlan({ client, fixture, scenario, sdk, artifacts, signal
|
|
|
191
203
|
artifacts.event("registry-profiles", { profiles });
|
|
192
204
|
const selected = {};
|
|
193
205
|
if (scenario.markets.some((row) => row.venue === "v4")) {
|
|
194
|
-
|
|
195
|
-
row.topology.configVersion === 6 && same(row.registration.configSchema, sdk.V4_POOL_BOUND_LIFECYCLE_CONFIG_SCHEMA_V6) &&
|
|
196
|
-
row.adapter.configVersion === 6 && row.envelope?.configVersion === 6);
|
|
197
|
-
if (bound.length !== 1 || !bound[0].admitted || !bound[0].envelope || !bound[0].developerTerms) throw exampleError("PROFILE_NOT_ADMITTED", "An unambiguous admitted pool-bound V4 config6/V2 profile with its exact schema and frozen terms is required", { data: bound });
|
|
198
|
-
selected.v4 = bound[0];
|
|
206
|
+
selected.v4 = selectExampleFixedV4Profile({ profiles, fixture, sdk });
|
|
199
207
|
}
|
|
200
208
|
if (scenario.markets.some((row) => row.venue === "abyss")) {
|
|
201
209
|
const canonical = [];
|
package/package.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Hex } from "viem";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Exact config6/V2 constructor creation code from the registered zero-author-royalty Dynamic Fee Hook.
|
|
5
|
+
* Evidence: pool-hook-template-v1/20261011T033141Z-dynamic-fee-zero-royalty/admission.json
|
|
6
|
+
* and contracts/evidence/verify-zero-royalty-20261011/children/ runtime.json files.
|
|
7
|
+
* PoolHookDeployerV1._initCode strips the first STOP byte from each storage-child runtime,
|
|
8
|
+
* concatenates chunk0 then chunk1, and appends the exact 20-word V2 arguments per market.
|
|
9
|
+
* Creation-code keccak256: 0xd448a4117b78714cc4f96824356c6a90ec666449fde5c57e2b7bbe072f5e4a7a.
|
|
10
|
+
* Creation-code size: 28918 bytes; constructor arguments add 640 bytes.
|
|
11
|
+
*/
|
|
12
|
+
export const dynamicFeePoolHookV1CreationCode: Hex = "0x610260604052348015610010575f5ffd5b506040516170f63803806170f683398101604081905261002f91610c9f565b808061003a81610471565b611afc613fff30161461006057604051632a96f9e160e21b815260040160405180910390fd5b80516001600160a01b039081166080908152602080840151831660a0908152604080860151851660c0526060860151851660e0529285015184166101005284015190921661012052516100b591839101610e24565b60408051808303601f1901815291905280516020909101206101609081526102408201516101809081526101208301516001600160a01b039081166101a05261026084015163ffffffff166101c052908301519183015160189290921b66ffffffff0000001662ffffff909216919091176101e05260a082015160c08301519082169116105f8161014a578260a00151610150565b8260c001515b90505f82610162578360c00151610168565b8360a001515b6001600160a01b038084166102008190529082166102208190526040805160a081018252928352602083019190915260e087015162ffffff169082015261010086015160020b60608201523060808201529091506101c78160a0902090565b6101405280515f80546001600160a01b03199081166001600160a01b03938416178255602080850151600180546040808901516060808b0151958a166001600160b81b031990941693909317600160a01b62ffffff928316021762ffffff60b81b1916600160b81b91909516029390931782556080808901516002805490971690891617909555825161012081018452958652938b015186169285019290925260c08a0151909416938301939093526101a088015191929083019160ff169081111561029557610295610fc9565b60018111156102a6576102a6610fc9565b815261014087015162ffffff166020808301919091526101c088015160ff166040808401919091526101e08901516001600160a01b039081166060808601919091526102008b0151151560808601526102208b015160a0909501949094528451600380549183166001600160a01b031992831617815593860151600480549184169183169190911790559185015160058054919092169281168317825593850151929390916001600160a81b031990911617600160a01b83600181111561036f5761036f610fc9565b0217905550608082015160028201805460a08086015160ff16600160c01b0260ff60c01b1962ffffff909516600160a81b029490941663ffffffff60a81b199092169190911792909217905560c08084015160038401805460e08701511515600160a01b026001600160a81b03199091166001600160a01b03938416171790556101009094015160049093019290925588015190880151908216911610610240525050506102208301515f925082915061042890610b1e565b6016805461ffff909216600160e01b0261ffff60e01b1962ffffff909416600160c81b029390931664ffffffffff60c81b19909216919091179190911790555061103a92505050565b80516001600160a01b03163b1580610495575060208101516001600160a01b03163b155b806104ac575060408101516001600160a01b03163b155b806104c3575060608101516001600160a01b03163b155b806104da575060808101516001600160a01b03163b155b806104f1575060c08101516001600160a01b03163b155b80610507575060a08101516001600160a01b0316155b8061052b57508060c001516001600160a01b03168160a001516001600160a01b0316145b80610542575060a08101516001600160a01b031630145b80610566575080606001516001600160a01b031681602001516001600160a01b0316145b806105895750805f01516001600160a01b031681602001516001600160a01b0316145b806105a0575060208101516001600160a01b031630145b806105b7575060608101516001600160a01b031630145b806105ce575060808101516001600160a01b031630145b806105f15750805f01516001600160a01b031681608001516001600160a01b0316145b80610604575060e081015162ffffff1615155b8061061a5750600160020b81610100015160020b125b806106315750610100810151617fff60029190910b135b8061065757506401000276a36001600160a01b03168161012001516001600160a01b0316105b8061068d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03168161012001516001600160a01b031610155b806106a95750620f424062ffffff1681610140015162ffffff16115b806106c7575080610140015162ffffff1681610160015162ffffff16115b806106dd5750600160ff16816101a0015160ff16115b8061071457506101c081015160ff161580159061071457506004816101c0015160ff1610806107145750600a816101c0015160ff16115b8061073d57506101c081015160ff161580159061073d57506101e08101516001600160a01b0316155b8061075557506101e08101516001600160a01b031630145b806107795750805f01516001600160a01b0316816101e001516001600160a01b0316145b8061079e575080608001516001600160a01b0316816101e001516001600160a01b0316145b806107ac5750610240810151155b806107c0575061026081015163ffffffff16155b806107d65750602081610260015163ffffffff16115b156107f45760405163c52a9bd360e01b815260040160405180910390fd5b5f816020015190505f8260800151905082606001516001600160a01b0316826001600160a01b031663f2f4eb266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108729190610fdd565b6001600160a01b03161415806108fc5750825f01516001600160a01b0316826001600160a01b031663dc4c90d36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f09190610fdd565b6001600160a01b031614155b8061097c575082604001516001600160a01b0316826001600160a01b031663c7f7fb906040518163ffffffff1660e01b8152600401602060405180830381865afa15801561094c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109709190610fdd565b6001600160a01b031614155b806109fc575082608001516001600160a01b0316826001600160a01b031663d7b96d4e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f09190610fdd565b6001600160a01b031614155b80610a7c575082602001516001600160a01b0316816001600160a01b03166316eebd1e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a709190610fdd565b6001600160a01b031614155b80610afb5750825f01516001600160a01b0316816001600160a01b031663dc4c90d36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610acb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aef9190610fdd565b6001600160a01b031614155b15610b195760405163c52a9bd360e01b815260040160405180910390fd5b505050565b5f5f60c0516001600160a01b031663deee4135846040518263ffffffff1660e01b8152600401610b5091815260200190565b6040805180830381865afa158015610b6a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8e9190610fff565b909250905062ffffff82161580610bac5750620d89e862ffffff8316115b80610bbb575060028161ffff16105b80610bcb575061100061ffff8216115b15610be95760405163c52a9bd360e01b815260040160405180910390fd5b915091565b60405161028081016001600160401b0381118282101715610c1d57634e487b7160e01b5f52604160045260245ffd5b60405290565b6001600160a01b0381168114610c37575f5ffd5b50565b8051610c4581610c23565b919050565b805162ffffff81168114610c45575f5ffd5b8051600281900b8114610c45575f5ffd5b805163ffffffff81168114610c45575f5ffd5b805160ff81168114610c45575f5ffd5b80518015158114610c45575f5ffd5b5f610280828403128015610cb1575f5ffd5b50610cba610bee565b610cc383610c3a565b8152610cd160208401610c3a565b6020820152610ce260408401610c3a565b6040820152610cf360608401610c3a565b6060820152610d0460808401610c3a565b6080820152610d1560a08401610c3a565b60a0820152610d2660c08401610c3a565b60c0820152610d3760e08401610c4a565b60e0820152610d496101008401610c5c565b610100820152610d5c6101208401610c3a565b610120820152610d6f6101408401610c4a565b610140820152610d826101608401610c4a565b610160820152610d956101808401610c6d565b610180820152610da86101a08401610c80565b6101a0820152610dbb6101c08401610c80565b6101c0820152610dce6101e08401610c3a565b6101e0820152610de16102008401610c90565b61020082015261022083810151908201526102408084015190820152610e0a6102608401610c6d565b6102608201529392505050565b6001600160a01b03169052565b5f61028082019050610e37828451610e17565b6020830151610e496020840182610e17565b506040830151610e5c6040840182610e17565b506060830151610e6f6060840182610e17565b506080830151610e826080840182610e17565b5060a0830151610e9560a0840182610e17565b5060c0830151610ea860c0840182610e17565b5060e0830151610ebf60e084018262ffffff169052565b50610100830151610ed661010084018260020b9052565b50610120830151610eeb610120840182610e17565b50610140830151610f0461014084018262ffffff169052565b50610160830151610f1d61016084018262ffffff169052565b50610180830151610f3761018084018263ffffffff169052565b506101a0830151610f4e6101a084018260ff169052565b506101c0830151610f656101c084018260ff169052565b506101e0830151610f7a6101e0840182610e17565b50610200830151610f9061020084018215159052565b50610220830151610220830152610240830151610240830152610260830151610fc261026084018263ffffffff169052565b5092915050565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215610fed575f5ffd5b8151610ff881610c23565b9392505050565b5f5f60408385031215611010575f5ffd5b61101983610c4a565b9150602083015161ffff8116811461102f575f5ffd5b809150509250929050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051615deb61130b5f395f818161302901526136d001525f81816122570152818161235d015261379e01525f818161221601528181612322015261377d01525f818161047f0152818161059c01526134a801525f818161055a01526138dd01525f81816104cb015261136201525f6106fb01525f6103f101525f81816103560152818161096601528181610d69015281816110e8015281816113d1015281816115ed015281816116ef01528181611a1a01528181611e4b01528181611f8001528181612120015281816122f70152818161282d015281816129ae01528181612ce20152818161342a015281816134d70152818161386a015281816138a5015261443701525f818161088a01528181612e9f01528181613b1f015261451701525f818161053301528181610d3101528181610fc10152818161113601528181611fcc01528181612037015281816120a1015281816122d101528181612853015281816128f70152818161298b015261375c01525f818161082f01528181612eee01528181613b6e015261446f01525f818161066e01526111c001525f81816102d0015281816108f401528181610c650152818161132501528181612f380152818161395101526144f401525f818161072b01528181610adb01528181610b7101528181610ec2015281816110c7015281816112940152818161145b015281816115cc0152818161165f0152818161190a01528181611b7101528181611d8801528181612145015281816121b9015281816122b001528181612b1601528181612ba501528181612c22015281816134510152818161350f0152818161373b01528181613d3b015281816145d30152818161478f0152818161481e0152818161489b01528181614963015281816149ae0152614a1b0152615deb5ff3fe608060405234801561000f575f5ffd5b5060043610610239575f3560e01c80630268e2931461023d5780630581555f146102525780630885f7321461026c57806321d0ee701461028c578063259982e5146102b85780632b20e397146102cb578063359b4f301461030a5780633e451d6a1461032b57806342ea83e01461033e57806347f8496c1461035157806350fb3a3a146103785780635524d5481461038b578063575e24b4146103ae5780635955d09a146103ec57806360f89f2e14610413578063654f631c146104265780636fe7e6eb14610457578063747a68cd1461046a5780637dbeb94e1461047d578063847211a6146104b35780638bc801c1146104c657806391dd7346146104ed578063921b0bed1461050d5780639759164a1461052e5780639e5fe06214610555578063a3f4bac714610591578063a86911141461059a578063aae49d70146105c3578063ac4e4054146105cd578063ac5555aa146105d6578063b47b2fb1146105e9578063b6a8b0fa1461061f578063c5c51dca14610632578063c5fbb29814610647578063c67046af1461065a578063c7f7fb9014610669578063ca266dfe14610690578063ce1b8e4f146106f6578063d2be66251461071d578063dc4c90d314610726578063dd71cea81461074d578063e1b4af691461079a578063e2e65ec1146107ad578063f11457c7146107c0578063f2f4eb261461082a578063f399150c14610851578063f9bc70e714610872578063fc0c546a14610885578063fd5b6d5b146108ac575b5f5ffd5b61025061024b36600461515e565b6108bf565b005b5f5b60405161ffff90911681526020015b60405180910390f35b61027f61027a366004615178565b6109ba565b60405161026391906151d9565b61029f61029a3660046152d4565b610acf565b6040516001600160e01b03199091168152602001610263565b61029f6102c63660046152d4565b610b65565b6102f27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610263565b61031d610318366004615354565b610c02565b604051908152602001610263565b61031d610339366004615382565b610c1f565b61025061034c36600461539d565b610c30565b61031d7f000000000000000000000000000000000000000000000000000000000000000081565b6102506103863660046153eb565b610dc4565b61039e610399366004615178565b610e9f565b6040519015158152602001610263565b6103c16103bc36600461541e565b610eb4565b604080516001600160e01b03199094168452602084019290925262ffffff1690820152606001610263565b61031d7f000000000000000000000000000000000000000000000000000000000000000081565b610250610421366004615477565b6110b8565b610439610434366004615178565b61119e565b6040805162ffffff909316835261ffff909116602083015201610263565b61029f6104653660046154cf565b611288565b61031d610478366004615382565b611428565b7f00000000000000000000000000000000000000000000000000000000000000005b60405162ffffff9091168152602001610263565b61031d6104c1366004615178565b61143c565b6102f27f000000000000000000000000000000000000000000000000000000000000000081565b6105006104fb366004615526565b61144e565b6040516102639190615564565b61052061051b366004615599565b611573565b604051610263929190615611565b6102f27f000000000000000000000000000000000000000000000000000000000000000081565b61057c7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610263565b6102f2613fff81565b7f000000000000000000000000000000000000000000000000000000000000000060181c61057c565b61049f620f424081565b6102f2611afc81565b61039e6105e4366004615178565b611638565b6105fc6105f736600461569d565b611652565b604080516001600160e01b03199093168352600f9190910b602083015201610263565b61029f61062d36600461571d565b6118fe565b61063a6119b0565b6040516102639190615776565b61031d610655366004615178565b611a5b565b600160405161026391906157b8565b6102f27f000000000000000000000000000000000000000000000000000000000000000081565b6106a361069e366004615178565b611a7d565b604051610263919081516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015160020b90830152608092830151169181019190915260a00190565b61031d7f000000000000000000000000000000000000000000000000000000000000000081565b61025461100081565b6102f27f000000000000000000000000000000000000000000000000000000000000000081565b61076061075b3660046157cb565b611b07565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091169183019190915215156060820152608001610263565b61029f6107a836600461571d565b611b65565b61031d6107bb366004615354565b611c17565b6107d36107ce366004615178565b611c35565b6040805161ffff998a168152978916602089015295881695870195909552600293840b60608701526001600160401b039283166080870152911660a0850152900b60c083015290911660e082015261010001610263565b6102f27f000000000000000000000000000000000000000000000000000000000000000081565b61086461085f36600461515e565b611caa565b6040516102639291906157eb565b61049f6108803660046157f9565b611eb4565b6102f27f000000000000000000000000000000000000000000000000000000000000000081565b61031d6108ba366004615354565b611f21565b3068929eee149b4bd2126854036108dd5763ab143c065f526004601cfd5b3068929eee149b4bd2126855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610931576040516282b42960e81b815260040160405180910390fd5b61093a81611f3f565b6013541561095b576040516304c7cf6760e51b815260040160405180910390fd5b4260138190556040517f0000000000000000000000000000000000000000000000000000000000000000907ff1bac50d2c6f6c83cb8ff6fac488b03adc5fb0cc9fae30db2077588d5d9e5fbd905f90a33868929eee149b4bd212685550565b60408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152610a0b82611f7e565b6040805161012081018252600380546001600160a01b039081168352600454811660208401526005549081169383019390935290916060830190600160a01b900460ff166001811115610a6057610a6061519c565b6001811115610a7157610a7161519c565b8152600282015462ffffff600160a81b820416602083015260ff600160c01b9091048116604083015260038301546001600160a01b0381166060840152600160a01b9004161515608082015260049091015460a09091015292915050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b18576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610b365763ab143c065f526004601cfd5b610b3f85611f3f565b610b498685611fbd565b610b52846120f4565b5063021d0ee760e41b5b95945050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bae576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610bcc5763ab143c065f526004601cfd5b610bd585611f3f565b610bdf8685611fbd565b610be76121e8565b610bf0846120f4565b5063259982e560e01b95945050505050565b5f610c0c83611f7e565b610c1582612213565b5490505b92915050565b5f610c2982612213565b5492915050565b3068929eee149b4bd212685403610c4e5763ab143c065f526004601cfd5b3068929eee149b4bd2126855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ca2576040516282b42960e81b815260040160405180910390fd5b610cc3610cbe610cb736859003850185615867565b60a0902090565b611f7e565b60125460ff1615610ce757604051630ea075bf60e21b815260040160405180910390fd5b610cf0816122ae565b610cf9816125b7565b610d066020820182615382565b600380546001600160a01b0319166001600160a01b039283161790556012805460ff191660011790557f000000000000000000000000000000000000000000000000000000000000000016610d5e6020830183615382565b6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007ffafdbdd88ac30f0aa936e576be61816ea751908540523fa81b80c4a406ad7bec60405160405180910390a43868929eee149b4bd21268555050565b3068929eee149b4bd212685403610de25763ab143c065f526004601cfd5b610deb82611f7e565b6016805461ffff600160e01b90910481169083161115610e15578054600160e01b900461ffff1691505b8054600160201b900461ffff165f610e2f60178386612619565b835461ffff60201b1916600160201b61ffff838116918202929092178655919250831614610e98576040805161ffff80851682528316602082015286917f04f592d3848fffa22f73de92a2fd8da837e6d597f468af77c6fc619b478362ae910160405180910390a25b5050505050565b5f610ea982611f7e565b505060125460ff1690565b5f8080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610eff576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610f1d5763ab143c065f526004601cfd5b60155460ff1615610f415760405163558a1e0360e11b815260040160405180910390fd5b610f4a87611f3f565b610f526121e8565b60035f610f5f8a896126ac565b90505f610f6c8a8a6126e4565b90505f62ffffff831615801590610f8a5750610f8a828c8c87612722565b15610fa857610fa5610f9f8b602001356127a6565b846127e1565b90505b6040516364b3357d60e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c9666afa90610ffa908f908f9087906004016159c8565b602060405180830381865afa158015611015573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103991906159f3565b90506110758c61104c60208e018e615a0a565b611056575f611058565b825b61106560208f018f615a0a565b61106f578361281f565b5f61281f565b81156110975761109783838760020160189054906101000a900460ff16612a0c565b506315d7892d60e21b965060801b94505f9350505050955095509592505050565b6110c183611f3f565b5f61110c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612d51565b5050600354919250506001600160a01b0384811691161415806111615750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b8061117357506001600160a01b038116155b156111905760405162820f3560e61b815260040160405180910390fd5b611198612e03565b50505050565b60405163deee413560e01b8152600481018290525f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063deee4135906024016040805180830381865afa158015611204573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112289190615a23565b909250905062ffffff821615806112465750620d89e862ffffff8316115b80611255575060028161ffff16105b80611265575061100061ffff8216115b156112835760405163c52a9bd360e01b815260040160405180910390fd5b915091565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112d1576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036112ef5763ab143c065f526004601cfd5b611304610cbe610cb736879003870187615867565b60125460ff16158061131d5750601254610100900460ff165b8061135a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8061139757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156113b45760405162820f3560e61b815260040160405180910390fd5b6113bd82612fe8565b6012805461ff0019166101001790556040517f0000000000000000000000000000000000000000000000000000000000000000907febcc9ffea17e08841d7588f2ecd87720e1cfb444bb3b5e662c4a5005c3c94ab2905f90a250636fe7e6eb60e01b5b949350505050565b5f61143282612213565b6003015492915050565b5f61144682611f7e565b505060135490565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611498576040516282b42960e81b815260040160405180910390fd5b60145415806114c0575060145483836040516114b5929190615a50565b604051809103902014155b156114de5760405163f7a632f560e01b815260040160405180910390fd5b5f60148190556114f083850185615867565b9050611500610cbe8260a0902090565b601254610100900460ff166115275760405162820f3560e61b815260040160405180910390fd5b5f611534825f01516130f6565b90505f61154483602001516130f6565b905081816040516020016115599291906157eb565b604051602081830303815290604052935050505092915050565b60608061157f85611f7e565b6016805462010000900461ffff165f036115ac576040516329d9e10560e01b815260040160405180910390fd5b805461162b90429087908790600160301b810460020b9061ffff166116117f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061318f565b875460179695949392919062010000900461ffff16613212565b9250925050935093915050565b5f61164282611f7e565b5050601254610100900460ff1690565b5f80336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461169c576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036116ba5763ab143c065f526004601cfd5b60155460ff16156116de5760405163558a1e0360e11b815260040160405180910390fd5b6116e787611f3f565b5f61171560107f00000000000000000000000000000000000000000000000000000000000000008b8a61336d565b9050611722885f5f61281f565b60035f61172f8a8a6126e4565b90505f61173f60208c018c615382565b6001600160a01b0316826001600160a01b0316146117695761176460208c018c615382565b611779565b61177960408c0160208d01615382565b905062ffffff8416158015906117965750611796828c8c86612722565b1561182f575f6117b26117ac8c602001356127a6565b866127e1565b9050801561182d575f6117c860208e018e615382565b6001600160a01b0316846001600160a01b0316146117ef576117ea8b600f0b90565b6117f9565b6117f98b60801d90565b90506118098260208e0135615a73565b81600f0b1461182b5760405163161b48a960e21b815260040160405180910390fd5b505b505b62ffffff8416158061184a5750611848818c8c86612722565b155b15611866575063b47b2fb160e01b94505f93506118f392505050565b5f61187460208d018d615382565b6001600160a01b0316826001600160a01b03161461189b576118968a600f0b90565b6118a5565b6118a58a60801d90565b90505f6118bd6118b783600f0b6127a6565b876127e1565b905080156118e1576118e183828760020160189054906101000a900460ff16612a0c565b63b47b2fb160e01b9750955050505050505b965096945050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611947576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036119655763ab143c065f526004601cfd5b60155460ff16156119895760405163558a1e0360e11b815260040160405180910390fd5b61199286611f3f565b61199d86868661281f565b50635b54587d60e11b9695505050505050565b60125460609060ff166119c3575f6119c6565b60015b60ff166001600160401b038111156119e0576119e0615813565b604051908082528060200260200182016040528015611a09578160200160208202803683370190505b5060125490915060ff1615611a58577f0000000000000000000000000000000000000000000000000000000000000000815f81518110611a4b57611a4b615a9a565b6020026020010181815250505b90565b5f611a6582611f7e565b601654600160881b90046001600160401b0316610c19565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152611ab082611f7e565b50506040805160a0810182525f546001600160a01b039081168252600154808216602084015262ffffff600160a01b82041693830193909352600160b81b909204600290810b606083015254909116608082015290565b5f5f5f5f611b1486611f7e565b5f60178661ffff8110611b2957611b29615a9a565b015463ffffffff811698600160201b820460060b9850600160581b82046001600160a01b03169750600160f81b90910460ff1695509350505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611bae576040516282b42960e81b815260040160405180910390fd5b60155460ff1615611bd25760405163558a1e0360e11b815260040160405180910390fd5b3068929eee149b4bd212685403611bf05763ab143c065f526004601cfd5b611bf986611f3f565b611c04865f5f61281f565b5063e1b4af6960e01b9695505050505050565b5f611c2183611f7e565b611c2a82612213565b600101549392505050565b5f5f5f5f5f5f5f5f611c4689611f7e565b505060165461ffff8082169962010000830482169950600160201b830482169850600160301b8304600290810b98506001600160401b03600160481b850481169850600160881b8504169650600160c81b8404900b9450600160e01b909204169150565b5f5f3068929eee149b4bd212685403611cca5763ab143c065f526004601cfd5b3068929eee149b4bd212685560155460ff1615611cfa5760405163558a1e0360e11b815260040160405180910390fd5b611d0383611f3f565b6003546001600160a01b03163314611d2d576040516282b42960e81b815260040160405180910390fd5b600854151580611d3e5750600c5415155b15611e3f575f83604051602001611d559190615aae565b60408051601f1981840301815290829052805160208201206014556348c8949160e01b825291505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906348c8949190611dbd908590600401615564565b5f604051808303815f875af1158015611dd8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611dff9190810190615abc565b60145490915015611e235760405163f7a632f560e01b815260040160405180910390fd5b80806020019051810190611e379190615b4e565b909450925050505b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007f4a93be8d0a356d70b54fdf016f78a2ed8b8a3c420952848eb4f4b2c4546405b68484604051611e9b9291906157eb565b60405180910390a33868929eee149b4bd2126855915091565b5f3068929eee149b4bd212685403611ed35763ab143c065f526004601cfd5b601254610100900460ff16611efa5760405162820f3560e61b815260040160405180910390fd5b611f02612e03565b5f611f0c836133db565b509050611f18816135bf565b9150505b919050565b5f611f2b83611f7e565b611f3482612213565b600201549392505050565b611f54610cbe610cb736849003840184615867565b601254610100900460ff16611f7b5760405162820f3560e61b815260040160405180910390fd5b50565b7f00000000000000000000000000000000000000000000000000000000000000008114611f7b5760405162820f3560e61b815260040160405180910390fd5b60155460ff16801561200e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158061200e5750604081013515155b1561202c5760405163558a1e0360e11b815260040160405180910390fd5b6013545f0361208b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461208757604051637cd5a0ad60e01b815260040160405180910390fd5b5050565b600654600160a01b900460ff1680156120d657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561208757604051630af9fb3360e21b815260040160405180910390fd5b604081013515806121165750601654600160481b90046001600160401b031643145b1561211e5750565b7f00000000000000000000000000000000000000000000000000000000000000005f61216a7f000000000000000000000000000000000000000000000000000000000000000083612d51565b5090925061217e9150506020840184615b70565b60020b8160020b12806121a6575061219c6040840160208501615b70565b60020b8160020b12155b156121b057505050565b6121e3816121de7f00000000000000000000000000000000000000000000000000000000000000008561318f565b61365a565b505050565b601554610100900460ff16156121fa57565b612202612e03565b6015805461ff001916610100179055565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361225557506008919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036122965750600c919050565b60405162820f3560e61b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f61231b837f0000000000000000000000000000000000000000000000000000000000000000612d51565b50505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b5f148061238057506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b155b8061239357506001600160a01b03811615155b806123bf57506001600160a01b0382166123b36040860160208701615382565b6001600160a01b031614155b806123ed57506005546001600160a01b03166123e16060860160408701615382565b6001600160a01b031614155b806124355750600554600160a01b900460ff1660018111156124115761241161519c565b6124216080860160608701615b89565b60018111156124325761243261519c565b14155b806124625750600554600160a81b900462ffffff1661245a60a0860160808701615ba7565b62ffffff1614155b8061248b5750600554600160c01b900460ff1661248560c0860160a08701615bc2565b60ff1614155b806124b957506006546001600160a01b03166124ad60e0860160c08701615382565b6001600160a01b031614155b806124e45750600654600160a01b900460ff1615156124df610100860160e08701615a0a565b151514155b806124f6575060075461010085013514155b8061251557506125096020850185615382565b6001600160a01b03163b155b8061253d57506001600160a01b0382166125326020860186615382565b6001600160a01b0316145b8061255c5750306125516020860186615382565b6001600160a01b0316145b8061258457506001600160a01b0383166125796020860186615382565b6001600160a01b0316145b156125a25760405163c52a9bd360e01b815260040160405180910390fd5b6111986125b26020860186615382565b613739565b5f5f6125c783610100013561119e565b6016549193509150600283810b600160c81b909204900b1415806125fb575060165461ffff828116600160e01b9092041614155b156121e35760405163c52a9bd360e01b815260040160405180910390fd5b5f8261ffff165f0361263e576040516329d9e10560e01b815260040160405180910390fd5b8261ffff168261ffff16116126545750816126a5565b825b8261ffff168161ffff1610156126a0576001858261ffff1661ffff811061267f5761267f615a9a565b01805463ffffffff191663ffffffff92909216919091179055600101612656565b508190505b9392505050565b5f5f5f6126b8846133db565b604082015191935091506126cf6010848888613bf8565b93506126db8282613c76565b50505092915050565b5f6126f26020830183615a0a565b15155f60208401351214612715576127106040840160208501615382565b6126a5565b6126a56020840184615382565b5f8060016002840154600160a01b900460ff1660018111156127465761274661519c565b1461277e576127586020850185615a0a565b6127715761276c6040860160208701615382565b61278d565b61276c6020860186615382565b60028301546001600160a01b03165b6001600160a01b03878116911614915050949350505050565b5f600160ff1b82036127cb57604051637e2df70960e11b815260040160405180910390fd5b5f82126127d85781610c19565b610c1982615be2565b5f6127f5838362ffffff16620f4240613c99565b905060016001607f1b03811115610c1957604051637e2df70960e11b815260040160405180910390fd5b60405162e568cf60e71b81527f000000000000000000000000000000000000000000000000000000000000000060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906372b4678090602401602060405180830381865afa1580156128a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128c491906159f3565b5f036128cf57505050565b6015805460ff191660011790556040516381f8a9d160e01b81525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906381f8a9d19061293090889088908890600401615bfc565b60408051808303815f875af115801561294b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061296f9190615b4e565b6015805460ff1916905560405191935091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907f0000000000000000000000000000000000000000000000000000000000000000907fa30ca6140dfb2cac1c1021c5303d8dc7de0cd4db47221fb3ad068fac7ef8185e906129fd90869086906157eb565b60405180910390a35050505050565b3068929eee149b4bd212685403612a2a5763ab143c065f526004601cfd5b3068929eee149b4bd2126855825f612a4182612213565b90505f8160020154825f0154612a579190615c1b565b9050612a6a8160016001607f1b03615c1b565b851115612a7c57612a7c868383613d27565b5f60ff851615612aaf576064612a9560ff871688615c42565b612aa090607d615c55565b612aaa9190615c42565b612ab1565b5f5b905085835f015f828254612ac59190615c6c565b9250508190555080836001015f828254612adf9190615c6c565b9250508190555085836003015f828254612af99190615c6c565b9091555050604051627eeac760e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90612b4c9030908990600401615c7f565b602060405180830381865afa158015612b67573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b8b91906159f3565b604051630ab714fb60e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063156e29f690612bde90309089908c90600401615c99565b5f604051808303815f87803b158015612bf5575f5ffd5b505af1158015612c07573d5f5f3e3d5ffd5b5050604051627eeac760e11b81525f92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062fdd58e90612c599030908a90600401615c7f565b602060405180830381865afa158015612c74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c9891906159f3565b905081811080612caa57508782820314155b80612cb85750846003015481105b15612cd65760405163104eed1d60e31b815260040160405180910390fd5b856001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007f2616e25de5abcc9e6a698b140fb6c92f55ace21b7a57f76172f195dbbf693af68a86604051612d329291906157eb565b60405180910390a35050505050503868929eee149b4bd2126855505050565b5f5f5f5f5f612d5f86613dcb565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015612da7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dcb91906159f3565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b601554610100900460ff1615612e1557565b6003546001600160a01b03165f612e3b612e3683630d96a1bf60e21b613e07565b613e21565b90505f612e5d8263537df88f60e11b6001600160a01b038616602460c0613e33565b9050606081015160a01c815160a01c1715612e76575f5ffd5b60a081015160808201511760101c15612e8d575f5ffd5b60c081016040525f6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612ed3612e368563514526c360e11b613e07565b6001600160a01b0316141580612f2e57506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612f22612e368563056a0fbf60e31b613e07565b6001600160a01b031614155b80612f63575081517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b80612f7757505f612f75836020015190565b145b80612f8b57505f612f89836040015190565b145b80612f9f57505f612f9d836060015190565b145b80612fb857508061ffff16612fb58360a0015190565b14155b80612fca5750608082015160a0830151115b156111985760405163c52a9bd360e01b815260040160405180910390fd5b6016612ff5601742613e68565b825465ffffffff00001916600160201b61ffff9283160263ffff000019161762010000929091169190910217815561304d827f0000000000000000000000000000000000000000000000000000000000000000613ea8565b8154600160301b600160881b031916600160301b62ffffff9290921691909102600160481b600160881b03191617600160481b436001600160401b039081169190910291909117600160881b600160c81b031916600160881b42929092169190910217808255600290600160e01b900461ffff168111156130d757508054600160e01b900461ffff165b815461ffff8216600160201b0261ffff60201b19909116178255505050565b5f818161310282612213565b80549091505f81900361311957505f949350505050565b613133858384600201548461312e9190615c1b565b613d27565b6001820180545f8085559182905560028401919091556131538183615c1b565b60065490955061316e9085906001600160a01b031683613ebd565b6003546131869085906001600160a01b031687613ebd565b50505050919050565b5f5f61319a83613dcb565b90505f6131a8600383615c6c565b604051631e2eaeaf60e01b8152600481018290529091506001600160a01b03861690631e2eaeaf90602401602060405180830381865afa1580156131ee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5c91906159f3565b6060808261ffff165f03613239576040516329d9e10560e01b815260040160405180910390fd5b866001600160401b0381111561325157613251615813565b60405190808252806020026020018201604052801561327a578160200160208202803683370190505b509150866001600160401b0381111561329557613295615813565b6040519080825280602002602001820160405280156132be578160200160208202803683370190505b5090505f5b8781101561335f576133008b8b8b8b858181106132e2576132e2615a9a565b90506020020160208101906132f79190615cbd565b8a8a8a8a613f4d565b84838151811061331257613312615a9a565b6020026020010184848151811061332b5761332b615a9a565b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508060010190506132c3565b509850989650505050505050565b60018401545f9063ffffffff16801580613392575061338d8585856140f9565b865414155b156133b3576040516001620787ab60e51b0319815260040160405180910390fd5b6133be600182615ce0565b5f87556001909601805463ffffffff191690555093949350505050565b61342760408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290529061010082015290565b5f7f00000000000000000000000000000000000000000000000000000000000000008180806134767f000000000000000000000000000000000000000000000000000000000000000085612d51565b509250925092508062ffffff165f146134a25760405163c52a9bd360e01b815260040160405180910390fd5b8194505f7f000000000000000000000000000000000000000000000000000000000000000090506040518061012001604052807f00000000000000000000000000000000000000000000000000000000000000008152602001856001600160a01b031681526020016135347f00000000000000000000000000000000000000000000000000000000000000008861318f565b6001600160801b0316815260200189602001358152602001895f01602081019061355e9190615a0a565b1515815260055462ffffff600160a81b8204811660208401528416604083015263ffffffff601885901c16606083015260809091019060ff600160a01b9091041660018111156135b0576135b061519c565b81525096505050505050915091565b5f600160ff1b8260600151036135e857604051637e2df70960e11b815260040160405180910390fd5b60a082015160c08301516135fb8461412e565b92508162ffffff168362ffffff16111561362857604051637e2df70960e11b815260040160405180910390fd5b8062ffffff168362ffffff161015613653576040516302cce67760e31b815260040160405180910390fd5b5050919050565b601680546136919060179061ffff808216914291600160301b820460020b918891620100008204811691600160201b90041661418b565b825463ffffffff19166201000061ffff9283160261ffff1916179116178082556136f490600160301b8104600290810b918691600160c81b909104900b7f0000000000000000000000000000000000000000000000000000000000000000614307565b8154600160301b600160881b031916600160301b62ffffff9290921691909102600160481b600160881b03191617600160481b436001600160401b0316021790555050565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f6137d2612e3687630d96a1bf60e21b613e07565b90505f6137e0878585614370565b90506001600160a01b038616613800612e368963dc4c90d360e01b613e07565b6001600160a01b031614158061383b57506001600160a01b03851661382f612e3689636bdcb6a760e11b613e07565b6001600160a01b031614155b80613862575030613856612e3689636620eee760e11b613e07565b6001600160a01b031614155b8061389d57507f000000000000000000000000000000000000000000000000000000000000000061389a88631f06e1a760e11b613e07565b14155b806138d057507f00000000000000000000000000000000000000000000000000000000000000006138cd8861440b565b14155b80613911575063ffffffff7f00000000000000000000000000000000000000000000000000000000000000001661390e88634f2ff03160e11b613e07565b14155b8061394157506001600160a01b038616613935612e368763dc4c90d360e01b613e07565b6001600160a01b031614155b8061399157506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016613985612e3687630b775e8f60e11b613e07565b6001600160a01b031614155b806139ab57505f6139a88662e568cf60e71b61442e565b14155b806139ca57506139ca6139c586630323715f60e11b61442e565b61445f565b806139e557505f6139e286635c0af38360e01b61442e565b14155b80613a0c57505f613a00612e3687630961712f60e01b61442e565b6001600160a01b031614155b80613a15575080155b80613a2857506001600160a01b0382163b155b80613a3b57506001600160a01b03821630145b80613a575750866001600160a01b0316826001600160a01b0316145b80613a735750846001600160a01b0316826001600160a01b0316145b80613a8f5750856001600160a01b0316826001600160a01b0316145b80613aab5750836001600160a01b0316826001600160a01b0316145b80613ac75750826001600160a01b0316826001600160a01b0316145b80613adf57506006546001600160a01b038381169116145b80613af757506006546001600160a01b038881169116145b15613b155760405163c52a9bd360e01b815260040160405180910390fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016613b53612e368463514526c360e11b613e07565b6001600160a01b0316141580613bae57506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016613ba2612e368463056a0fbf60e31b613e07565b6001600160a01b031614155b80613bc85750613bc86139c58363b3f05b9760e01b613e07565b15613be65760405163c52a9bd360e01b815260040160405180910390fd5b613bef8261446d565b50505050505050565b60018401545f9063ffffffff1615613c26576040516001620787ab60e51b0319815260040160405180910390fd5b8351613c31856135bf565b9150613c3e8185856140f9565b8655613c5062ffffff83166001615cfc565b600196909601805463ffffffff191663ffffffff90971696909617909555949350505050565b601654600160481b90046001600160401b0316431461208757612087828261365a565b82820281838583041485151702613d20575f198385098181108201900382848609835f038416828511613cd35763ae47f7025f526004601cfd5b93849004938382119092035f8390038390046001010292030417600260038302811880840282030280840282030280840282030280840282030280840282030280840290910302026126a5565b0492915050565b805f03613d3357505050565b8281613d5f827f000000000000000000000000000000000000000000000000000000000000000061474d565b1015613d7e576040516365169c1d60e01b815260040160405180910390fd5b81836003015f828254613d919190615c1b565b90915550613da29050818484614777565b613dad84308461494f565b81836002015f828254613dc09190615c6c565b909155505050505050565b6040515f90613dea908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b5f80613e1884848360046020613e33565b51949350505050565b5f8160a01c15613e2f575f5ffd5b5090565b6040518481526023198301613e49578360048201525b81818483895afa613e5c573d5f823e3d81fd5b813d1015610b5c575f5ffd5b6040805160808101825263ffffffff83168082525f602083018190529282019290925260016060909101819052600160f81b9091178355805b9250929050565b5f81613eb457826126a5565b6126a583615d18565b805f03613ec957505050565b5f613ed4843061474d565b90505f613ee1858561474d565b9050613eee858585614a9d565b5f613ef9863061474d565b90505f613f06878761474d565b905083821180613f1857508482850314155b80613f2257508281105b80613f2f57508483820314155b15613bef57604051631dc418c360e31b815260040160405180910390fd5b5f5f8663ffffffff165f03613ff3575f898661ffff1661ffff8110613f7457613f74615a9a565b60408051608081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a1614613fdf57613fdc818a8988614ae7565b90505b8060200151816040015192509250506140ed565b8688035f806140078c8c858c8c8c8c614b8d565b91509150815f015163ffffffff168363ffffffff16036140375781602001518260400151945094505050506140ed565b805f015163ffffffff168363ffffffff16036140635780602001518160400151945094505050506140ed565b5f825f0151825f01510390505f835f0151850390508063ffffffff168263ffffffff1660060b856020015185602001510360060b816140a4576140a4615c2e565b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816140dc576140dc615c2e565b048560400151019650965050505050505b97509795505050505050565b5f83838360405160200161410f93929190615d38565b6040516020818303038152906040528051906020012090509392505050565b5f8160c0015162ffffff168260a0015162ffffff161480614157575060e082015163ffffffff16155b15614164575060c0015190565b5f5f61416e614d68565b915091506114208460c001518560a001518660e001518585614dd8565b5f5f5f898961ffff1661ffff81106141a5576141a5615a9a565b60408051608081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508916900361420e57888592509250506140ed565b8461ffff168461ffff16118015614236575061422b600186615d5b565b61ffff168961ffff16145b6142405784614242565b835b9150816142508a6001615d75565b61425a9190615d8f565b925061426881898989614ae7565b8a8461ffff1661ffff811061427f5761427f615a9a565b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b02959095166001600160581b0366ffffffffffffff909216600160201b026001600160581b031990931663ffffffff909516949094179190911716919091179190911790555097509795505050505050565b5f5f8560020b6143178685613ea8565b60020b6143249190615db2565b9050600284900b8082131561433b57809150614357565b61434481615be2565b8212156143575761435481615be2565b91505b61436582600289900b615a73565b979650505050505050565b5f80614388856371a9730560e01b8360046020613e33565b80519091506001600160a01b0380861691908516903d906001600160401b038111601f198301821117156143ba575f5ffd5b602081863e8451602080838503030481116001600160401b03821117156143df575f5ffd5b600281036143fe57604060208301873e83602087015114858751141696505b5050505050509392505050565b5f806144238363182148ef60e01b83600460a0613e33565b60a090209392505050565b5f5f613e1884847f000000000000000000000000000000000000000000000000000000000000000060246020613e33565b5f6001821115613e2f575f5ffd5b7f00000000000000000000000000000000000000000000000000000000000000005f6144a68263086fce0d60e11b836004610160613e33565b90505f6005905080604083015111602083015160201c17156144c6575f5ffd5b6101408201606083015b818110156144ee57805160a01c156144e6575f5ffd5b6020016144d0565b505081517f000000000000000000000000000000000000000000000000000000000000000091507f00000000000000000000000000000000000000000000000000000000000000009080158061454957506001604085015114155b8061456757506001600160a01b038316614564856060015190565b14155b8061458557506001600160a01b038316614582856080015190565b14155b806145a357506001600160a01b0382166145a08560a0015190565b14155b806145c357506005546001600160a01b03166145c08560c0015190565b14155b8061460157506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166145fe8560e0015190565b14155b1561461e576040516282b42960e81b815260040160405180910390fd5b5f61462a856020015190565b905061464386636373dff160e11b8460246101c0613e33565b94505f600190505f600590508060a0880151118260808901511117604088015160a01c1715614670575f5ffd5b610120870160c088015b8181101561469857805160a01c15614690575f5ffd5b60200161467a565b50506101a0870161012088015b818110156146c357805160201c156146bb575f5ffd5b6020016146a5565b5050865184925090501415806146de5750600160a086015114155b806146fc57506001600160a01b0383166146f98660c0015190565b14155b8061471a57506001600160a01b0387166147178660e0015190565b14155b80614730575061014085015163ffffffff821610155b15613bef576040516282b42960e81b815260040160405180910390fd5b5f816014526370a0823160601b5f5260208060246010865afa601f3d111660205102905092915050565b604051627eeac760e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e906147c59030908890600401615c7f565b602060405180830381865afa1580156147e0573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061480491906159f3565b604051637a94c56560e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5298aca9061485790309088908790600401615c99565b5f604051808303815f87803b15801561486e575f5ffd5b505af1158015614880573d5f5f3e3d5ffd5b5050604051627eeac760e11b81525f92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062fdd58e906148d29030908990600401615c7f565b602060405180830381865afa1580156148ed573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061491191906159f3565b90508181118061492357508281830314155b806149315750836003015481105b15610e985760405163104eed1d60e31b815260040160405180910390fd5b805f0361495b57505050565b825f614987827f000000000000000000000000000000000000000000000000000000000000000061474d565b90505f614994838661474d565b604051630b0d9c0960e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906149e790899089908990600401615c99565b5f604051808303815f87803b1580156149fe575f5ffd5b505af1158015614a10573d5f5f3e3d5ffd5b505050505f614a3f847f000000000000000000000000000000000000000000000000000000000000000061474d565b90505f614a4c858861474d565b905083821180614a5e57508582850314155b80614a6857508281105b80614a7557508583820314155b15614a9357604051631dc418c360e31b815260040160405180910390fd5b5050505050505050565b816014528060345263a9059cbb60601b5f5260205f604460105f875af18060015f511416614add57803d853b151710614add576390b8ec185f526004601cfd5b505f603452505050565b614aef615122565b5f855f01518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020015f856001600160801b031611614b40576001614b42565b845b6001600160801b031663ffffffff60801b608085901b1681614b6657614b66615c2e565b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b614b95615122565b614b9d615122565b888561ffff1661ffff8110614bb457614bb4615a9a565b60408051608081018252919092015463ffffffff8116808352600160201b820460060b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff16151560608201529250614c1290899089614e87565b15614c4b578663ffffffff16825f015163ffffffff1614614c3f5781614c3a83898988614ae7565b614c42565b81815b915091506140ed565b8883614c58876001615d75565b614c629190615d8f565b61ffff1661ffff8110614c7757614c77615a9a565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614d2057604080516080810182528a5463ffffffff81168252600160201b810460060b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614d2e88835f015189614e87565b614d4b57604051636ffbbccd60e11b815260040160405180910390fd5b614d588989898887614f45565b9150915097509795505050505050565b5f5f60165461ffff8160101c166001811115614dd25761ffff82168060170154826001840383010660170154915063ffffffff828203168015614dce578260201c8260201c0360060b8181059050808660301c60020b0397505063ffffffff8342031695505b5050505b50509091565b5f8462ffffff168662ffffff1610614df1575083610b5c565b5f83131580614e04575063ffffffff8216155b80614e13575063ffffffff8416155b15614e1f575084610b5c565b63ffffffff82811687870362ffffff160290849086168281614e4357614e43615c2e565b04811115614e55578692505050610b5c565b8363ffffffff168663ffffffff16820281614e7257614e72615c2e565b048862ffffff16019250505095945050505050565b5f8363ffffffff168363ffffffff1611158015614eb057508363ffffffff168263ffffffff1611155b15614ecc578163ffffffff168363ffffffff16111590506126a5565b5f8463ffffffff168463ffffffff1611614ef957614ef463ffffffff8516600160201b615c6c565b614f01565b8363ffffffff165b90505f8563ffffffff168463ffffffff1611614f3057614f2b63ffffffff8516600160201b615c6c565b614f38565b8363ffffffff165b9091111595945050505050565b614f4d615122565b614f55615122565b5f83614f62866001615d75565b614f6c9190615d8f565b61ffff1690505f60018561ffff1683614f859190615c6c565b614f8f9190615c1b565b90505b5f6002614f9f8385615c6c565b614fa99190615c42565b905089614fba61ffff881683615dd8565b61ffff8110614fcb57614fcb615a9a565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082018190529095506150375761502f816001615c6c565b925050614f92565b8961ffff8716615048836001615c6c565b6150529190615dd8565b61ffff811061506357615063615a9a565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094505f906150c6908b908b614e87565b90508080156150de57506150de8a8a875f0151614e87565b156150ea575050615116565b80615101576150fa600183615c1b565b925061510f565b61510c826001615c6c565b93505b5050614f92565b50509550959350505050565b604080516080810182525f80825260208201819052918101829052606081019190915290565b5f60a08284031215615158575f5ffd5b50919050565b5f60a0828403121561516e575f5ffd5b6126a58383615148565b5f60208284031215615188575f5ffd5b5035919050565b6001600160a01b03169052565b634e487b7160e01b5f52602160045260245ffd5b60028110611f7b57634e487b7160e01b5f52602160045260245ffd5b6151d5816151b0565b9052565b81516001600160a01b0390811682526020808401519091169082015260408083015161012083019161520d9084018261518f565b50606083015161522060608401826151cc565b506080830151615237608084018262ffffff169052565b5060a083015161524c60a084018260ff169052565b5060c083015161525f60c084018261518f565b5060e083015161527360e084018215159052565b5061010092830151919092015290565b6001600160a01b0381168114611f7b575f5ffd5b5f5f83601f8401126152a7575f5ffd5b5081356001600160401b038111156152bd575f5ffd5b602083019150836020828501011115613ea1575f5ffd5b5f5f5f5f5f8587036101608112156152ea575f5ffd5b86356152f581615283565b95506153048860208901615148565b9450608060bf1982011215615317575f5ffd5b5060c0860192506101408601356001600160401b03811115615337575f5ffd5b61534388828901615297565b969995985093965092949392505050565b5f5f60408385031215615365575f5ffd5b82359150602083013561537781615283565b809150509250929050565b5f60208284031215615392575f5ffd5b81356126a581615283565b5f5f8284036101c08112156153b0575f5ffd5b6153ba8585615148565b9250610120609f19820112156153ce575f5ffd5b5060a0830190509250929050565b61ffff81168114611f7b575f5ffd5b5f5f604083850312156153fc575f5ffd5b823591506020830135615377816153dc565b5f60608284031215615158575f5ffd5b5f5f5f5f5f6101408688031215615433575f5ffd5b853561543e81615283565b945061544d8760208801615148565b935061545c8760c0880161540e565b92506101208601356001600160401b03811115615337575f5ffd5b5f5f5f60e08486031215615489575f5ffd5b6154938585615148565b925060a08401356154a381615283565b915060c08401356154b381615283565b809150509250925092565b8035600281900b8114611f1c575f5ffd5b5f5f5f5f61010085870312156154e3575f5ffd5b84356154ee81615283565b93506154fd8660208701615148565b925060c085013561550d81615283565b915061551b60e086016154be565b905092959194509250565b5f5f60208385031215615537575f5ffd5b82356001600160401b0381111561554c575f5ffd5b61555885828601615297565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f604084860312156155ab575f5ffd5b8335925060208401356001600160401b038111156155c7575f5ffd5b8401601f810186136155d7575f5ffd5b80356001600160401b038111156155ec575f5ffd5b8660208260051b8401011115615600575f5ffd5b939660209190910195509293505050565b604080825283519082018190525f9060208501906060840190835b8181101561564d57835160060b83526020938401939092019160010161562c565b5050838103602080860191909152855180835291810192508501905f5b818110156156915782516001600160a01b031684526020938401939092019160010161566a565b50919695505050505050565b5f5f5f5f5f5f61016087890312156156b3575f5ffd5b86356156be81615283565b95506156cd8860208901615148565b94506156dc8860c0890161540e565b935061012087013592506101408701356001600160401b038111156156ff575f5ffd5b61570b89828a01615297565b979a9699509497509295939492505050565b5f5f5f5f5f5f6101208789031215615733575f5ffd5b863561573e81615283565b955061574d8860208901615148565b945060c0870135935060e087013592506101008701356001600160401b038111156156ff575f5ffd5b602080825282518282018190525f918401906040840190835b818110156157ad57835183526020938401939092019160010161578f565b509095945050505050565b602081016157c5836151b0565b91905290565b5f5f604083850312156157dc575f5ffd5b50508035926020909101359150565b918252602082015260400190565b5f60608284031215615809575f5ffd5b6126a5838361540e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561584f5761584f615813565b604052919050565b62ffffff81168114611f7b575f5ffd5b5f60a0828403128015615878575f5ffd5b5060405160a081016001600160401b038111828210171561589b5761589b615813565b60405282356158a981615283565b815260208301356158b981615283565b602082015260408301356158cc81615857565b60408201526158dd606084016154be565b606082015260808301356158f081615283565b60808201529392505050565b803561590781615283565b6001600160a01b03168252602081013561592081615283565b6001600160a01b03166020830152604081013561593c81615857565b62ffffff166040830152615952606082016154be565b60020b6060830152608081013561596881615283565b6001600160a01b03166080929092019190915250565b80358015158114611f1c575f5ffd5b6159968161597e565b151582526020818101359083015260408101356159b281615283565b6001600160a01b03166040929092019190915250565b61012081016159d782866158fc565b6159e460a083018561598d565b82610100830152949350505050565b5f60208284031215615a03575f5ffd5b5051919050565b5f60208284031215615a1a575f5ffd5b6126a58261597e565b5f5f60408385031215615a34575f5ffd5b8251615a3f81615857565b6020840151909250615377816153dc565b818382375f9101908152919050565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f831280158216821582161715615a9257615a92615a5f565b505092915050565b634e487b7160e01b5f52603260045260245ffd5b60a08101610c1982846158fc565b5f60208284031215615acc575f5ffd5b81516001600160401b03811115615ae1575f5ffd5b8201601f81018413615af1575f5ffd5b80516001600160401b03811115615b0a57615b0a615813565b615b1d601f8201601f1916602001615827565b818152856020838501011115615b31575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f60408385031215615b5f575f5ffd5b505080516020909101519092909150565b5f60208284031215615b80575f5ffd5b6126a5826154be565b5f60208284031215615b99575f5ffd5b8135600281106126a5575f5ffd5b5f60208284031215615bb7575f5ffd5b81356126a581615857565b5f60208284031215615bd2575f5ffd5b813560ff811681146126a5575f5ffd5b5f600160ff1b8201615bf657615bf6615a5f565b505f0390565b60e08101615c0a82866158fc565b60a082019390935260c00152919050565b81810381811115610c1957610c19615a5f565b634e487b7160e01b5f52601260045260245ffd5b5f82615c5057615c50615c2e565b500490565b8082028115828204841417610c1957610c19615a5f565b80820180821115610c1957610c19615a5f565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60208284031215615ccd575f5ffd5b813563ffffffff811681146126a5575f5ffd5b63ffffffff8281168282160390811115610c1957610c19615a5f565b63ffffffff8181168382160190811115610c1957610c19615a5f565b5f8160020b627fffff198103615d3057615d30615a5f565b5f0392915050565b8381526001600160a01b038316602082015260a08101611420604083018461598d565b61ffff8281168282160390811115610c1957610c19615a5f565b61ffff8181168382160190811115610c1957610c19615a5f565b5f61ffff831680615da257615da2615c2e565b8061ffff84160691505092915050565b8181035f831280158383131683831282161715615dd157615dd1615a5f565b5092915050565b5f82615de657615de6615c2e565b50069056";
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Hex } from "viem";
|
|
2
|
+
import type { LaunchEnvelopeV2, AdapterRegistrationV1, ProfileRegistrationV1 } from "../schema.js";
|
|
3
|
+
|
|
4
|
+
// Black Market main 1ca9881: pool-hook-template-v1/20261011T220032Z-hmm-dynamic.
|
|
5
|
+
// Generated by scripts/generate-hmm-presets.mjs from admission bytes and hash-checked live storage children.
|
|
6
|
+
export const hmmDynamicEnvelope = Object.freeze({
|
|
7
|
+
artifactDigest: "0x3b8b7ab8614512ce93d65c6aeb6ed18bb150ef7d74417c7282075ff683f1e35b",
|
|
8
|
+
reviewManifestDigest: "0x8a82a2331225d17a1bf0f167bfaab0bfba5e7fdf7c83455e13f43610fc17feb3",
|
|
9
|
+
configBoundsDigest: "0x72e0b2d542556d472a47f9c38b2c91079c72793af847dee77933f0eca203129d",
|
|
10
|
+
termsDigest: "0x9863cba9dbd05d748983e5833210bb6a67a02dae396cfca3744ea1c35af59910",
|
|
11
|
+
topology: 2,
|
|
12
|
+
configVersion: 6,
|
|
13
|
+
economicVersion: 3,
|
|
14
|
+
capabilities: 123n,
|
|
15
|
+
flags: 0n,
|
|
16
|
+
callbackFlags: 6908,
|
|
17
|
+
callbackMask: 16383,
|
|
18
|
+
protocolTreasury: "0x961981916AB6575C3af3eeCecbf6A3b7Fad7C9e1",
|
|
19
|
+
protocolFeeDenominator: 6,
|
|
20
|
+
beneficiary: "0x7cb44b8693b3C350A2BcD4b681aF85365aa27783",
|
|
21
|
+
maximumDeveloperFeeBps: 0,
|
|
22
|
+
bounds: Object.freeze({
|
|
23
|
+
minimumTickSpacing: 1,
|
|
24
|
+
maximumTickSpacing: 32767,
|
|
25
|
+
maximumPositions: 32,
|
|
26
|
+
maximumOracleCardinality: 4096,
|
|
27
|
+
feeModeFlags: 3,
|
|
28
|
+
}),
|
|
29
|
+
graph: Object.freeze({
|
|
30
|
+
manager: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
|
|
31
|
+
hookRoot: "0x0000000000000000000000000000000000000000",
|
|
32
|
+
oracleFactory: "0xe7feF2BC860B25bbdEB6F6AB96d88bAAa77ddad7",
|
|
33
|
+
locker: "0xAF96E3594942Ba12DC34e5da7fD4A3f61C2721Bc",
|
|
34
|
+
collectorFactory: "0xf86670535e6444735a84025408F47F417d4cAeeA",
|
|
35
|
+
collectorDeployer: "0x4F4305423Ad0D8e9fa7CD77be6Fe2bfc50A4BEbA",
|
|
36
|
+
hookDeployer: "0x7B7E967E4F0db00a397317Ec3d84903D3bc6eF85",
|
|
37
|
+
coreCodeHash: "0x9fb8f46c3b980b9db25dfdb487a69a308a86be145860269b4036a4e74480787b",
|
|
38
|
+
managerCodeHash: "0xbd3881180b547f5fe817545743cfb4343e96b1bc6640dcd70c106b0066e95626",
|
|
39
|
+
hookRuntimeCodeHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
40
|
+
oracleFactoryCodeHash: "0x974fb5c72d91ccb99f1eb4679a5d4432c82bbaa0906b1c2917ec4da3499b7b98",
|
|
41
|
+
lockerCodeHash: "0xd2dc1ff8416e7524d777d937f7071fc91871fe0e85ce674e1b8a23420e44a3fc",
|
|
42
|
+
collectorFactoryCodeHash: "0xc298ea4bb51ed399f84572e9ad2324bf6ada59b5f40c4ddfdd05869abf9a2e25",
|
|
43
|
+
collectorDeployerCodeHash: "0x5761744b5ce04faf6a0a1ffcb3ac837d8e048f4420b0be131dfa289559b18c76",
|
|
44
|
+
hookDeployerCodeHash: "0x540ae006e2bc08cd7a38a18e72fddd29c73d1fab0c39a42e87297e67f335b982",
|
|
45
|
+
hookCreationCodeHash: "0x3b8b7ab8614512ce93d65c6aeb6ed18bb150ef7d74417c7282075ff683f1e35b",
|
|
46
|
+
codeChunk0: "0x81abA522890dae0aBC1623C135F0DbD662378d47",
|
|
47
|
+
codeChunk0Hash: "0xa46f41e8834c1e19b0d2eac0d296e3911c2c9e717159be00720a8cb4cc535b60",
|
|
48
|
+
codeChunk1: "0xf9Aa8888648b5f8C9806c772978F8803645ff44A",
|
|
49
|
+
codeChunk1Hash: "0x6976fbf3fcdb32312abfbc7bdd91706b1d70930d3978821cfd47b8943f656fc2",
|
|
50
|
+
sharedHookSalt: "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
51
|
+
}),
|
|
52
|
+
}) satisfies LaunchEnvelopeV2;
|
|
53
|
+
export const hmmDynamicAdapter = Object.freeze({
|
|
54
|
+
implementation: "0xb2a163646bB3661230f6e6A3c258e809514a748A",
|
|
55
|
+
codeHash: "0x087ffe3f38742a8cb94ea30b18c2c6150278685bf24e78b406ffb1ff77d4f4bc",
|
|
56
|
+
capabilities: 123n,
|
|
57
|
+
configVersion: 6,
|
|
58
|
+
enabled: true,
|
|
59
|
+
}) satisfies AdapterRegistrationV1;
|
|
60
|
+
export const hmmDynamicRegistration = Object.freeze({
|
|
61
|
+
adapterId: "0x7fbf1836bab81414a0820c856b45d769a85a60853e92e4a9554e2eedf047dbcf",
|
|
62
|
+
configSchema: "0x51c5ca14c40012f78425cd1afb1ea77980da3fed0490a00911a8a4ed34792045",
|
|
63
|
+
dependencyDigest: "0x9fc926ed5da5a2132d3eb08c93531cf70b992d600f2a54b319801375d22451f5",
|
|
64
|
+
venue: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
|
|
65
|
+
factory: "0x0000000000000000000000000000000000000000",
|
|
66
|
+
hook: "0x0000000000000000000000000000000000000000",
|
|
67
|
+
capabilities: 123n,
|
|
68
|
+
enabled: true,
|
|
69
|
+
}) satisfies ProfileRegistrationV1;
|
|
70
|
+
// 29434 bytes; keccak256 0x3b8b7ab8614512ce93d65c6aeb6ed18bb150ef7d74417c7282075ff683f1e35b; append 640-byte V2 constructor.
|
|
71
|
+
export const hmmDynamicCreationCode: Hex = "0x610260604052348015610010575f5ffd5b506040516172fa3803806172fa83398101604081905261002f91610c9f565b808061003a81610471565b611afc613fff30161461006057604051632a96f9e160e21b815260040160405180910390fd5b80516001600160a01b039081166080908152602080840151831660a0908152604080860151851660c0526060860151851660e0529285015184166101005284015190921661012052516100b591839101610e24565b60408051808303601f1901815291905280516020909101206101609081526102408201516101809081526101208301516001600160a01b039081166101a05261026084015163ffffffff166101c052908301519183015160189290921b66ffffffff0000001662ffffff909216919091176101e05260a082015160c08301519082169116105f8161014a578260a00151610150565b8260c001515b90505f82610162578360c00151610168565b8360a001515b6001600160a01b038084166102008190529082166102208190526040805160a081018252928352602083019190915260e087015162ffffff169082015261010086015160020b60608201523060808201529091506101c78160a0902090565b6101405280515f80546001600160a01b03199081166001600160a01b03938416178255602080850151600180546040808901516060808b0151958a166001600160b81b031990941693909317600160a01b62ffffff928316021762ffffff60b81b1916600160b81b91909516029390931782556080808901516002805490971690891617909555825161012081018452958652938b015186169285019290925260c08a0151909416938301939093526101a088015191929083019160ff169081111561029557610295610fc9565b60018111156102a6576102a6610fc9565b815261014087015162ffffff166020808301919091526101c088015160ff166040808401919091526101e08901516001600160a01b039081166060808601919091526102008b0151151560808601526102208b015160a0909501949094528451600380549183166001600160a01b031992831617815593860151600480549184169183169190911790559185015160058054919092169281168317825593850151929390916001600160a81b031990911617600160a01b83600181111561036f5761036f610fc9565b0217905550608082015160028201805460a08086015160ff16600160c01b0260ff60c01b1962ffffff909516600160a81b029490941663ffffffff60a81b199092169190911792909217905560c08084015160038401805460e08701511515600160a01b026001600160a81b03199091166001600160a01b03938416171790556101009094015160049093019290925588015190880151908216911610610240525050506102208301515f925082915061042890610b1e565b6016805461ffff909216600160e01b0261ffff60e01b1962ffffff909416600160c81b029390931664ffffffffff60c81b19909216919091179190911790555061103a92505050565b80516001600160a01b03163b1580610495575060208101516001600160a01b03163b155b806104ac575060408101516001600160a01b03163b155b806104c3575060608101516001600160a01b03163b155b806104da575060808101516001600160a01b03163b155b806104f1575060c08101516001600160a01b03163b155b80610507575060a08101516001600160a01b0316155b8061052b57508060c001516001600160a01b03168160a001516001600160a01b0316145b80610542575060a08101516001600160a01b031630145b80610566575080606001516001600160a01b031681602001516001600160a01b0316145b806105895750805f01516001600160a01b031681602001516001600160a01b0316145b806105a0575060208101516001600160a01b031630145b806105b7575060608101516001600160a01b031630145b806105ce575060808101516001600160a01b031630145b806105f15750805f01516001600160a01b031681608001516001600160a01b0316145b80610604575060e081015162ffffff1615155b8061061a5750600160020b81610100015160020b125b806106315750610100810151617fff60029190910b135b8061065757506401000276a36001600160a01b03168161012001516001600160a01b0316105b8061068d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03168161012001516001600160a01b031610155b806106a95750620f424062ffffff1681610140015162ffffff16115b806106c7575080610140015162ffffff1681610160015162ffffff16115b806106dd5750600160ff16816101a0015160ff16115b8061071457506101c081015160ff161580159061071457506004816101c0015160ff1610806107145750600a816101c0015160ff16115b8061073d57506101c081015160ff161580159061073d57506101e08101516001600160a01b0316155b8061075557506101e08101516001600160a01b031630145b806107795750805f01516001600160a01b0316816101e001516001600160a01b0316145b8061079e575080608001516001600160a01b0316816101e001516001600160a01b0316145b806107ac5750610240810151155b806107c0575061026081015163ffffffff16155b806107d65750602081610260015163ffffffff16115b156107f45760405163c52a9bd360e01b815260040160405180910390fd5b5f816020015190505f8260800151905082606001516001600160a01b0316826001600160a01b031663f2f4eb266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108729190610fdd565b6001600160a01b03161415806108fc5750825f01516001600160a01b0316826001600160a01b031663dc4c90d36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f09190610fdd565b6001600160a01b031614155b8061097c575082604001516001600160a01b0316826001600160a01b031663c7f7fb906040518163ffffffff1660e01b8152600401602060405180830381865afa15801561094c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109709190610fdd565b6001600160a01b031614155b806109fc575082608001516001600160a01b0316826001600160a01b031663d7b96d4e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f09190610fdd565b6001600160a01b031614155b80610a7c575082602001516001600160a01b0316816001600160a01b03166316eebd1e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a709190610fdd565b6001600160a01b031614155b80610afb5750825f01516001600160a01b0316816001600160a01b031663dc4c90d36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610acb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aef9190610fdd565b6001600160a01b031614155b15610b195760405163c52a9bd360e01b815260040160405180910390fd5b505050565b5f5f60c0516001600160a01b031663deee4135846040518263ffffffff1660e01b8152600401610b5091815260200190565b6040805180830381865afa158015610b6a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8e9190610fff565b909250905062ffffff82161580610bac5750620d89e862ffffff8316115b80610bbb575060028161ffff16105b80610bcb575061100061ffff8216115b15610be95760405163c52a9bd360e01b815260040160405180910390fd5b915091565b60405161028081016001600160401b0381118282101715610c1d57634e487b7160e01b5f52604160045260245ffd5b60405290565b6001600160a01b0381168114610c37575f5ffd5b50565b8051610c4581610c23565b919050565b805162ffffff81168114610c45575f5ffd5b8051600281900b8114610c45575f5ffd5b805163ffffffff81168114610c45575f5ffd5b805160ff81168114610c45575f5ffd5b80518015158114610c45575f5ffd5b5f610280828403128015610cb1575f5ffd5b50610cba610bee565b610cc383610c3a565b8152610cd160208401610c3a565b6020820152610ce260408401610c3a565b6040820152610cf360608401610c3a565b6060820152610d0460808401610c3a565b6080820152610d1560a08401610c3a565b60a0820152610d2660c08401610c3a565b60c0820152610d3760e08401610c4a565b60e0820152610d496101008401610c5c565b610100820152610d5c6101208401610c3a565b610120820152610d6f6101408401610c4a565b610140820152610d826101608401610c4a565b610160820152610d956101808401610c6d565b610180820152610da86101a08401610c80565b6101a0820152610dbb6101c08401610c80565b6101c0820152610dce6101e08401610c3a565b6101e0820152610de16102008401610c90565b61020082015261022083810151908201526102408084015190820152610e0a6102608401610c6d565b6102608201529392505050565b6001600160a01b03169052565b5f61028082019050610e37828451610e17565b6020830151610e496020840182610e17565b506040830151610e5c6040840182610e17565b506060830151610e6f6060840182610e17565b506080830151610e826080840182610e17565b5060a0830151610e9560a0840182610e17565b5060c0830151610ea860c0840182610e17565b5060e0830151610ebf60e084018262ffffff169052565b50610100830151610ed661010084018260020b9052565b50610120830151610eeb610120840182610e17565b50610140830151610f0461014084018262ffffff169052565b50610160830151610f1d61016084018262ffffff169052565b50610180830151610f3761018084018263ffffffff169052565b506101a0830151610f4e6101a084018260ff169052565b506101c0830151610f656101c084018260ff169052565b506101e0830151610f7a6101e0840182610e17565b50610200830151610f9061020084018215159052565b50610220830151610220830152610240830151610240830152610260830151610fc261026084018263ffffffff169052565b5092915050565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215610fed575f5ffd5b8151610ff881610c23565b9392505050565b5f5f60408385031215611010575f5ffd5b61101983610c4a565b9150602083015161ffff8116811461102f575f5ffd5b809150509250929050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051615fef61130b5f395f8181613dd401526142b901525f81816121ac015281816122b201526135e501525f818161216b0152818161227701526135c401525f8181610494015281816105b101526132c001525f818161056f015261372401525f81816104e0015261137f01525f61071001525f61040601525f818161036b0152818161098301528181610d8601528181611105015281816113ee0152818161160a0152818161170c01528181611a2a01528181611e6301528181611fa20152818161224c01528181612732015281816128b301528181612be701528181613242015281816132ef015281816134bd015281816136b1015281816136ec01526143e901525f818161089f01528181612da40152818161396601526144c901525f818161054801528181610d4e01528181610fde0152818161115301528181611fee01528181612059015281816120c30152818161222601528181612758015281816127fc0152818161289001526135a301525f818161084401528181612df3015281816139b5015261442101525f818161068301526111dd01525f81816102db0152818161090901528181610c820152818161134201528181612e3d0152818161379801526144a601525f818161074001528181610af801528181610b8e01528181610edf015281816110e4015281816112b101528181611478015281816115e90152818161167c0152818161191a01528181611b8101528181611da00152818161220501528181612a1b01528181612aaa01528181612b270152818161326901528181613327015281816134e2015281816135560152818161358201528181613c660152818161458501528181614764015281816147f301528181614870015281816149380152818161498301526149f00152615fef5ff3fe608060405234801561000f575f5ffd5b5060043610610244575f3560e01c80630268e293146102485780630581555f1461025d5780630885f7321461027757806321d0ee7014610297578063259982e5146102c35780632b20e397146102d65780633382743814610315578063359b4f301461031f5780633e451d6a1461034057806342ea83e01461035357806347f8496c1461036657806350fb3a3a1461038d5780635524d548146103a0578063575e24b4146103c35780635955d09a1461040157806360f89f2e14610428578063654f631c1461043b5780636fe7e6eb1461046c578063747a68cd1461047f5780637dbeb94e14610492578063847211a6146104c85780638bc801c1146104db57806391dd734614610502578063921b0bed146105225780639759164a146105435780639e5fe0621461056a578063a3f4bac7146105a6578063a8691114146105af578063aae49d70146105d8578063ac4e4054146105e2578063ac5555aa146105eb578063b47b2fb1146105fe578063b6a8b0fa14610634578063c5c51dca14610647578063c5fbb2981461065c578063c67046af1461066f578063c7f7fb901461067e578063ca266dfe146106a5578063ce1b8e4f1461070b578063d2be662514610732578063dc4c90d31461073b578063dd71cea814610762578063e1b4af69146107af578063e2e65ec1146107c2578063f11457c7146107d5578063f2f4eb261461083f578063f399150c14610866578063f9bc70e714610887578063fc0c546a1461089a578063fd5b6d5b146108c1575b5f5ffd5b61025b610256366004615362565b6108d4565b005b5f5b60405161ffff90911681526020015b60405180910390f35b61028a61028536600461537c565b6109d7565b60405161026e91906153dd565b6102aa6102a53660046154d8565b610aec565b6040516001600160e01b0319909116815260200161026e565b6102aa6102d13660046154d8565b610b82565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161026e565b62010016546102fd565b61033261032d366004615558565b610c1f565b60405190815260200161026e565b61033261034e366004615586565b610c3c565b61025b6103613660046155a1565b610c4d565b6103327f000000000000000000000000000000000000000000000000000000000000000081565b61025b61039b3660046155ef565b610de1565b6103b36103ae36600461537c565b610ebc565b604051901515815260200161026e565b6103d66103d1366004615622565b610ed1565b604080516001600160e01b03199094168452602084019290925262ffffff169082015260600161026e565b6103327f000000000000000000000000000000000000000000000000000000000000000081565b61025b61043636600461567b565b6110d5565b61044e61044936600461537c565b6111bb565b6040805162ffffff909316835261ffff90911660208301520161026e565b6102aa61047a3660046156d3565b6112a5565b61033261048d366004615586565b611445565b7f00000000000000000000000000000000000000000000000000000000000000005b60405162ffffff909116815260200161026e565b6103326104d636600461537c565b611459565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b61051561051036600461572a565b61146b565b60405161026e9190615768565b61053561053036600461579d565b611590565b60405161026e929190615815565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b6105917f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161026e565b6102fd613fff81565b7f000000000000000000000000000000000000000000000000000000000000000060181c610591565b6104b4620f424081565b6102fd611afc81565b6103b36105f936600461537c565b611655565b61061161060c3660046158a1565b61166f565b604080516001600160e01b03199093168352600f9190910b60208301520161026e565b6102aa610642366004615921565b61190e565b61064f6119c0565b60405161026e919061597a565b61033261066a36600461537c565b611a6b565b600160405161026e91906159bc565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b6106b86106b336600461537c565b611a8d565b60405161026e919081516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015160020b90830152608092830151169181019190915260a00190565b6103327f000000000000000000000000000000000000000000000000000000000000000081565b61025f61100081565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b6107756107703660046159cf565b611b17565b6040805163ffffffff909516855260069390930b60208501526001600160a01b03909116918301919091521515606082015260800161026e565b6102aa6107bd366004615921565b611b75565b6103326107d0366004615558565b611c2f565b6107e86107e336600461537c565b611c4d565b6040805161ffff998a168152978916602089015295881695870195909552600293840b60608701526001600160401b039283166080870152911660a0850152900b60c083015290911660e08201526101000161026e565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b610879610874366004615362565b611cc2565b60405161026e9291906159ef565b6104b46108953660046159fd565b611ecc565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b6103326108cf366004615558565b611f39565b3068929eee149b4bd2126854036108f25763ab143c065f526004601cfd5b3068929eee149b4bd2126855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610946576040516282b42960e81b815260040160405180910390fd5b61094f81611f57565b60135415610970576040516304c7cf6760e51b815260040160405180910390fd5b4260135561097c611f96565b60405142907f0000000000000000000000000000000000000000000000000000000000000000907ff1bac50d2c6f6c83cb8ff6fac488b03adc5fb0cc9fae30db2077588d5d9e5fbd905f90a33868929eee149b4bd212685550565b60408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152610a2882611fa0565b6040805161012081018252600380546001600160a01b039081168352600454811660208401526005549081169383019390935290916060830190600160a01b900460ff166001811115610a7d57610a7d6153a0565b6001811115610a8e57610a8e6153a0565b8152600282015462ffffff600160a81b820416602083015260ff600160c01b9091048116604083015260038301546001600160a01b0381166060840152600160a01b9004161515608082015260049091015460a09091015292915050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b35576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610b535763ab143c065f526004601cfd5b610b5c85611f57565b610b668685611fdf565b610b6f84612134565b5063021d0ee760e41b5b95945050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bcb576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610be95763ab143c065f526004601cfd5b610bf285611f57565b610bfc8685611fdf565b610c0461213d565b610c0d84612134565b5063259982e560e01b95945050505050565b5f610c2983611fa0565b610c3282612168565b5490505b92915050565b5f610c4682612168565b5492915050565b3068929eee149b4bd212685403610c6b5763ab143c065f526004601cfd5b3068929eee149b4bd2126855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cbf576040516282b42960e81b815260040160405180910390fd5b610ce0610cdb610cd436859003850185615a6b565b60a0902090565b611fa0565b60125460ff1615610d0457604051630ea075bf60e21b815260040160405180910390fd5b610d0d81612203565b610d168161250c565b610d236020820182615586565b600380546001600160a01b0319166001600160a01b039283161790556012805460ff191660011790557f000000000000000000000000000000000000000000000000000000000000000016610d7b6020830183615586565b6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007ffafdbdd88ac30f0aa936e576be61816ea751908540523fa81b80c4a406ad7bec60405160405180910390a43868929eee149b4bd21268555050565b3068929eee149b4bd212685403610dff5763ab143c065f526004601cfd5b610e0882611fa0565b6016805461ffff600160e01b90910481169083161115610e32578054600160e01b900461ffff1691505b8054600160201b900461ffff165f610e4c6017838661251e565b835461ffff60201b1916600160201b61ffff838116918202929092178655919250831614610eb5576040805161ffff80851682528316602082015286917f04f592d3848fffa22f73de92a2fd8da837e6d597f468af77c6fc619b478362ae910160405180910390a25b5050505050565b5f610ec682611fa0565b505060125460ff1690565b5f8080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f1c576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610f3a5763ab143c065f526004601cfd5b60155460ff1615610f5e5760405163558a1e0360e11b815260040160405180910390fd5b610f6787611f57565b610f6f61213d565b60035f610f7c8a896125b1565b90505f610f898a8a6125e9565b90505f62ffffff831615801590610fa75750610fa7828c8c87612627565b15610fc557610fc2610fbc8b602001356126ab565b846126e6565b90505b6040516364b3357d60e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c9666afa90611017908f908f908790600401615bcc565b602060405180830381865afa158015611032573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110569190615bf7565b90506110928c61106960208e018e615c0e565b611073575f611075565b825b61108260208f018f615c0e565b61108c5783612724565b5f612724565b81156110b4576110b483838760020160189054906101000a900460ff16612911565b506315d7892d60e21b965060801b94505f9350505050955095509592505050565b6110de83611f57565b5f6111297f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612c56565b5050600354919250506001600160a01b03848116911614158061117e5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b8061119057506001600160a01b038116155b156111ad5760405162820f3560e61b815260040160405180910390fd5b6111b5612d08565b50505050565b60405163deee413560e01b8152600481018290525f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063deee4135906024016040805180830381865afa158015611221573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112459190615c27565b909250905062ffffff821615806112635750620d89e862ffffff8316115b80611272575060028161ffff16105b80611282575061100061ffff8216115b156112a05760405163c52a9bd360e01b815260040160405180910390fd5b915091565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112ee576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd21268540361130c5763ab143c065f526004601cfd5b611321610cdb610cd436879003870187615a6b565b60125460ff16158061133a5750601254610100900460ff165b8061137757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b806113b457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156113d15760405162820f3560e61b815260040160405180910390fd5b6113da82612eed565b6012805461ff0019166101001790556040517f0000000000000000000000000000000000000000000000000000000000000000907febcc9ffea17e08841d7588f2ecd87720e1cfb444bb3b5e662c4a5005c3c94ab2905f90a250636fe7e6eb60e01b5b949350505050565b5f61144f82612168565b6003015492915050565b5f61146382611fa0565b505060135490565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114b5576040516282b42960e81b815260040160405180910390fd5b60145415806114dd575060145483836040516114d2929190615c54565b604051809103902014155b156114fb5760405163f7a632f560e01b815260040160405180910390fd5b5f601481905561150d83850185615a6b565b905061151d610cdb8260a0902090565b601254610100900460ff166115445760405162820f3560e61b815260040160405180910390fd5b5f611551825f0151612ef6565b90505f6115618360200151612ef6565b905081816040516020016115769291906159ef565b604051602081830303815290604052935050505092915050565b60608061159c85611fa0565b6016805462010000900461ffff165f036115c9576040516329d9e10560e01b815260040160405180910390fd5b805461164890429087908790600160301b810460020b9061ffff1661162e7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612f8f565b875460179695949392919062010000900461ffff16613012565b9250925050935093915050565b5f61165f82611fa0565b5050601254610100900460ff1690565b5f80336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116b9576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036116d75763ab143c065f526004601cfd5b60155460ff16156116fb5760405163558a1e0360e11b815260040160405180910390fd5b61170487611f57565b5f61173260107f00000000000000000000000000000000000000000000000000000000000000008b8a61316d565b905061173f885f5f612724565b60035f61174c8a8a6125e9565b90505f61175c60208c018c615586565b6001600160a01b0316826001600160a01b0316146117865761178160208c018c615586565b611796565b61179660408c0160208d01615586565b905062ffffff8416158015906117b357506117b3828c8c86612627565b1561184c575f6117cf6117c98c602001356126ab565b866126e6565b9050801561184a575f6117e560208e018e615586565b6001600160a01b0316846001600160a01b03161461180c576118078b600f0b90565b611816565b6118168b60801d90565b90506118268260208e0135615c77565b81600f0b146118485760405163161b48a960e21b815260040160405180910390fd5b505b505b5f62ffffff8516158015906118685750611868828d8d87612627565b156118e9575f61187b60208e018e615586565b6001600160a01b0316836001600160a01b0316146118a25761189d8b600f0b90565b6118ac565b6118ac8b60801d90565b90506118c36118bd82600f0b6126ab565b876126e6565b915081156118e7576118e783838760020160189054906101000a900460ff16612911565b505b6118f48c8c8c6131db565b63b47b2fb160e01b9d909c509a5050505050505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611957576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036119755763ab143c065f526004601cfd5b60155460ff16156119995760405163558a1e0360e11b815260040160405180910390fd5b6119a286611f57565b6119ad868686612724565b50635b54587d60e11b9695505050505050565b60125460609060ff166119d3575f6119d6565b60015b60ff166001600160401b038111156119f0576119f0615a17565b604051908082528060200260200182016040528015611a19578160200160208202803683370190505b5060125490915060ff1615611a68577f0000000000000000000000000000000000000000000000000000000000000000815f81518110611a5b57611a5b615c9e565b6020026020010181815250505b90565b5f611a7582611fa0565b601654600160881b90046001600160401b0316610c36565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152611ac082611fa0565b50506040805160a0810182525f546001600160a01b039081168252600154808216602084015262ffffff600160a01b82041693830193909352600160b81b909204600290810b606083015254909116608082015290565b5f5f5f5f611b2486611fa0565b5f60178661ffff8110611b3957611b39615c9e565b015463ffffffff811698600160201b820460060b9850600160581b82046001600160a01b03169750600160f81b90910460ff1695509350505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611bbe576040516282b42960e81b815260040160405180910390fd5b60155460ff1615611be25760405163558a1e0360e11b815260040160405180910390fd5b3068929eee149b4bd212685403611c005763ab143c065f526004601cfd5b611c0986611f57565b611c14865f5f612724565b611c1c6131eb565b5063e1b4af6960e01b9695505050505050565b5f611c3983611fa0565b611c4282612168565b600101549392505050565b5f5f5f5f5f5f5f5f611c5e89611fa0565b505060165461ffff8082169962010000830482169950600160201b830482169850600160301b8304600290810b98506001600160401b03600160481b850481169850600160881b8504169650600160c81b8404900b9450600160e01b909204169150565b5f5f3068929eee149b4bd212685403611ce25763ab143c065f526004601cfd5b3068929eee149b4bd212685560155460ff1615611d125760405163558a1e0360e11b815260040160405180910390fd5b611d1b83611f57565b6003546001600160a01b03163314611d45576040516282b42960e81b815260040160405180910390fd5b600854151580611d565750600c5415155b15611e57575f83604051602001611d6d9190615cb2565b60408051601f1981840301815290829052805160208201206014556348c8949160e01b825291505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906348c8949190611dd5908590600401615768565b5f604051808303815f875af1158015611df0573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e179190810190615cc0565b60145490915015611e3b5760405163f7a632f560e01b815260040160405180910390fd5b80806020019051810190611e4f9190615d52565b909450925050505b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007f4a93be8d0a356d70b54fdf016f78a2ed8b8a3c420952848eb4f4b2c4546405b68484604051611eb39291906159ef565b60405180910390a33868929eee149b4bd2126855915091565b5f3068929eee149b4bd212685403611eeb5763ab143c065f526004601cfd5b601254610100900460ff16611f125760405162820f3560e61b815260040160405180910390fd5b611f1a612d08565b5f611f24836131f3565b509050611f30816133d7565b9150505b919050565b5f611f4383611fa0565b611f4c82612168565b600201549392505050565b611f6c610cdb610cd436849003840184615a6b565b601254610100900460ff16611f935760405162820f3560e61b815260040160405180910390fd5b50565b611f9e613472565b565b7f00000000000000000000000000000000000000000000000000000000000000008114611f935760405162820f3560e61b815260040160405180910390fd5b60155460ff16801561203057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415806120305750604081013515155b1561204e5760405163558a1e0360e11b815260040160405180910390fd5b6013545f036120ad577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146120a957604051637cd5a0ad60e01b815260040160405180910390fd5b5050565b600654600160a01b900460ff1680156120f857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015612116575060155460ff1680612116575061211482613483565b155b156120a957604051630af9fb3360e21b815260040160405180910390fd5b611f9381613491565b601554610100900460ff161561214f57565b612157612d08565b6015805461ff001916610100179055565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036121aa57506008919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036121eb5750600c919050565b60405162820f3560e61b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f612270837f0000000000000000000000000000000000000000000000000000000000000000612c56565b50505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b5f14806122d557506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b155b806122e857506001600160a01b03811615155b8061231457506001600160a01b0382166123086040860160208701615586565b6001600160a01b031614155b8061234257506005546001600160a01b03166123366060860160408701615586565b6001600160a01b031614155b8061238a5750600554600160a01b900460ff166001811115612366576123666153a0565b6123766080860160608701615d74565b6001811115612387576123876153a0565b14155b806123b75750600554600160a81b900462ffffff166123af60a0860160808701615d92565b62ffffff1614155b806123e05750600554600160c01b900460ff166123da60c0860160a08701615dad565b60ff1614155b8061240e57506006546001600160a01b031661240260e0860160c08701615586565b6001600160a01b031614155b806124395750600654600160a01b900460ff161515612434610100860160e08701615c0e565b151514155b8061244b575060075461010085013514155b8061246a575061245e6020850185615586565b6001600160a01b03163b155b8061249257506001600160a01b0382166124876020860186615586565b6001600160a01b0316145b806124b15750306124a66020860186615586565b6001600160a01b0316145b806124d957506001600160a01b0383166124ce6020860186615586565b6001600160a01b0316145b156124f75760405163c52a9bd360e01b815260040160405180910390fd5b6111b56125076020860186615586565b613580565b61251581613a3f565b611f9381613aa1565b5f8261ffff165f03612543576040516329d9e10560e01b815260040160405180910390fd5b8261ffff168261ffff16116125595750816125aa565b825b8261ffff168161ffff1610156125a5576001858261ffff1661ffff811061258457612584615c9e565b01805463ffffffff191663ffffffff9290921691909117905560010161255b565b508190505b9392505050565b5f5f5f6125bd846131f3565b604082015191935091506125d46010848888613b3c565b93506125e08282613bba565b50505092915050565b5f6125f76020830183615c0e565b15155f6020840135121461261a576126156040840160208501615586565b6125aa565b6125aa6020840184615586565b5f8060016002840154600160a01b900460ff16600181111561264b5761264b6153a0565b146126835761265d6020850185615c0e565b612676576126716040860160208701615586565b612692565b6126716020860186615586565b60028301546001600160a01b03165b6001600160a01b03878116911614915050949350505050565b5f600160ff1b82036126d057604051637e2df70960e11b815260040160405180910390fd5b5f82126126dd5781610c36565b610c3682615dcd565b5f6126fa838362ffffff16620f4240613bc4565b905060016001607f1b03811115610c3657604051637e2df70960e11b815260040160405180910390fd5b60405162e568cf60e71b81527f000000000000000000000000000000000000000000000000000000000000000060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906372b4678090602401602060405180830381865afa1580156127a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127c99190615bf7565b5f036127d457505050565b6015805460ff191660011790556040516381f8a9d160e01b81525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906381f8a9d19061283590889088908890600401615de7565b60408051808303815f875af1158015612850573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128749190615d52565b6015805460ff1916905560405191935091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907f0000000000000000000000000000000000000000000000000000000000000000907fa30ca6140dfb2cac1c1021c5303d8dc7de0cd4db47221fb3ad068fac7ef8185e9061290290869086906159ef565b60405180910390a35050505050565b3068929eee149b4bd21268540361292f5763ab143c065f526004601cfd5b3068929eee149b4bd2126855825f61294682612168565b90505f8160020154825f015461295c9190615e06565b905061296f8160016001607f1b03615e06565b85111561298157612981868383613c52565b5f60ff8516156129b457606461299a60ff871688615e2d565b6129a590607d615e40565b6129af9190615e2d565b6129b6565b5f5b905085835f015f8282546129ca9190615e57565b9250508190555080836001015f8282546129e49190615e57565b9250508190555085836003015f8282546129fe9190615e57565b9091555050604051627eeac760e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90612a519030908990600401615e6a565b602060405180830381865afa158015612a6c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a909190615bf7565b604051630ab714fb60e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063156e29f690612ae390309089908c90600401615e84565b5f604051808303815f87803b158015612afa575f5ffd5b505af1158015612b0c573d5f5f3e3d5ffd5b5050604051627eeac760e11b81525f92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062fdd58e90612b5e9030908a90600401615e6a565b602060405180830381865afa158015612b79573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b9d9190615bf7565b905081811080612baf57508782820314155b80612bbd5750846003015481105b15612bdb5760405163104eed1d60e31b815260040160405180910390fd5b856001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007f2616e25de5abcc9e6a698b140fb6c92f55ace21b7a57f76172f195dbbf693af68a86604051612c379291906159ef565b60405180910390a35050505050503868929eee149b4bd2126855505050565b5f5f5f5f5f612c6486613cf6565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015612cac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cd09190615bf7565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b601554610100900460ff1615612d1a57565b6003546001600160a01b03165f612d40612d3b83630d96a1bf60e21b613d32565b613d4c565b90505f612d628263537df88f60e11b6001600160a01b038616602460c0613d5e565b9050606081015160a01c815160a01c1715612d7b575f5ffd5b60a081015160808201511760101c15612d92575f5ffd5b60c081016040525f6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612dd8612d3b8563514526c360e11b613d32565b6001600160a01b0316141580612e3357506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612e27612d3b8563056a0fbf60e31b613d32565b6001600160a01b031614155b80612e68575081517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b80612e7c57505f612e7a836020015190565b145b80612e9057505f612e8e836040015190565b145b80612ea457505f612ea2836060015190565b145b80612ebd57508061ffff16612eba8360a0015190565b14155b80612ecf5750608082015160a0830151115b156111b55760405163c52a9bd360e01b815260040160405180910390fd5b611f9381613d93565b5f8181612f0282612168565b80549091505f819003612f1957505f949350505050565b612f338583846002015484612f2e9190615e06565b613c52565b6001820180545f808555918290556002840191909155612f538183615e06565b600654909550612f6e9085906001600160a01b031683613ea1565b600354612f869085906001600160a01b031687613ea1565b50505050919050565b5f5f612f9a83613cf6565b90505f612fa8600383615e57565b604051631e2eaeaf60e01b8152600481018290529091506001600160a01b03861690631e2eaeaf90602401602060405180830381865afa158015612fee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b799190615bf7565b6060808261ffff165f03613039576040516329d9e10560e01b815260040160405180910390fd5b866001600160401b0381111561305157613051615a17565b60405190808252806020026020018201604052801561307a578160200160208202803683370190505b509150866001600160401b0381111561309557613095615a17565b6040519080825280602002602001820160405280156130be578160200160208202803683370190505b5090505f5b8781101561315f576131008b8b8b8b858181106130e2576130e2615c9e565b90506020020160208101906130f79190615ea8565b8a8a8a8a613f31565b84838151811061311257613112615c9e565b6020026020010184848151811061312b5761312b615c9e565b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508060010190506130c3565b509850989650505050505050565b60018401545f9063ffffffff16801580613192575061318d8585856140dd565b865414155b156131b3576040516001620787ab60e51b0319815260040160405180910390fd5b6131be600182615ecb565b5f87556001909601805463ffffffff191690555093949350505050565b6131e6838383614112565b505050565b611f9e614131565b61323f60408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290529061010082015290565b5f7f000000000000000000000000000000000000000000000000000000000000000081808061328e7f000000000000000000000000000000000000000000000000000000000000000085612c56565b509250925092508062ffffff165f146132ba5760405163c52a9bd360e01b815260040160405180910390fd5b8194505f7f000000000000000000000000000000000000000000000000000000000000000090506040518061012001604052807f00000000000000000000000000000000000000000000000000000000000000008152602001856001600160a01b0316815260200161334c7f000000000000000000000000000000000000000000000000000000000000000088612f8f565b6001600160801b0316815260200189602001358152602001895f0160208101906133769190615c0e565b1515815260055462ffffff600160a81b8204811660208401528416604083015263ffffffff601885901c16606083015260809091019060ff600160a01b9091041660018111156133c8576133c86153a0565b81525096505050505050915091565b5f600160ff1b82606001510361340057604051637e2df70960e11b815260040160405180910390fd5b60a082015160c083015161341384614142565b92508162ffffff168362ffffff16111561344057604051637e2df70960e11b815260040160405180910390fd5b8062ffffff168362ffffff16101561346b576040516302cce67760e31b815260040160405180910390fd5b5050919050565b611f9e632520a12d60e11b5f6141a3565b5f610c368262010016541490565b604081013515806134b35750601654600160481b90046001600160401b031643145b156134bb5750565b7f00000000000000000000000000000000000000000000000000000000000000005f6135077f000000000000000000000000000000000000000000000000000000000000000083612c56565b5090925061351b9150506020840184615ee7565b60020b8160020b128061354357506135396040840160208501615ee7565b60020b8160020b12155b1561354d57505050565b6131e68161357b7f000000000000000000000000000000000000000000000000000000000000000085612f8f565b614243565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f613619612d3b87630d96a1bf60e21b613d32565b90505f613627878585614322565b90506001600160a01b038616613647612d3b8963dc4c90d360e01b613d32565b6001600160a01b031614158061368257506001600160a01b038516613676612d3b89636bdcb6a760e11b613d32565b6001600160a01b031614155b806136a957503061369d612d3b89636620eee760e11b613d32565b6001600160a01b031614155b806136e457507f00000000000000000000000000000000000000000000000000000000000000006136e188631f06e1a760e11b613d32565b14155b8061371757507f0000000000000000000000000000000000000000000000000000000000000000613714886143bd565b14155b80613758575063ffffffff7f00000000000000000000000000000000000000000000000000000000000000001661375588634f2ff03160e11b613d32565b14155b8061378857506001600160a01b03861661377c612d3b8763dc4c90d360e01b613d32565b6001600160a01b031614155b806137d857506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166137cc612d3b87630b775e8f60e11b613d32565b6001600160a01b031614155b806137f257505f6137ef8662e568cf60e71b6143e0565b14155b80613811575061381161380c86630323715f60e11b6143e0565b614411565b8061382c57505f61382986635c0af38360e01b6143e0565b14155b8061385357505f613847612d3b87630961712f60e01b6143e0565b6001600160a01b031614155b8061385c575080155b8061386f57506001600160a01b0382163b155b8061388257506001600160a01b03821630145b8061389e5750866001600160a01b0316826001600160a01b0316145b806138ba5750846001600160a01b0316826001600160a01b0316145b806138d65750856001600160a01b0316826001600160a01b0316145b806138f25750836001600160a01b0316826001600160a01b0316145b8061390e5750826001600160a01b0316826001600160a01b0316145b8061392657506006546001600160a01b038381169116145b8061393e57506006546001600160a01b038881169116145b1561395c5760405163c52a9bd360e01b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661399a612d3b8463514526c360e11b613d32565b6001600160a01b03161415806139f557506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166139e9612d3b8463056a0fbf60e31b613d32565b6001600160a01b031614155b80613a0f5750613a0f61380c8363b3f05b9760e01b613d32565b15613a2d5760405163c52a9bd360e01b815260040160405180910390fd5b613a368261441f565b50505050505050565b5f5f613a4f8361010001356111bb565b6016549193509150600283810b600160c81b909204900b141580613a83575060165461ffff828116600160e01b9092041614155b156131e65760405163c52a9bd360e01b815260040160405180910390fd5b5f613aaf6020830183615586565b90506306704e8760e31b637f5a7c7b60e01b5f80613af8565b5f604051838152602081600483865afa601f3d118116613ae6575f5ffd5b5051905060a081901c15610c36575f5ffd5b613b028486613ac8565b915030613b0f8484613ac8565b14905080613b305760405163c52a9bd360e01b815260040160405180910390fd5b50620100165550505050565b60018401545f9063ffffffff1615613b6a576040516001620787ab60e51b0319815260040160405180910390fd5b8351613b75856133d7565b9150613b828185856140dd565b8655613b9462ffffff83166001615f00565b600196909601805463ffffffff191663ffffffff90971696909617909555949350505050565b6120a982826146ff565b82820281838583041485151702613c4b575f198385098181108201900382848609835f038416828511613bfe5763ae47f7025f526004601cfd5b93849004938382119092035f8390038390046001010292030417600260038302811880840282030280840282030280840282030280840282030280840282030280840290910302026125aa565b0492915050565b805f03613c5e57505050565b8281613c8a827f0000000000000000000000000000000000000000000000000000000000000000614722565b1015613ca9576040516365169c1d60e01b815260040160405180910390fd5b81836003015f828254613cbc9190615e06565b90915550613ccd905081848461474c565b613cd8843084614924565b81836002015f828254613ceb9190615e57565b909155505050505050565b6040515f90613d15908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b5f80613d4384848360046020613d5e565b51949350505050565b5f8160a01c15613d5a575f5ffd5b5090565b6040518481526023198301613d74578360048201525b81818483895afa613d87573d5f823e3d81fd5b813d1015610b79575f5ffd5b6016613da0601742614a72565b825465ffffffff00001916600160201b61ffff9283160263ffff0000191617620100009290911691909102178155613df8827f0000000000000000000000000000000000000000000000000000000000000000614ab2565b8154600160301b600160881b031916600160301b62ffffff9290921691909102600160481b600160881b03191617600160481b436001600160401b039081169190910291909117600160881b600160c81b031916600160881b42929092169190910217808255600290600160e01b900461ffff16811115613e8257508054600160e01b900461ffff165b815461ffff8216600160201b0261ffff60201b19909116178255505050565b805f03613ead57505050565b5f613eb88430614722565b90505f613ec58585614722565b9050613ed2858585614ac7565b5f613edd8630614722565b90505f613eea8787614722565b905083821180613efc57508482850314155b80613f0657508281105b80613f1357508483820314155b15613a3657604051631dc418c360e31b815260040160405180910390fd5b5f5f8663ffffffff165f03613fd7575f898661ffff1661ffff8110613f5857613f58615c9e565b60408051608081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a1614613fc357613fc0818a8988614b11565b90505b8060200151816040015192509250506140d1565b8688035f80613feb8c8c858c8c8c8c614bb7565b91509150815f015163ffffffff168363ffffffff160361401b5781602001518260400151945094505050506140d1565b805f015163ffffffff168363ffffffff16036140475780602001518160400151945094505050506140d1565b5f825f0151825f01510390505f835f0151850390508063ffffffff168263ffffffff1660060b856020015185602001510360060b8161408857614088615e19565b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816140c0576140c0615e19565b048560400151019650965050505050505b97509795505050505050565b5f8383836040516020016140f393929190615f1c565b6040516020818303038152906040528051906020012090509392505050565b608081811c15159082901b1515166111b5632f02d37f60e21b826141a3565b611f9e6309f17b8160e31b5f6141a3565b60c081015160a082015160e08301515f92919062ffffff808316908416148061416f575063ffffffff8116155b1561417d5750909392505050565b5f5f614187614d92565b915091506141988585858585614e02565b979650505050505050565b62010016546001600160a01b0381166141bb57505050565b5f612710603f6141cf622dc6c06040615e40565b6141d99190615e2d565b6141e39190615e57565b905063c52a9bd360e01b7f6e819d90474482ea53f17905af71585dac910232de1a68f42349cd60badb2874825a101561421e57815f5260045ffd5b855f52846004525f5f60245f5f88622dc6c0f161423b578060205fa15b505050505050565b6016805461427a9060179061ffff808216914291600160301b820460020b918891620100008204811691600160201b900416614eb1565b825463ffffffff19166201000061ffff9283160261ffff1916179116178082556142dd90600160301b8104600290810b918691600160c81b909104900b7f000000000000000000000000000000000000000000000000000000000000000061502d565b8154600160301b600160881b031916600160301b62ffffff9290921691909102600160481b600160881b03191617600160481b436001600160401b0316021790555050565b5f8061433a856371a9730560e01b8360046020613d5e565b80519091506001600160a01b0380861691908516903d906001600160401b038111601f1983018211171561436c575f5ffd5b602081863e8451602080838503030481116001600160401b0382111715614391575f5ffd5b600281036143b057604060208301873e83602087015114858751141696505b5050505050509392505050565b5f806143d58363182148ef60e01b83600460a0613d5e565b60a090209392505050565b5f5f613d4384847f000000000000000000000000000000000000000000000000000000000000000060246020613d5e565b5f6001821115613d5a575f5ffd5b7f00000000000000000000000000000000000000000000000000000000000000005f6144588263086fce0d60e11b836004610160613d5e565b90505f6005905080604083015111602083015160201c1715614478575f5ffd5b6101408201606083015b818110156144a057805160a01c15614498575f5ffd5b602001614482565b505081517f000000000000000000000000000000000000000000000000000000000000000091507f0000000000000000000000000000000000000000000000000000000000000000908015806144fb57506001604085015114155b8061451957506001600160a01b038316614516856060015190565b14155b8061453757506001600160a01b038316614534856080015190565b14155b8061455557506001600160a01b0382166145528560a0015190565b14155b8061457557506005546001600160a01b03166145728560c0015190565b14155b806145b357506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166145b08560e0015190565b14155b156145d0576040516282b42960e81b815260040160405180910390fd5b5f6145dc856020015190565b90506145f586636373dff160e11b8460246101c0613d5e565b94505f600190505f600590508060a0880151118260808901511117604088015160a01c1715614622575f5ffd5b610120870160c088015b8181101561464a57805160a01c15614642575f5ffd5b60200161462c565b50506101a0870161012088015b8181101561467557805160201c1561466d575f5ffd5b602001614657565b5050865184925090501415806146905750600160a086015114155b806146ae57506001600160a01b0383166146ab8660c0015190565b14155b806146cc57506001600160a01b0387166146c98660e0015190565b14155b806146e2575061014085015163ffffffff821610155b15613a36576040516282b42960e81b815260040160405180910390fd5b601654600160481b90046001600160401b031643146120a9576120a98282614243565b5f816014526370a0823160601b5f5260208060246010865afa601f3d111660205102905092915050565b604051627eeac760e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e9061479a9030908890600401615e6a565b602060405180830381865afa1580156147b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147d99190615bf7565b604051637a94c56560e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5298aca9061482c90309088908790600401615e84565b5f604051808303815f87803b158015614843575f5ffd5b505af1158015614855573d5f5f3e3d5ffd5b5050604051627eeac760e11b81525f92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062fdd58e906148a79030908990600401615e6a565b602060405180830381865afa1580156148c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148e69190615bf7565b9050818111806148f857508281830314155b806149065750836003015481105b15610eb55760405163104eed1d60e31b815260040160405180910390fd5b805f0361493057505050565b825f61495c827f0000000000000000000000000000000000000000000000000000000000000000614722565b90505f6149698386614722565b604051630b0d9c0960e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906149bc90899089908990600401615e84565b5f604051808303815f87803b1580156149d3575f5ffd5b505af11580156149e5573d5f5f3e3d5ffd5b505050505f614a14847f0000000000000000000000000000000000000000000000000000000000000000614722565b90505f614a218588614722565b905083821180614a3357508582850314155b80614a3d57508281105b80614a4a57508583820314155b15614a6857604051631dc418c360e31b815260040160405180910390fd5b5050505050505050565b6040805160808101825263ffffffff83168082525f602083018190529282019290925260016060909101819052600160f81b9091178355805b9250929050565b5f81614abe57826125aa565b6125aa83615f3f565b816014528060345263a9059cbb60601b5f5260205f604460105f875af18060015f511416614b0757803d853b151710614b07576390b8ec185f526004601cfd5b505f603452505050565b614b19615326565b5f855f01518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020015f856001600160801b031611614b6a576001614b6c565b845b6001600160801b031663ffffffff60801b608085901b1681614b9057614b90615e19565b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b614bbf615326565b614bc7615326565b888561ffff1661ffff8110614bde57614bde615c9e565b60408051608081018252919092015463ffffffff8116808352600160201b820460060b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff16151560608201529250614c3c9089908961508b565b15614c75578663ffffffff16825f015163ffffffff1614614c695781614c6483898988614b11565b614c6c565b81815b915091506140d1565b8883614c82876001615f5f565b614c8c9190615f79565b61ffff1661ffff8110614ca157614ca1615c9e565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614d4a57604080516080810182528a5463ffffffff81168252600160201b810460060b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614d5888835f01518961508b565b614d7557604051636ffbbccd60e11b815260040160405180910390fd5b614d828989898887615149565b9150915097509795505050505050565b5f5f60165461ffff8160101c166001811115614dfc5761ffff82168060170154826001840383010660170154915063ffffffff828203168015614df8578260201c8260201c0360060b8181059050808660301c60020b0397505063ffffffff8342031695505b5050505b50509091565b5f8462ffffff168662ffffff1610614e1b575083610b79565b5f83131580614e2e575063ffffffff8216155b80614e3d575063ffffffff8416155b15614e49575084610b79565b63ffffffff82811687870362ffffff160290849086168281614e6d57614e6d615e19565b04811115614e7f578692505050610b79565b8363ffffffff168663ffffffff16820281614e9c57614e9c615e19565b048862ffffff16019250505095945050505050565b5f5f5f898961ffff1661ffff8110614ecb57614ecb615c9e565b60408051608081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089169003614f3457888592509250506140d1565b8461ffff168461ffff16118015614f5c5750614f51600186615f9c565b61ffff168961ffff16145b614f665784614f68565b835b915081614f768a6001615f5f565b614f809190615f79565b9250614f8e81898989614b11565b8a8461ffff1661ffff8110614fa557614fa5615c9e565b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b02959095166001600160581b0366ffffffffffffff909216600160201b026001600160581b031990931663ffffffff909516949094179190911716919091179190911790555097509795505050505050565b5f5f8560020b61503d8685614ab2565b60020b61504a9190615fb6565b9050600284900b808213156150615780915061507d565b61506a81615dcd565b82121561507d5761507a81615dcd565b91505b61419882600289900b615c77565b5f8363ffffffff168363ffffffff16111580156150b457508363ffffffff168263ffffffff1611155b156150d0578163ffffffff168363ffffffff16111590506125aa565b5f8463ffffffff168463ffffffff16116150fd576150f863ffffffff8516600160201b615e57565b615105565b8363ffffffff165b90505f8563ffffffff168463ffffffff16116151345761512f63ffffffff8516600160201b615e57565b61513c565b8363ffffffff165b9091111595945050505050565b615151615326565b615159615326565b5f83615166866001615f5f565b6151709190615f79565b61ffff1690505f60018561ffff16836151899190615e57565b6151939190615e06565b90505b5f60026151a38385615e57565b6151ad9190615e2d565b9050896151be61ffff881683615fdc565b61ffff81106151cf576151cf615c9e565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061523b57615233816001615e57565b925050615196565b8961ffff871661524c836001615e57565b6152569190615fdc565b61ffff811061526757615267615c9e565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094505f906152ca908b908b61508b565b90508080156152e257506152e28a8a875f015161508b565b156152ee57505061531a565b80615305576152fe600183615e06565b9250615313565b615310826001615e57565b93505b5050615196565b50509550959350505050565b604080516080810182525f80825260208201819052918101829052606081019190915290565b5f60a0828403121561535c575f5ffd5b50919050565b5f60a08284031215615372575f5ffd5b6125aa838361534c565b5f6020828403121561538c575f5ffd5b5035919050565b6001600160a01b03169052565b634e487b7160e01b5f52602160045260245ffd5b60028110611f9357634e487b7160e01b5f52602160045260245ffd5b6153d9816153b4565b9052565b81516001600160a01b0390811682526020808401519091169082015260408083015161012083019161541190840182615393565b50606083015161542460608401826153d0565b50608083015161543b608084018262ffffff169052565b5060a083015161545060a084018260ff169052565b5060c083015161546360c0840182615393565b5060e083015161547760e084018215159052565b5061010092830151919092015290565b6001600160a01b0381168114611f93575f5ffd5b5f5f83601f8401126154ab575f5ffd5b5081356001600160401b038111156154c1575f5ffd5b602083019150836020828501011115614aab575f5ffd5b5f5f5f5f5f8587036101608112156154ee575f5ffd5b86356154f981615487565b9550615508886020890161534c565b9450608060bf198201121561551b575f5ffd5b5060c0860192506101408601356001600160401b0381111561553b575f5ffd5b6155478882890161549b565b969995985093965092949392505050565b5f5f60408385031215615569575f5ffd5b82359150602083013561557b81615487565b809150509250929050565b5f60208284031215615596575f5ffd5b81356125aa81615487565b5f5f8284036101c08112156155b4575f5ffd5b6155be858561534c565b9250610120609f19820112156155d2575f5ffd5b5060a0830190509250929050565b61ffff81168114611f93575f5ffd5b5f5f60408385031215615600575f5ffd5b82359150602083013561557b816155e0565b5f6060828403121561535c575f5ffd5b5f5f5f5f5f6101408688031215615637575f5ffd5b853561564281615487565b9450615651876020880161534c565b93506156608760c08801615612565b92506101208601356001600160401b0381111561553b575f5ffd5b5f5f5f60e0848603121561568d575f5ffd5b615697858561534c565b925060a08401356156a781615487565b915060c08401356156b781615487565b809150509250925092565b8035600281900b8114611f34575f5ffd5b5f5f5f5f61010085870312156156e7575f5ffd5b84356156f281615487565b9350615701866020870161534c565b925060c085013561571181615487565b915061571f60e086016156c2565b905092959194509250565b5f5f6020838503121561573b575f5ffd5b82356001600160401b03811115615750575f5ffd5b61575c8582860161549b565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f604084860312156157af575f5ffd5b8335925060208401356001600160401b038111156157cb575f5ffd5b8401601f810186136157db575f5ffd5b80356001600160401b038111156157f0575f5ffd5b8660208260051b8401011115615804575f5ffd5b939660209190910195509293505050565b604080825283519082018190525f9060208501906060840190835b8181101561585157835160060b835260209384019390920191600101615830565b5050838103602080860191909152855180835291810192508501905f5b818110156158955782516001600160a01b031684526020938401939092019160010161586e565b50919695505050505050565b5f5f5f5f5f5f61016087890312156158b7575f5ffd5b86356158c281615487565b95506158d1886020890161534c565b94506158e08860c08901615612565b935061012087013592506101408701356001600160401b03811115615903575f5ffd5b61590f89828a0161549b565b979a9699509497509295939492505050565b5f5f5f5f5f5f6101208789031215615937575f5ffd5b863561594281615487565b9550615951886020890161534c565b945060c0870135935060e087013592506101008701356001600160401b03811115615903575f5ffd5b602080825282518282018190525f918401906040840190835b818110156159b1578351835260209384019390920191600101615993565b509095945050505050565b602081016159c9836153b4565b91905290565b5f5f604083850312156159e0575f5ffd5b50508035926020909101359150565b918252602082015260400190565b5f60608284031215615a0d575f5ffd5b6125aa8383615612565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715615a5357615a53615a17565b604052919050565b62ffffff81168114611f93575f5ffd5b5f60a0828403128015615a7c575f5ffd5b5060405160a081016001600160401b0381118282101715615a9f57615a9f615a17565b6040528235615aad81615487565b81526020830135615abd81615487565b60208201526040830135615ad081615a5b565b6040820152615ae1606084016156c2565b60608201526080830135615af481615487565b60808201529392505050565b8035615b0b81615487565b6001600160a01b031682526020810135615b2481615487565b6001600160a01b031660208301526040810135615b4081615a5b565b62ffffff166040830152615b56606082016156c2565b60020b60608301526080810135615b6c81615487565b6001600160a01b03166080929092019190915250565b80358015158114611f34575f5ffd5b615b9a81615b82565b15158252602081810135908301526040810135615bb681615487565b6001600160a01b03166040929092019190915250565b6101208101615bdb8286615b00565b615be860a0830185615b91565b82610100830152949350505050565b5f60208284031215615c07575f5ffd5b5051919050565b5f60208284031215615c1e575f5ffd5b6125aa82615b82565b5f5f60408385031215615c38575f5ffd5b8251615c4381615a5b565b602084015190925061557b816155e0565b818382375f9101908152919050565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f831280158216821582161715615c9657615c96615c63565b505092915050565b634e487b7160e01b5f52603260045260245ffd5b60a08101610c368284615b00565b5f60208284031215615cd0575f5ffd5b81516001600160401b03811115615ce5575f5ffd5b8201601f81018413615cf5575f5ffd5b80516001600160401b03811115615d0e57615d0e615a17565b615d21601f8201601f1916602001615a2b565b818152856020838501011115615d35575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f60408385031215615d63575f5ffd5b505080516020909101519092909150565b5f60208284031215615d84575f5ffd5b8135600281106125aa575f5ffd5b5f60208284031215615da2575f5ffd5b81356125aa81615a5b565b5f60208284031215615dbd575f5ffd5b813560ff811681146125aa575f5ffd5b5f600160ff1b8201615de157615de1615c63565b505f0390565b60e08101615df58286615b00565b60a082019390935260c00152919050565b81810381811115610c3657610c36615c63565b634e487b7160e01b5f52601260045260245ffd5b5f82615e3b57615e3b615e19565b500490565b8082028115828204841417610c3657610c36615c63565b80820180821115610c3657610c36615c63565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60208284031215615eb8575f5ffd5b813563ffffffff811681146125aa575f5ffd5b63ffffffff8281168282160390811115610c3657610c36615c63565b5f60208284031215615ef7575f5ffd5b6125aa826156c2565b63ffffffff8181168382160190811115610c3657610c36615c63565b8381526001600160a01b038316602082015260a0810161143d6040830184615b91565b5f8160020b627fffff198103615f5757615f57615c63565b5f0392915050565b61ffff8181168382160190811115610c3657610c36615c63565b5f61ffff831680615f8c57615f8c615e19565b8061ffff84160691505092915050565b61ffff8281168282160390811115610c3657610c36615c63565b8181035f831280158383131683831282161715615fd557615fd5615c63565b5092915050565b5f82615fea57615fea615e19565b50069056";
|