@whetstone-research/doppler-sdk 1.0.39 → 1.0.41

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.
@@ -8,157 +8,172 @@ var GENERATED_DOPPLER_DEPLOYMENTS = {
8
8
  "1": {
9
9
  Airlock: "0xDe3599a2eC440B296373a983C85C365DA55d9dFA",
10
10
  Bundler: "0xf45588E8e0B1df9dB9ae7E20eCE5726AE931357c",
11
- DopplerCreateXDeployer: "0x103004E50Bed65DFBa30dD9c264B6BdF5e529B83",
12
- DopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
13
- DopplerERC20V1: "0xDB7B520bb5C3a2C5d4871198081911359f93be87",
14
- DopplerERC20V1Factory: "0x89C261C05B5F9b6BcBA07C199b8DeE7cFaD45292",
11
+ DN404Factory: "0x2615cfB676925949312B34069Ee477205e49Ae0A",
12
+ DopplerCreateXDeployer: "0x00000000005caf9bA78B1dFa98C47d9BF76Db8b8",
13
+ DopplerDeployer: "0x95e91A1A24834aeB4e8d253D9247ae1F4E36B085",
14
+ DopplerERC20V1: "0xeDf3f3981E98077591c1B909BCCff0e572bD50f8",
15
+ DopplerERC20V1Factory: "0xf1542Dd2D46394C16372FB00f2c339b53CeF2cE5",
15
16
  DopplerHookInitializer: "0xBDF938149ac6a781F94FAa0ed45E6A0e984c6544",
16
- DopplerHookMigrator: "0x1E40b0875DDa35f41E15cFB475403859B8c860c4",
17
+ DopplerHookMigrator: "0xb3B7ceE86eF22fe1c3212B48efeBc1AB4B7220C4",
17
18
  GovernanceFactory: "0x9F309D79BEe3E8b2f56FaCF74b7195Df176c8F61",
18
19
  LaunchpadGovernanceFactory: "0x2A8DA67F277442cFF7Dc2143e52Fdd0cBF5A8175",
19
- LockableUniswapV3Initializer: "0xA2E0435225D52a8B950122752978007D758056d7",
20
+ LockableUniswapV3Initializer: "0xD09dEd1867d885fcDB41ADC957165D04aE917683",
20
21
  NoOpGovernanceFactory: "0xddAE8B3eD08184682f7Bc32B74d943cEEfEab638",
21
22
  NoOpMigrator: "0x233A71A7bB928b1357A1Ebf454298320989Ca5B5",
22
- Quoter: "0xce6cd4E35447E05A39A50A4bCf61f2DcD93A8f0D",
23
- RehypeDopplerHookInitializer: "0x5F9eB5f6726Fe88D5e39867967F5b833d2fA3215",
24
- RehypeDopplerHookMigrator: "0x660740D7d6Fb2C8998Fa3ffF459cceB9Ac12C84B",
25
- StreamableFeesLockerV2: "0xcE3212e6536F33cD6fbFEE265224131353Ca3D47",
23
+ Quoter: "0x0a4070Fd5FDac83E576ed6Bba30BE8db10B2299E",
24
+ RehypeDopplerHookInitializer: "0xe2AEbc987592593b667ec29178D0A83929Db78b6",
25
+ StreamableFeesLockerV2: "0xA8Bdf3A8e9415C4ec1FF55899c34105E0FD66375",
26
26
  TimelockFactory: "0x9fd40af2baAfAF03513f091444e821c0d5b06ea0",
27
- TopUpDistributor: "0x435312320C0330B1999746753551CdFbD83aD814",
28
- UniswapV2Locker: "0x06731e30df4B0209ED19C39Ba8eD253e17b0E495",
29
- UniswapV2MigratorSplit: "0xD7abA5f1d80a330a6fe9E96F7bA122710E0912d3",
30
- UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad"
27
+ UniswapV2Locker: "0xEa7f0777a6FD7BB6Dfff290aE44154c75DAAa5cA",
28
+ UniswapV2MigratorSplit: "0x44E30C4724DB30E4170cBC160D17e1a1aFf2f21F",
29
+ UniswapV4Initializer: "0xFDFD7D27089f306eEF279b5DA6BFe878250cB6bb"
30
+ },
31
+ "56": {
32
+ Airlock: "0x14870A3282bd707b252e3C0f356A68B4c8F6D2ff",
33
+ Bundler: "0x3d1adeD02C8658c8679B3E1432e276FccC90Da43",
34
+ DN404Factory: "0x46Af39801ACA4A3Fe4b6e42ABec7BB5675CfC693",
35
+ DopplerCreateXDeployer: "0x00000000005caf9bA78B1dFa98C47d9BF76Db8b8",
36
+ DopplerDeployer: "0x1507d177085FC9840BB321a60CB397069F952b34",
37
+ DopplerERC20V1: "0xD26E23c3f83CC40a50469abA9E97F905e2b2256c",
38
+ DopplerERC20V1Factory: "0xFB5120a4d3c69BCeBD138986A87fae2fD0DDC893",
39
+ DopplerHookInitializer: "0xF0d631d54c7e1040CCFa1c2ed737973D6A652544",
40
+ DopplerHookMigrator: "0x425C16133940f66824dBd6347610D93e44C360c4",
41
+ DopplerLensQuoter: "0x11c420Bdf1d82831516ad118717F2EA03bF86Ea1",
42
+ GovernanceFactory: "0x42c3B403f82406B72d380404E835eD35E580c03f",
43
+ LaunchpadGovernanceFactory: "0xFDcAAd19744d2C723862fF49e85139cBEf76Ec14",
44
+ LockableUniswapV3Initializer: "0xAfc12583675A5d2F7D1dF8B7765B67fB192C3034",
45
+ NoOpGovernanceFactory: "0x7f604b5A8096b06d2CC305b6a843829Eea9F4ba9",
46
+ NoOpMigrator: "0x95eC4FD6d64Df5299F6dEDaA5dF96E45836c5781",
47
+ Quoter: "0x30fb0c09e2Fc575DfA2BC6eAA9852ddEB21dce1c",
48
+ RehypeDopplerHookInitializer: "0xA7465b9d101cf3B2381D6CD42f2C5E72f9453984",
49
+ StreamableFeesLockerV2: "0x64e811c32eeFBfEe1BEb0fE068A7794Df0119ad9",
50
+ SwapRestrictorDopplerHook: "0xC8B56E57C592f542574EcD4293082dE856d67a58",
51
+ TimelockFactory: "0x7bc626670e2bb5AC23D0c1640B311166ef255C18",
52
+ UniswapV2Locker: "0x7a3Ac7Cb49DDb0D2BDAEe6e892C3B36b8d6a00cA",
53
+ UniswapV2MigratorSplit: "0x873d88786F9Fb3E233b97a5cDf588242B9862A44",
54
+ UniswapV4Initializer: "0x9430C153A5cd86Fa61d8c130f87a3C24Ad07cD43"
31
55
  },
32
56
  "143": {
33
57
  Airlock: "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12",
34
58
  Bundler: "0xf45588E8e0B1df9dB9ae7E20eCE5726AE931357c",
35
- DopplerCreateXDeployer: "0x103004E50Bed65DFBa30dD9c264B6BdF5e529B83",
36
- DopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
37
- DopplerERC20V1: "0xDB7B520bb5C3a2C5d4871198081911359f93be87",
38
- DopplerERC20V1Factory: "0x89C261C05B5F9b6BcBA07C199b8DeE7cFaD45292",
59
+ DN404Factory: "0x2615cfB676925949312B34069Ee477205e49Ae0A",
60
+ DopplerCreateXDeployer: "0x00000000005caf9bA78B1dFa98C47d9BF76Db8b8",
61
+ DopplerDeployer: "0x95e91A1A24834aeB4e8d253D9247ae1F4E36B085",
62
+ DopplerERC20V1: "0xeDf3f3981E98077591c1B909BCCff0e572bD50f8",
63
+ DopplerERC20V1Factory: "0xf1542Dd2D46394C16372FB00f2c339b53CeF2cE5",
39
64
  DopplerHookInitializer: "0x56ea13Da5f39863D3B3d54826187306Af7ada544",
40
- DopplerHookMigrator: "0x1E40b0875DDa35f41E15cFB475403859B8c860c4",
65
+ DopplerHookMigrator: "0xb3B7ceE86eF22fe1c3212B48efeBc1AB4B7220C4",
41
66
  GovernanceFactory: "0xFAafdE6a5b658684cC5eb0C5c2c755B00A246F45",
42
67
  LaunchpadGovernanceFactory: "0x5FBe931dc4B923A7abe4c47aD68d5bF9Eda5B76D",
43
- LockableUniswapV3Initializer: "0x8b4C7DB9121FC885689C0A50D5a1429F15AEc2a0",
68
+ LockableUniswapV3Initializer: "0xD09dEd1867d885fcDB41ADC957165D04aE917683",
44
69
  NoOpGovernanceFactory: "0xb4deE32EB70A5E55f3D2d861F49Fb3D79f7a14d9",
45
70
  NoOpMigrator: "0x5F3bA43D44375286296Cb85F1EA2EBfa25dde731",
46
- Quoter: "0xce6cd4E35447E05A39A50A4bCf61f2DcD93A8f0D",
47
- RehypeDopplerHookInitializer: "0x5F9eB5f6726Fe88D5e39867967F5b833d2fA3215",
48
- RehypeDopplerHookMigrator: "0x660740D7d6Fb2C8998Fa3ffF459cceB9Ac12C84B",
49
- StreamableFeesLockerV2: "0xcE3212e6536F33cD6fbFEE265224131353Ca3D47",
71
+ Quoter: "0x0a4070Fd5FDac83E576ed6Bba30BE8db10B2299E",
72
+ RehypeDopplerHookInitializer: "0xe2AEbc987592593b667ec29178D0A83929Db78b6",
73
+ StreamableFeesLockerV2: "0xA8Bdf3A8e9415C4ec1FF55899c34105E0FD66375",
50
74
  TimelockFactory: "0x44610355465c1F5914C8B8ea0E7c887CC67459b2",
51
- TopUpDistributor: "0x435312320C0330B1999746753551CdFbD83aD814",
52
- UniswapV2Locker: "0x06731e30df4B0209ED19C39Ba8eD253e17b0E495",
53
- UniswapV2MigratorSplit: "0xD7abA5f1d80a330a6fe9E96F7bA122710E0912d3",
54
- UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad"
75
+ UniswapV2Locker: "0xEa7f0777a6FD7BB6Dfff290aE44154c75DAAa5cA",
76
+ UniswapV2MigratorSplit: "0x44E30C4724DB30E4170cBC160D17e1a1aFf2f21F",
77
+ UniswapV4Initializer: "0xFDFD7D27089f306eEF279b5DA6BFe878250cB6bb"
55
78
  },
56
79
  "4663": {
57
80
  Airlock: "0xeb7C034704eF8Dcd2D32324c1545f62fB4aD0862",
58
81
  Bundler: "0xf45588E8e0B1df9dB9ae7E20eCE5726AE931357c",
59
- DN404Factory: "0x37A9Fa204a4d3A429FDED7e3469ab076C854Bc9d",
60
- DopplerCreateXDeployer: "0x103004E50Bed65DFBa30dD9c264B6BdF5e529B83",
61
- DopplerDeployer: "0x4389AD34938B14F25cff7ED983c53f5a42A2573f",
62
- DopplerERC20V1: "0x3Be8B97Fd0e713B5aBE0649Fa830223B6B4BC599",
63
- DopplerERC20V1Factory: "0x1B37D3a72082029c44B35B604Ea473617580b69a",
82
+ DN404Factory: "0x2615cfB676925949312B34069Ee477205e49Ae0A",
83
+ DopplerCreateXDeployer: "0x00000000005caf9bA78B1dFa98C47d9BF76Db8b8",
84
+ DopplerDeployer: "0x95e91A1A24834aeB4e8d253D9247ae1F4E36B085",
85
+ DopplerERC20V1: "0xeDf3f3981E98077591c1B909BCCff0e572bD50f8",
86
+ DopplerERC20V1Factory: "0xf1542Dd2D46394C16372FB00f2c339b53CeF2cE5",
64
87
  DopplerHookInitializer: "0x4e3468951D49f2EEa976eD0D6e75fFCb44a9a544",
65
- DopplerHookMigrator: "0x7BF319d8e969f7596B1Bc171Da9ce322f67Ae0c4",
88
+ DopplerHookMigrator: "0xb3B7ceE86eF22fe1c3212B48efeBc1AB4B7220C4",
66
89
  DopplerLensQuoter: "0xf4c22465532f64777FfcD7770831AEca38F35c04",
67
90
  GovernanceFactory: "0xDeb0447DAE3EB177c4dbA8bBCCCa25c8F273B7ef",
68
91
  LaunchpadGovernanceFactory: "0xdb036746D65DD52126b1915f1AdF555e6C5237Cf",
69
- LockableUniswapV3Initializer: "0xde8886A0019Ea060B8378Ee37b8A23b8117F29A3",
92
+ LockableUniswapV3Initializer: "0xD09dEd1867d885fcDB41ADC957165D04aE917683",
70
93
  NoOpGovernanceFactory: "0x85f37f74Ef2478A770318bc810177a9835911aD7",
71
94
  NoOpMigrator: "0xba2F330EDb16cD8056f5988d8CE19BbC63475A0e",
72
- Quoter: "0xce6cd4E35447E05A39A50A4bCf61f2DcD93A8f0D",
73
- RehypeDopplerHookInitializer: "0x5F9eB5f6726Fe88D5e39867967F5b833d2fA3215",
74
- RehypeDopplerHookMigrator: "0x660740D7d6Fb2C8998Fa3ffF459cceB9Ac12C84B",
75
- StreamableFeesLockerV2: "0x7B6147AC3F615bdb764e7EbD5f517dac1AD163B8",
95
+ Quoter: "0x0a4070Fd5FDac83E576ed6Bba30BE8db10B2299E",
96
+ RehypeDopplerHookInitializer: "0xe2AEbc987592593b667ec29178D0A83929Db78b6",
97
+ StreamableFeesLockerV2: "0xA8Bdf3A8e9415C4ec1FF55899c34105E0FD66375",
76
98
  SwapRestrictorDopplerHook: "0xC16c826F75338A5Ea626f94f8992191B4ce5abA2",
77
99
  TimelockFactory: "0x6076fdDFCaC0dD980e0350dfF5239feC3f86C578",
78
- TopUpDistributor: "0x46adee7595d48b1Ec53090e9bc78e1E69Fa0eF06",
79
- UniswapV2Locker: "0x63f6Efe03F25A8C6650b38d05C5a454051d642a5",
80
- UniswapV2MigratorSplit: "0xB05046cEa797c993FB5b583098B1c4682e9Da333",
81
- UniswapV4Initializer: "0x6cce158B6D1747617fc218592B4D60B239B957ea"
100
+ UniswapV2Locker: "0xEa7f0777a6FD7BB6Dfff290aE44154c75DAAa5cA",
101
+ UniswapV2MigratorSplit: "0x44E30C4724DB30E4170cBC160D17e1a1aFf2f21F",
102
+ UniswapV4Initializer: "0xFDFD7D27089f306eEF279b5DA6BFe878250cB6bb"
82
103
  },
83
104
  "8453": {
84
105
  Airlock: "0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12",
85
106
  Bundler: "0xf45588E8e0B1df9dB9ae7E20eCE5726AE931357c",
86
- DN404Factory: "0x37A9Fa204a4d3A429FDED7e3469ab076C854Bc9d",
87
- DopplerCreateXDeployer: "0x103004E50Bed65DFBa30dD9c264B6BdF5e529B83",
88
- DopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
89
- DopplerERC20V1: "0xDB7B520bb5C3a2C5d4871198081911359f93be87",
90
- DopplerERC20V1Factory: "0x89C261C05B5F9b6BcBA07C199b8DeE7cFaD45292",
107
+ DN404Factory: "0x2615cfB676925949312B34069Ee477205e49Ae0A",
108
+ DopplerCreateXDeployer: "0x00000000005caf9bA78B1dFa98C47d9BF76Db8b8",
109
+ DopplerDeployer: "0x95e91A1A24834aeB4e8d253D9247ae1F4E36B085",
110
+ DopplerERC20V1: "0xeDf3f3981E98077591c1B909BCCff0e572bD50f8",
111
+ DopplerERC20V1Factory: "0xf1542Dd2D46394C16372FB00f2c339b53CeF2cE5",
91
112
  DopplerHookInitializer: "0xBDF938149ac6a781F94FAa0ed45E6A0e984c6544",
92
- DopplerHookMigrator: "0x1E40b0875DDa35f41E15cFB475403859B8c860c4",
113
+ DopplerHookMigrator: "0xb3B7ceE86eF22fe1c3212B48efeBc1AB4B7220C4",
93
114
  DopplerLensQuoter: "0x43d0D97EC9241A8F05A264f94B82A1d2E600f2B3",
94
115
  GovernanceFactory: "0xa82c66b6ddEb92089015C3565E05B5c9750b2d4B",
95
116
  LaunchpadGovernanceFactory: "0x40Bcb4dDA3BcF7dba30C5d10c31EE2791ed9ddCa",
96
- LockableUniswapV3Initializer: "0xE0dC4012AC9C868F09c6e4b20d66ED46D6F258d0",
117
+ LockableUniswapV3Initializer: "0xD09dEd1867d885fcDB41ADC957165D04aE917683",
97
118
  NoOpGovernanceFactory: "0xe7dfbd5b0A2C3B4464653A9beCdc489229eF090E",
98
119
  NoOpMigrator: "0x6ddfED58D238Ca3195E49d8ac3d4cEa6386E5C33",
99
- Quoter: "0xce6cd4E35447E05A39A50A4bCf61f2DcD93A8f0D",
100
- RehypeDopplerHookInitializer: "0x5F9eB5f6726Fe88D5e39867967F5b833d2fA3215",
101
- RehypeDopplerHookMigrator: "0x660740D7d6Fb2C8998Fa3ffF459cceB9Ac12C84B",
102
- StreamableFeesLockerV2: "0xcE3212e6536F33cD6fbFEE265224131353Ca3D47",
120
+ Quoter: "0x0a4070Fd5FDac83E576ed6Bba30BE8db10B2299E",
121
+ RehypeDopplerHookInitializer: "0xe2AEbc987592593b667ec29178D0A83929Db78b6",
122
+ StreamableFeesLockerV2: "0xA8Bdf3A8e9415C4ec1FF55899c34105E0FD66375",
103
123
  TimelockFactory: "0xa636bD5F9179E80e9EdB371Ed90956fA5ebdCB33",
104
- TopUpDistributor: "0x435312320C0330B1999746753551CdFbD83aD814",
105
- UniswapV2Locker: "0x06731e30df4B0209ED19C39Ba8eD253e17b0E495",
106
- UniswapV2MigratorSplit: "0xD7abA5f1d80a330a6fe9E96F7bA122710E0912d3",
107
- UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad"
124
+ UniswapV2Locker: "0xEa7f0777a6FD7BB6Dfff290aE44154c75DAAa5cA",
125
+ UniswapV2MigratorSplit: "0x44E30C4724DB30E4170cBC160D17e1a1aFf2f21F",
126
+ UniswapV4Initializer: "0xFDFD7D27089f306eEF279b5DA6BFe878250cB6bb"
108
127
  },
109
128
  "42161": {
110
129
  Airlock: "0xeb7C034704eF8Dcd2D32324c1545f62fB4aD0862",
111
130
  Bundler: "0xf45588E8e0B1df9dB9ae7E20eCE5726AE931357c",
112
- DN404Factory: "0x37A9Fa204a4d3A429FDED7e3469ab076C854Bc9d",
113
- DopplerCreateXDeployer: "0x103004E50Bed65DFBa30dD9c264B6BdF5e529B83",
114
- DopplerDeployer: "0x4389AD34938B14F25cff7ED983c53f5a42A2573f",
115
- DopplerERC20V1: "0x3Be8B97Fd0e713B5aBE0649Fa830223B6B4BC599",
116
- DopplerERC20V1Factory: "0x1B37D3a72082029c44B35B604Ea473617580b69a",
131
+ DN404Factory: "0x2615cfB676925949312B34069Ee477205e49Ae0A",
132
+ DopplerCreateXDeployer: "0x00000000005caf9bA78B1dFa98C47d9BF76Db8b8",
133
+ DopplerDeployer: "0x95e91A1A24834aeB4e8d253D9247ae1F4E36B085",
134
+ DopplerERC20V1: "0xeDf3f3981E98077591c1B909BCCff0e572bD50f8",
135
+ DopplerERC20V1Factory: "0xf1542Dd2D46394C16372FB00f2c339b53CeF2cE5",
117
136
  DopplerHookInitializer: "0xAa7f809BB3752f715fA2e418230667C382A56544",
118
- DopplerHookMigrator: "0x7BF319d8e969f7596B1Bc171Da9ce322f67Ae0c4",
137
+ DopplerHookMigrator: "0xb3B7ceE86eF22fe1c3212B48efeBc1AB4B7220C4",
119
138
  DopplerLensQuoter: "0xf4c22465532f64777FfcD7770831AEca38F35c04",
120
139
  GovernanceFactory: "0xDeb0447DAE3EB177c4dbA8bBCCCa25c8F273B7ef",
121
140
  LaunchpadGovernanceFactory: "0xdb036746D65DD52126b1915f1AdF555e6C5237Cf",
122
- LockableUniswapV3Initializer: "0xde8886A0019Ea060B8378Ee37b8A23b8117F29A3",
141
+ LockableUniswapV3Initializer: "0xD09dEd1867d885fcDB41ADC957165D04aE917683",
123
142
  NoOpGovernanceFactory: "0x85f37f74Ef2478A770318bc810177a9835911aD7",
124
143
  NoOpMigrator: "0xba2F330EDb16cD8056f5988d8CE19BbC63475A0e",
125
- Quoter: "0xc9Be59b344Ec66547A4C697aa374e959D59b0567",
126
- RehypeDopplerHookInitializer: "0x5F9eB5f6726Fe88D5e39867967F5b833d2fA3215",
127
- RehypeDopplerHookMigrator: "0x660740D7d6Fb2C8998Fa3ffF459cceB9Ac12C84B",
128
- StreamableFeesLockerV2: "0xEd822828B6109d16a9D362b8146a35789E0064f5",
144
+ Quoter: "0x0a4070Fd5FDac83E576ed6Bba30BE8db10B2299E",
145
+ RehypeDopplerHookInitializer: "0xe2AEbc987592593b667ec29178D0A83929Db78b6",
146
+ StreamableFeesLockerV2: "0xA8Bdf3A8e9415C4ec1FF55899c34105E0FD66375",
129
147
  SwapRestrictorDopplerHook: "0xC16c826F75338A5Ea626f94f8992191B4ce5abA2",
130
148
  TimelockFactory: "0x6076fdDFCaC0dD980e0350dfF5239feC3f86C578",
131
- TopUpDistributor: "0x46adee7595d48b1Ec53090e9bc78e1E69Fa0eF06",
132
- UniswapV2Locker: "0x63f6Efe03F25A8C6650b38d05C5a454051d642a5",
133
- UniswapV2MigratorSplit: "0xB05046cEa797c993FB5b583098B1c4682e9Da333",
134
- UniswapV4Initializer: "0x6cce158B6D1747617fc218592B4D60B239B957ea"
149
+ UniswapV2Locker: "0xEa7f0777a6FD7BB6Dfff290aE44154c75DAAa5cA",
150
+ UniswapV2MigratorSplit: "0x44E30C4724DB30E4170cBC160D17e1a1aFf2f21F",
151
+ UniswapV4Initializer: "0xFDFD7D27089f306eEF279b5DA6BFe878250cB6bb"
135
152
  },
136
153
  "84532": {
137
154
  Airlock: "0x3411306Ce66c9469BFF1535BA955503c4Bde1C6e",
138
155
  AirlockMultisigTestnet: "0x0abCf819FD57C9f0141628410fFC273405E44426",
139
156
  Bundler: "0xDdDDDd67579B73fDdFf301DB92Fd4A01afD4613a",
140
- DN404Factory: "0x98b0Aa2e0f134dbB3eb157b5646D387E6D55243a",
157
+ DN404Factory: "0xbD20597B6376E9056BbA15601e556EEF3eB44F83",
141
158
  DopplerCreateXDeployer: "0x0000000000f13Ab5b685F03A412A26719aB6bE60",
142
- DopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
143
- DopplerERC20V1: "0xDB7B520bb5C3a2C5d4871198081911359f93be87",
144
- DopplerERC20V1Factory: "0x89C261C05B5F9b6BcBA07C199b8DeE7cFaD45292",
159
+ DopplerDeployer: "0x1627fcA0e58Ec93a05501186b9C03EAb4ff95980",
160
+ DopplerERC20V1: "0x4f55DcE9D51cC23Ab2B1D1bF83f6e59faf059500",
161
+ DopplerERC20V1Factory: "0x44608064ee36d80AcfeA2423A93c2E4CCe0e8AC4",
145
162
  DopplerHookInitializer: "0xBDF938149ac6a781F94FAa0ed45E6A0e984c6544",
146
- DopplerHookMigrator: "0x1E40b0875DDa35f41E15cFB475403859B8c860c4",
163
+ DopplerHookMigrator: "0xF472D5790D8D363B7aA48FE196a170F02dB720c4",
147
164
  DopplerLensQuoter: "0x4a8d81Db741248a36D9eb3bc6eF648Bf798B47a7",
148
165
  GovernanceFactory: "0x9dBFaaDC8c0cB2c34bA698DD9426555336992e20",
149
166
  LaunchpadGovernanceFactory: "0x0902e7C7207df8ed6303Aef4382bcab181b5fBFA",
150
- LockableUniswapV3Initializer: "0x16AdA5Be50C3c2D94Af5fEae6b539C40A78Ad53c",
167
+ LockableUniswapV3Initializer: "0x6F8874B1A71516B20146552c671B9b8B1c69a93a",
151
168
  NoOpGovernanceFactory: "0x7bD798fafC99A3b17E261F8308A8C11B56935ea1",
152
169
  NoOpMigrator: "0xF11066abbd329ac4bBA39455340539322C222eb0",
153
- Quoter: "0xc20347a97646ed6e2B45DBfEcE372f68d928ec0a",
154
- RehypeDopplerHookInitializer: "0xAdB90eF4dc001CFB81ecADEd2CDbda7D18487606",
155
- RehypeDopplerHookMigrator: "0x5E2A91F8eBE288e0AA76a0C1A47877Ded801e90d",
156
- StreamableFeesLockerV2: "0xcE3212e6536F33cD6fbFEE265224131353Ca3D47",
170
+ Quoter: "0xE0e3FC24605D1a07D41DEf02DB1584d23106d7eb",
171
+ RehypeDopplerHookInitializer: "0xcbAc195F99df4433D7Bf07Df22993f55AF8c9A8e",
172
+ StreamableFeesLockerV2: "0x0a13aE3DbEB8D332987706FE581600D4bc1a98b7",
157
173
  TimelockFactory: "0x80F42ECCc91177D39E20f1A88A54D231c1b086a2",
158
- TopUpDistributor: "0x435312320C0330B1999746753551CdFbD83aD814",
159
- UniswapV2Locker: "0x06731e30df4B0209ED19C39Ba8eD253e17b0E495",
160
- UniswapV2MigratorSplit: "0xD7abA5f1d80a330a6fe9E96F7bA122710E0912d3",
161
- UniswapV4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad"
174
+ UniswapV2Locker: "0x270f7A3e488f26C1129b6EeC55ADbED4945946B7",
175
+ UniswapV2MigratorSplit: "0xEf253DaF7624BC1d76c5b98b24764F79cE2afA6B",
176
+ UniswapV4Initializer: "0x8239d2a4cE4a5EA94DFb489Ab0A13de51d3dEb8D"
162
177
  }
163
178
  };
164
179
  var WAD = 10n ** 18n;
@@ -205,8 +220,8 @@ var DEFAULT_V3_START_TICK = 175e3;
205
220
  var DEFAULT_V3_END_TICK = 225e3;
206
221
  var DEFAULT_V3_NUM_POSITIONS = 15;
207
222
  var DEFAULT_V3_FEE = 1e4;
208
- var DEFAULT_V3_INITIAL_VOTING_DELAY = 172800;
209
- var DEFAULT_V3_INITIAL_VOTING_PERIOD = 1209600;
223
+ var DEFAULT_V3_INITIAL_VOTING_DELAY = SECONDS_PER_DAY;
224
+ var DEFAULT_V3_INITIAL_VOTING_PERIOD = 7 * SECONDS_PER_DAY;
210
225
  var DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD = 0n;
211
226
  var DEFAULT_V3_VESTING_DURATION = BigInt(SECONDS_PER_YEAR);
212
227
  var DEFAULT_V3_INITIAL_SUPPLY = viem.parseEther("1000000000");
@@ -214,8 +229,8 @@ var DEFAULT_V3_NUM_TOKENS_TO_SELL = viem.parseEther("900000000");
214
229
  var DEFAULT_V3_YEARLY_MINT_RATE = viem.parseEther("0.02");
215
230
  var DEFAULT_V3_PRE_MINT = viem.parseEther("9000000");
216
231
  var DEFAULT_V3_MAX_SHARE_TO_BE_SOLD = viem.parseEther("0.35");
217
- var DEFAULT_V4_INITIAL_VOTING_DELAY = 7200;
218
- var DEFAULT_V4_INITIAL_VOTING_PERIOD = 50400;
232
+ var DEFAULT_V4_INITIAL_VOTING_DELAY = SECONDS_PER_DAY;
233
+ var DEFAULT_V4_INITIAL_VOTING_PERIOD = 7 * SECONDS_PER_DAY;
219
234
  var DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD = 0n;
220
235
  var DEFAULT_V4_YEARLY_MINT_RATE = viem.parseEther("0.02");
221
236
  var OPENING_AUCTION_BPS = 1e4;
@@ -288,10 +303,10 @@ var FEE_AMOUNT_MASK = 16777215;
288
303
  // src/evm/addresses.ts
289
304
  var CHAIN_IDS = {
290
305
  MAINNET: 1,
291
- ETH_SEPOLIA: 11155111,
292
306
  ARBITRUM: 42161,
293
307
  BASE: 8453,
294
308
  BASE_SEPOLIA: 84532,
309
+ BSC: 56,
295
310
  INK: 57073,
296
311
  ROBINHOOD: 4663,
297
312
  UNICHAIN: 130,
@@ -320,6 +335,7 @@ var ADDRESSES = {
320
335
  CHAIN_IDS.MAINNET,
321
336
  "DopplerERC20V1"
322
337
  ),
338
+ doppler404Factory: getGeneratedAddress(CHAIN_IDS.MAINNET, "DN404Factory"),
323
339
  v3Initializer: ZERO_ADDRESS,
324
340
  v3Quoter: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e",
325
341
  lockableV3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].LockableUniswapV3Initializer,
@@ -341,7 +357,6 @@ var ADDRESSES = {
341
357
  v4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
342
358
  v4MigratorHook: "0x4053D4fa966cbdCC20Ec62070aC8814De8bEE500",
343
359
  dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].DopplerHookMigrator,
344
- rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].RehypeDopplerHookMigrator,
345
360
  noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].NoOpMigrator,
346
361
  governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].GovernanceFactory,
347
362
  noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].NoOpGovernanceFactory,
@@ -351,7 +366,6 @@ var ADDRESSES = {
351
366
  CHAIN_IDS.MAINNET,
352
367
  "StreamableFeesLockerV2"
353
368
  ),
354
- topUpDistributor: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].TopUpDistributor,
355
369
  universalRouter: "0x66a9893cc07d91d95644aedd05d03f95e1dba8af",
356
370
  permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
357
371
  bundler: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MAINNET].Bundler,
@@ -361,34 +375,6 @@ var ADDRESSES = {
361
375
  uniswapV3Factory: "0x1F98431c8aD98523631AE4a59f267346ea31F984",
362
376
  uniswapV4Quoter: "0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203"
363
377
  },
364
- [CHAIN_IDS.ETH_SEPOLIA]: {
365
- airlock: "0xDe3599a2eC440B296373a983C85C365DA55d9dFA",
366
- tokenFactory: "0xe7Df2A4520C26a2D4Dedb3a7585BFBcd30eABA6e",
367
- derc20V2Factory: "0x16F5ACB64F4FA17296E942C51d3395aDC318f9e1",
368
- derc20V2Implementation: "0x4BBfed1c27CDE12eF6638251D81ab4e3be7556b7",
369
- v3Initializer: ZERO_ADDRESS,
370
- v3Quoter: ZERO_ADDRESS,
371
- v4Initializer: "0x53b4c21a6Cb61D64F636ABBfa6E8E90E6558e8ad",
372
- v4ScheduledMulticurveInitializer: "0xF84378C9F39e0FF267f3101c88773359c5393876",
373
- dopplerHookInitializer: "0xBDF938149ac6a781F94FAa0ed45E6A0e984c6544",
374
- rehypeDopplerHookInitializer: "0xBF4195ab0B03e1eB3345dd1e83BeD7650b1ed123",
375
- rehypeDopplerHook: "0xBF4195ab0B03e1eB3345dd1e83BeD7650b1ed123",
376
- dopplerLens: ZERO_ADDRESS,
377
- dopplerDeployer: "0xb35469ee64A87Afd19B31615094fE3962d73e421",
378
- poolManager: "0xE03A1074c86CFeDd5C142C4F04F1a1536e203543",
379
- v2Migrator: "0x765875bff87614cE0581ee73B9fa663B71F3DfF2",
380
- v4Migrator: "0x0820A4D0173C17Ece283f7bDaAF0f8876eB205f5",
381
- dopplerHookMigrator: "0x1E40b0875DDa35f41E15cFB475403859B8c860c4",
382
- rehypeDopplerHookMigrator: "0xea95DfdF69B90c65C827070852F7039D6aF6Dd7b",
383
- noOpMigrator: "0x233A71A7bB928b1357A1Ebf454298320989Ca5B5",
384
- governanceFactory: ZERO_ADDRESS,
385
- noOpGovernanceFactory: "0xddAE8B3eD08184682f7Bc32B74d943cEEfEab638",
386
- streamableFeesLocker: "0xe24FC2F7191e850e2D4514aBb4d39305b1871eC6",
387
- universalRouter: "0x3A9D48AB9751398BbFa63ad67599Bb04e4BdF98b",
388
- permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
389
- weth: "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",
390
- uniswapV4Quoter: "0x61b3f2011a92d183c7dbadbda940a7555ccf9227"
391
- },
392
378
  [CHAIN_IDS.ARBITRUM]: {
393
379
  airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].Airlock,
394
380
  tokenFactory: ZERO_ADDRESS,
@@ -419,7 +405,6 @@ var ADDRESSES = {
419
405
  v2MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].UniswapV2MigratorSplit,
420
406
  v4Migrator: ZERO_ADDRESS,
421
407
  dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].DopplerHookMigrator,
422
- rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].RehypeDopplerHookMigrator,
423
408
  noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].NoOpMigrator,
424
409
  governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].GovernanceFactory,
425
410
  noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].NoOpGovernanceFactory,
@@ -429,8 +414,8 @@ var ADDRESSES = {
429
414
  CHAIN_IDS.ARBITRUM,
430
415
  "StreamableFeesLockerV2"
431
416
  ),
432
- topUpDistributor: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].TopUpDistributor,
433
417
  universalRouter: "0xA51afAFe0263b40EdaEf0Df8781eA9aa03E381a3",
418
+ univ2Router02: "0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24",
434
419
  permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
435
420
  bundler: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ARBITRUM].Bundler,
436
421
  weth: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
@@ -438,6 +423,52 @@ var ADDRESSES = {
438
423
  uniswapV3Factory: "0x1F98431c8aD98523631AE4a59f267346ea31F984",
439
424
  uniswapV4Quoter: "0x3972C00f7ed4885e145823eb7C655375d275A1C5"
440
425
  },
426
+ [CHAIN_IDS.BSC]: {
427
+ airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].Airlock,
428
+ tokenFactory: ZERO_ADDRESS,
429
+ dopplerERC20V1Factory: getGeneratedAddress(
430
+ CHAIN_IDS.BSC,
431
+ "DopplerERC20V1Factory"
432
+ ),
433
+ dopplerERC20V1Implementation: getGeneratedAddress(
434
+ CHAIN_IDS.BSC,
435
+ "DopplerERC20V1"
436
+ ),
437
+ doppler404Factory: getGeneratedAddress(CHAIN_IDS.BSC, "DN404Factory"),
438
+ v3Initializer: ZERO_ADDRESS,
439
+ v3Quoter: "0x78D78E420Da98ad378D7799bE8f4AF69033EB077",
440
+ lockableV3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].LockableUniswapV3Initializer,
441
+ v4Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].UniswapV4Initializer,
442
+ dopplerHookInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].DopplerHookInitializer,
443
+ rehypeDopplerHookInitializer: getRehypeDopplerHookInitializerAddress(
444
+ CHAIN_IDS.BSC
445
+ ),
446
+ rehypeDopplerHook: getRehypeDopplerHookInitializerAddress(CHAIN_IDS.BSC),
447
+ dopplerLens: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].DopplerLensQuoter,
448
+ dopplerDeployer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].DopplerDeployer,
449
+ poolManager: "0x28e2ea090877bf75740558f6bfb36a5ffee9e9df",
450
+ v2Migrator: ZERO_ADDRESS,
451
+ v2MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].UniswapV2MigratorSplit,
452
+ v4Migrator: ZERO_ADDRESS,
453
+ dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].DopplerHookMigrator,
454
+ noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].NoOpMigrator,
455
+ governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].GovernanceFactory,
456
+ noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].NoOpGovernanceFactory,
457
+ launchpadGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].LaunchpadGovernanceFactory,
458
+ streamableFeesLocker: ZERO_ADDRESS,
459
+ streamableFeesLockerV2: getGeneratedAddress(
460
+ CHAIN_IDS.BSC,
461
+ "StreamableFeesLockerV2"
462
+ ),
463
+ universalRouter: "0x1906c1d672b88cd1b9ac7593301ca990f94eae07",
464
+ univ2Router02: "0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24",
465
+ permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
466
+ bundler: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BSC].Bundler,
467
+ weth: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
468
+ uniswapV2Factory: "0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6",
469
+ uniswapV3Factory: "0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7",
470
+ uniswapV4Quoter: "0x9f75dd27d6664c475b90e105573e550ff69437b0"
471
+ },
441
472
  [CHAIN_IDS.BASE]: {
442
473
  airlock: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].Airlock,
443
474
  tokenFactory: "0xf0B5141dD9096254B2ca624dff26024f46087229",
@@ -479,7 +510,6 @@ var ADDRESSES = {
479
510
  v4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
480
511
  v4MigratorHook: "0xD6FECFF347c6203A41874e8D77dE669B54e7A500",
481
512
  dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].DopplerHookMigrator,
482
- rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].RehypeDopplerHookMigrator,
483
513
  noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].NoOpMigrator,
484
514
  governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].GovernanceFactory,
485
515
  noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].NoOpGovernanceFactory,
@@ -489,7 +519,6 @@ var ADDRESSES = {
489
519
  CHAIN_IDS.BASE,
490
520
  "StreamableFeesLockerV2"
491
521
  ),
492
- topUpDistributor: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE].TopUpDistributor,
493
522
  universalRouter: "0x6ff5693b99212da76ad316178a184ab56d299b43",
494
523
  univ2Router02: "0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24",
495
524
  uniswapV2Factory: "0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6",
@@ -540,7 +569,6 @@ var ADDRESSES = {
540
569
  v4Migrator: "0xEEe0eCCb54398ce371CAACBCEf076d3Ed597DDb3",
541
570
  v4MigratorSplit: "0xa1b06BE4f2fC347d194240D79EDa9F40CCAd9732",
542
571
  dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].DopplerHookMigrator,
543
- rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].RehypeDopplerHookMigrator,
544
572
  v4MigratorHook: "0x127cAAAd598Ffa97577940b0a5c3b6150019E500",
545
573
  noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].NoOpMigrator,
546
574
  governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].GovernanceFactory,
@@ -551,7 +579,6 @@ var ADDRESSES = {
551
579
  CHAIN_IDS.BASE_SEPOLIA,
552
580
  "StreamableFeesLockerV2"
553
581
  ),
554
- topUpDistributor: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.BASE_SEPOLIA].TopUpDistributor,
555
582
  universalRouter: "0x492E6456D9528771018DeB9E87ef7750EF184104",
556
583
  univ2Router02: "0x1689E7B1F10000AE47eBfE339a4f69dECd19F602",
557
584
  uniswapV2Factory: "0x7Ae58f10f7849cA6F5fB71b7f45CB416c9204b1e",
@@ -621,7 +648,6 @@ var ADDRESSES = {
621
648
  v2MigratorSplit: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ROBINHOOD].UniswapV2MigratorSplit,
622
649
  v4Migrator: ZERO_ADDRESS,
623
650
  dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ROBINHOOD].DopplerHookMigrator,
624
- rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ROBINHOOD].RehypeDopplerHookMigrator,
625
651
  noOpMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ROBINHOOD].NoOpMigrator,
626
652
  governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ROBINHOOD].GovernanceFactory,
627
653
  noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ROBINHOOD].NoOpGovernanceFactory,
@@ -631,8 +657,8 @@ var ADDRESSES = {
631
657
  CHAIN_IDS.ROBINHOOD,
632
658
  "StreamableFeesLockerV2"
633
659
  ),
634
- topUpDistributor: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ROBINHOOD].TopUpDistributor,
635
660
  universalRouter: "0x8876789976decbfcbbbe364623c63652db8c0904",
661
+ univ2Router02: "0x89e5db8b5aa49aa85ac63f691524311aeb649eba",
636
662
  permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
637
663
  bundler: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.ROBINHOOD].Bundler,
638
664
  weth: "0x0bd7d308f8e1639fab988df18a8011f41eacad73",
@@ -745,6 +771,10 @@ var ADDRESSES = {
745
771
  CHAIN_IDS.MONAD_MAINNET,
746
772
  "DopplerERC20V1"
747
773
  ),
774
+ doppler404Factory: getGeneratedAddress(
775
+ CHAIN_IDS.MONAD_MAINNET,
776
+ "DN404Factory"
777
+ ),
748
778
  v3Initializer: ZERO_ADDRESS,
749
779
  v3Quoter: "0x661E93cca42AfacB172121EF892830cA3b70F08d",
750
780
  lockableV3Initializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].LockableUniswapV3Initializer,
@@ -761,7 +791,6 @@ var ADDRESSES = {
761
791
  governanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].GovernanceFactory,
762
792
  noOpGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].NoOpGovernanceFactory,
763
793
  launchpadGovernanceFactory: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].LaunchpadGovernanceFactory,
764
- topUpDistributor: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].TopUpDistributor,
765
794
  v4ScheduledMulticurveInitializer: "0xCe3099B2F07029b086E5e92a1573C5f5A3071783",
766
795
  dopplerHookInitializer: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].DopplerHookInitializer,
767
796
  rehypeDopplerHookInitializer: getRehypeDopplerHookInitializerAddress(
@@ -781,9 +810,9 @@ var ADDRESSES = {
781
810
  permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
782
811
  bundler: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].Bundler,
783
812
  dopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].DopplerHookMigrator,
784
- rehypeDopplerHookMigrator: GENERATED_DOPPLER_DEPLOYMENTS[CHAIN_IDS.MONAD_MAINNET].RehypeDopplerHookMigrator,
785
813
  weth: "0x3bd359c1119da7da1d913d1c4d2b7c461115433a",
786
814
  // INFO: this is wmon, but we treat it as weth because mon is native
815
+ uniswapV3Factory: "0x204faca1764b154221e35c0d20abb3c525710498",
787
816
  uniswapV4Quoter: "0xa222dd357a9076d1091ed6aa2e16c9742dd26891"
788
817
  }
789
818
  };
@@ -1377,10 +1406,10 @@ var dopplerDN404Abi = [
1377
1406
  ];
1378
1407
 
1379
1408
  // src/evm/abis/bytecodes/doppler.ts
1380
- var doppler_default = "0x60a06040523461057b57604051601f615c0338819003918201601f19168301916001600160401b0383118484101761057f578084926101c09460405283398101031261057b5780516001600160a01b038116810361057b5760208201516040830151906060840151608085015160a08601519061007e60c088016105b3565b9161008b60e089016105b3565b91610100890151946100a06101208b016105b3565b976101408b0151978815988915810361057b576101608d01516101808e01516001600160a01b0381169e919d91908f0361057b576101a001519062ffffff821680920361057b576080525f6101a06100f6610593565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a0610154610593565b6001815260016020820152600160408201528260608201528260808201528260a0820152600160c0820152600160e082015260016101008201528261012082015282610140820152826101608201528261018082015201526120003016151560011480159061056a575b8015610559575b801561054c575b801561053f575b8015610532575b8015610522575b8015610512575b8015610502575b80156104f6575b80156104ea575b80156104de575b80156104d2575b80156104c6575b6104b35762ffffff1960165416176016558442116104a4578660020b8860020b91818303610463575b5050508484101561045457838503858111610440578a60020b5f811380159061042b575b61041c578915610408578982066103f9578c156103eb57600f8d116103eb578484116103dc5761029861029d928b81046017558b6105c1565b610658565b628000008110156103cf5762ffffff19601854169062ffffff1617601855600d55600e55600f5560105560115562ffffff6012549160181b65ffffff0000001692169065ffffffffffff1916171760125560135562ffffff63ff000000601454921560181b1692169063ffffffff1916171760145560155560018060a01b0319600c541617600c5560405161552f90816106d48239608051818181601c01528181610205015281816102a80152818161045c0152818161050c0152818161098701528181610a1e01528181610af501528181610b9201528181610c5a01528181610e8301528181610f3a0152818161103d015281816110b201528181611d2c01528181611de40152818161217801528181613b8301528181613c4d01528181613fe9015281816140f40152614be40152f35b6335278d125f526004601cfd5b638cc99b7b60e01b5f5260045ffd5b6287e39960e61b5f5260045ffd5b6388ac089760e01b5f5260045ffd5b634e487b7160e01b5f52601260045260245ffd5b6312469eb560e11b5f5260045ffd5b5061043a81610298848d6105c1565b1561025f565b634e487b7160e01b5f52601160045260245ffd5b63536a71af60e01b5f5260045ffd5b8061049b575b610483578a9182610491575b5050610483575f808061023b565b6264847d60e41b5f5260045ffd5b1390505f80610475565b50808212610469565b632ca4094f60e21b5f5260045ffd5b630732d7b560e51b5f523060045260245ffd5b50600130161515610212565b5060023016151561020b565b50600430161515610204565b506008301615156101fd565b506010301615156101f6565b50602030161515600114156101ef565b50604030161515600114156101e8565b50608030161515600114156101e1565b50610100301615156101da565b50610200301615156101d3565b50610400301615156101cc565b5061080030161515600114156101c5565b5061100030161515600114156101be565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b0381118382101761057f57604052565b51908160020b820361057b57565b90670de0b6b3a76400008202905f19670de0b6b3a764000084099282808510940393808503948584111561057b571461065157670de0b6b3a764000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b808202905f1983820990828083109203918083039283670de0b6b3a7640000111561057b57146106c2577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a76400009150049056fe608080604052600436101561005b575b50361561001a575f80fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361004c57005b6393c866c160e01b5f5260045ffd5b5f905f3560e01c908163182148ef146111155750806318cb1700146110f357806321d0ee701461109f578063259982e51461102a578063392e53cd1461100857806339518b5e14610feb578063514ea4bf14610f96578063575e24b414610ee357806357d775f814610ec65780636c2bbe7e14610e705780636c47a6c314610e535780636fe7e6eb14610c19578063897479cb14610bfb57806390ebab0a14610bdd57806391dd734614610b5e5780639ce110d714610b355780639f063efc14610ade578063a4dee15514610ab9578063b137392914610a98578063b356603014610a74578063b47b2fb1146109c6578063b6a8b0fa14610970578063c19d93fb14610921578063c4e833ce146107b6578063c70dfb4f14610795578063ce5494bb146104cb578063d0c52e21146104a9578063d65b4cb91461048b578063dc4c90d314610446578063dc98354e14610276578063dcf93f3214610250578063e1b4af69146101ee5763ee4644300361000f57346101eb57806003193601126101eb576020600d54604051908152f35b80fd5b50346101eb57600490610200366112dc565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303925061024491505057630a85dc2960e01b8152fd5b63570c108560e11b8152fd5b50346101eb57806003193601126101eb57602060ff60145460181c166040519015158152f35b50346101eb5760e03660031901126101eb5761029061116b565b5060a03660231901126101eb576102a561128e565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036104375760085460ff81166104295760ff19166001176008556001600160a01b03602435908116908181036104255750600980546001600160a01b0319169190911790556044356001600160a01b038116908181036104255750600a80546001600160a01b03191691909117905560643562ffffff8116810361042157600a5461035a612061565b60b81b62ffffff60b81b169162ffffff60a01b9060a01b169065ffffffffffff60a01b19161717600a5560a43560018060a01b03811680910361042157600b80546001600160a01b031916919091179055601e6103b5612061565b60020b136104125760145460020b6103cb612061565b60020b9081156103fe570760020b6103ef57604051636e4c1aa760e11b8152602090f35b6312469eb560e11b8152600490fd5b634e487b7160e01b83526012600452602483fd5b63013840ad60e51b8152600490fd5b5080fd5b8280fd5b62dc149f60e41b8252600482fd5b63570c108560e11b8152600490fd5b50346101eb57806003193601126101eb576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101eb57806003193601126101eb576020600f54604051908152f35b50346101eb57806003193601126101eb5760ff60209154166040519015158152f35b50346101eb5760203660031901126101eb576104e561116b565b600c546001600160a01b031633036107865760ff825460081c161580610765575b610756577f000000000000000000000000000000000000000000000000000000000000000061059d8361057561058360405161054181611333565b610549611f3d565b815260018060a01b03871660208201528360408201526001606082015260405192839160208301611f8a565b03601f1981018352826113b4565b604051809381926348c8949160e01b8352600483016112b2565b0381836001600160a01b0387165af190811561074b57916105d785926105e2959460e09791610729575b50602080825183010191016114d8565b600695919554613282565b9161064160018060a01b0360095416926106306105fe856145cf565b948761061f8761061760018060a01b03600a54166145cf565b9a8b94614611565b600a546001600160a01b0316614611565b60a061063a611f3d565b2090614754565b5050600954600a5492976001600160a01b039182169791909316946106879250610678906001600160801b03608086901d16611472565b926001600160801b0316611472565b906001600160801b0381111561071a57506001600160801b03915b506001600160801b0381111561070b57506001600160801b03935b604080516001600160a01b0397909716875260208701919091526001600160801b03608085811d821692880192909252918216606087015285019190915290811660a08401521660c0820152f35b6001600160801b0316936106bd565b6001600160801b0316916106a2565b61074591503d8086833e61073d81836113b4565b810190611fcb565b5f6105c7565b6040513d86823e3d90fd5b63051a2a5560e51b8252600482fd5b50600454600e5411158061077a575b15610506565b50601154421015610774565b638341a67960e01b8252600482fd5b50346101eb57806003193601126101eb57602060125460020b604051908152f35b50346101eb57806003193601126101eb576020816101c0926101a06040516107dd81611362565b82815282858201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201528060405161083b81611362565b60018152838101600181526040820160018152606083018481526080840185815260a0850186815260c08601906001825260e087019260018452610100880194600186526101208901968a88526101408a01988b8a526101a06101608c019b8d8d5261018081019d8e52019c8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b50346101eb57806003193601126101eb5760c064ffffffffff600154166002546003546004546005549160065493604051958652602086015260408501526060840152608083015260a0820152f35b50346101eb57600490610982366112dc565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330392506102449150505763567d91d160e01b8152fd5b50346101eb576101603660031901126101eb576109e161116b565b5060a03660231901126101eb5760603660c31901126101eb57610144356001600160401b03811161042157610a1a903690600401611195565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610437576040610a5a610124356140d7565b82516001600160e01b03199092168252600f0b6020820152f35b50346101eb57806003193601126101eb57602060125460181c60020b604051908152f35b50346101eb57806003193601126101eb57602060145460020b604051908152f35b50346101eb57806003193601126101eb5760ff6020915460081c166040519015158152f35b50346101eb57600490610af036611225565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330393506102449250505057630a85dc2960e01b8152fd5b50346101eb57806003193601126101eb57600c546040516001600160a01b039091168152602090f35b50346101eb5760203660031901126101eb576004356001600160401b03811161042157610b8f903690600401611195565b917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361043757610bd9610bcd848461168f565b604051918291826112b2565b0390f35b50346101eb57806003193601126101eb576020601554604051908152f35b50346101eb57806003193601126101eb576020600e54604051908152f35b5034610e4057610100366003190112610e4057610c3461116b565b60a0366023190112610e4057610c4861128e565b5060e435908160020b809203610e40577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169133839003610e445762ffffff6016541691833b15610e4057604051635275965160e01b815292602435906001600160a01b038216808303610e40576004860152604435946001600160a01b038616808703610e4057602482015260643562ffffff8116808203610e40576044830152608435918260020b808403610e4057606482015260a435936001600160a01b038516808603610e4057608483015260a48201525f8160c481838d5af18015610e3557610e07575b509488979461057594610da6948a9994610dc29960405196610d5a88611333565b60405194610d678661137e565b85526020850152604084015260608301526080820152835260018060a01b03166020830152604082015285606082015260405192839160208301611f8a565b6040519485809481936348c8949160e01b8352600483016112b2565b03925af18015610dfc57610de3575b604051636fe7e6eb60e01b8152602090f35b610df6913d8091833e61073d81836113b4565b5f610dd1565b6040513d84823e3d90fd5b610da69399509461057594610e245f610dc299949a959b986113b4565b5f9a94509450949791969095610d39565b6040513d5f823e3d90fd5b5f80fd5b63570c108560e11b5f5260045ffd5b34610e40575f366003190112610e40576020601154604051908152f35b34610e4057610e7e36611225565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633039350610e449250505057630a85dc2960e01b5f5260045ffd5b34610e40575f366003190112610e40576020601354604051908152f35b34610e4057610140366003190112610e4057610efd61116b565b5060a0366023190112610e405760603660c3190112610e4057610124356001600160401b038111610e4057610f36903690600401611195565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610e4457606062ffffff610f766120bd565b906040939293519363ffffffff60e01b1684526020840152166040820152f35b34610e40576020366003190112610e40576004355f526007602052608060405f205460ff604051918060020b83528060181c60020b6020840152600180851b038160301c16604084015260b01c166060820152f35b34610e40575f366003190112610e40576020601054604051908152f35b34610e40575f366003190112610e4057602060ff600854166040519015158152f35b34610e4057611038366111c2565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633039050610e4457306001600160a01b03909116036110905760405163259982e560e01b8152602090f35b636d1ed89b60e01b5f5260045ffd5b34610e40576110ad366111c2565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633039150610e44905057630a85dc2960e01b5f5260045ffd5b34610e40575f366003190112610e4057602062ffffff60165416604051908152f35b34610e40575f366003190112610e4057600954600a54600b546001600160a01b039283168452818316602085015260a082811c62ffffff16604086015260b89290921c60020b6060850152909116608083015290f35b600435906001600160a01b0382168203610e4057565b35906001600160a01b0382168203610e4057565b9181601f84011215610e40578235916001600160401b038311610e405760208381860195010111610e4057565b90610160600319830112610e40576004356001600160a01b0381168103610e40579160a0602319820112610e4057602491608060c319830112610e405760c49161014435906001600160401b038211610e405761122191600401611195565b9091565b906101a0600319830112610e40576004356001600160a01b0381168103610e40579160a0602319820112610e4057602491608060c319830112610e405760c4916101443591610164359161018435906001600160401b038211610e405761122191600401611195565b60c435906001600160a01b0382168203610e4057565b35908160020b8203610e4057565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b610120600319820112610e40576004356001600160a01b0381168103610e40579160a0602319830112610e405760249160c4359160e4359161010435906001600160401b038211610e405761122191600401611195565b608081019081106001600160401b0382111761134e57604052565b634e487b7160e01b5f52604160045260245ffd5b6101c081019081106001600160401b0382111761134e57604052565b60a081019081106001600160401b0382111761134e57604052565b606081019081106001600160401b0382111761134e57604052565b601f909101601f19168101906001600160401b0382119082101761134e57604052565b359062ffffff82168203610e4057565b91908260a0910312610e40576040516113ff8161137e565b608061144b81839561141081611181565b855261141e60208201611181565b602086015261142f604082016113d7565b6040860152611440606082016112a4565b606086015201611181565b910152565b600201908160021161145e57565b634e487b7160e01b5f52601160045260245ffd5b9190820180921161145e57565b9060405161148c81611333565b9154600281810b8452601882901c900b6020840152603081901c6001600160801b0316604084015260b01c60ff166060830152565b600f0b60016001607f1b0319811461145e575f0390565b9190826040910312610e40576020825192015190565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b9061016092611542836060936114ee565b805160020b60a0840152602081015160020b60c0840152604081015160e084015201516101008201526101406101208201525f6101408201520190565b6001600160a01b03918216815291166020820152604081019190915260600190565b9190820391821161145e57565b6001600160401b03811161134e5760051b60200190565b906115cf826115ae565b6115dc60405191826113b4565b82815280926115ed601f19916115ae565b01905f5b8281106115fd57505050565b60209060405161160c81611333565b5f81525f838201525f60408201525f6060820152828285010152016115f1565b8051156116395760200190565b634e487b7160e01b5f52603260045260245ffd5b8051600110156116395760400190565b80518210156116395760209160051b010190565b9081549060181b65ffffff000000169065ffffff0000001916179055565b919082015f61010084830312610e40576116b5604051926116af84611333565b856113e7565b938483526116c560a08201611181565b80602085015260e06116d960c084016112a4565b92836040870152013580151594858203610e40576060015260018060a01b03169060020b92611c4e5750600164ffffffffff1981541617600155606084019261173c845160020b61173761172c85614ef6565b60125460020b61209f565b614f2e565b6014549060ff8260181c165f14611c3b5761175a9160020b9061209f565b945b61176584613378565b61176e85613378565b956040519561177c87611399565b808752602087018181526118d8604089019a888c526118d0600d54956117a06136a5565b956118088c6118036117fa6117db6117d26117c96117c46117bf61480d565b614ea2565b6136c3565b60135490614e80565b60105490614ebe565b6117f46117eb60105480936115a1565b916011546115a1565b90615033565b600d5490615113565b6136d4565b8c929083811315611c2c5761186b9293508981115f14611c275750885b928d60185460020b835160020b8082135f14611c1f5750905b50818a5260145460181c60ff1615611c105761185f9150895160020b61209f565b905b5160020b90614f2e565b60020b60208701525b855160020b966020870197885160020b14155f14611c055760ff60145460181c166118c5836118a68a5160020b613378565b8b516001600160801b039491906118bf9060020b613378565b91614fcc565b1660408801526115a1565b90848861374b565b996118eb6118e68c51611450565b6115c5565b985160020b915160020b9060018060801b03905116906040519261190e84611333565b8352602083015260408201526001606082015261192a8861162c565b526119348761162c565b50805160020b915160020b90604060018060801b0391015116906040519261195b84611333565b835260208301526040820152600260608201526119778661164d565b526119818561164d565b50835b8751811015611a3457611997818961165d565b515160020b60206119a8838b61165d565b51015160020b6001600160801b0360406119c2858d61165d565b51015116836003019182600311611a2057611a1992600195949260ff92604051946119ec86611333565b855260208501526040840152166060820152611a0783611450565b90611a12828b61165d565b528861165d565b5001611984565b634e487b7160e01b89526011600452602489fd5b50611a429293969585613a82565b611a4b8261162c565b516001855260076020526040852090805162ffffff198354169062ffffff16178255611a7e602082015160020b83611671565b60408101518254606090920151600160301b600160b81b031990921660309190911b600160301b600160b01b03161760b09190911b60ff60b01b16179055611ac58261164d565b516002855260076020526040852090805162ffffff198354169062ffffff16178255611af8602082015160020b83611671565b60408101518254606090920151600160301b600160b81b031990921660309190911b600160301b600160b01b03161760b09190911b60ff60b01b16179055835b8351811015611be557611b53611b4d82611450565b8461165d565b518160030180600311611bd1579060019291875260076020526040872090805162ffffff198354169062ffffff16178255611b95602082015160020b83611671565b604081015190825490606060ff60b01b91015160b01b16918560301b8660b01b039060301b16908560301b8660b81b0319161717905501611b38565b634e487b7160e01b87526011600452602487fd5b509291505060405190611bf96020836113b4565b81525f36602083013790565b8b60408801526115a1565b611c199161335b565b90611861565b90509061183e565b611825565b50508087526020870152611874565b611c489160020b9061335b565b9461175c565b925f9250829160015b6015546003018060031161145e57811015611ddc57805f526007602052611c8060405f2061147f565b60408101516001600160801b031680611c9e575b5050600101611c57565b611d279160409160ff6014999598995460181c1691825f14611dce57805160020b925b15611db95760ff6060611ce3611cde602085015160020b95613263565b6114c1565b9201511691845193611cf485611333565b60020b845260020b6020840152600f0b838301526060820152815180938192632d35e7ed60e11b83528c60048401611531565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610e3557600192611d7e925f905f92611d86575b50611d789192613282565b96613282565b93905f611c94565b611d789250611dac915060403d8111611db2575b611da481836113b4565b8101906114d8565b91611d6d565b503d611d9a565b60ff6060611ce3611cde845160020b95613263565b602081015160020b92611cc1565b5091929390947f000000000000000000000000000000000000000000000000000000000000000091611e1860018060a01b0383511630856132c4565b926020830192611e3260018060a01b0385511630846132c4565b945f8113611ed6575b5050848413611e6a575b5050505050604051916020830152604082015260408152611e676060826113b4565b90565b91516001600160a01b039283169216823b15611ed25791611ea6939185809460405196879586948593630b0d9c0960e01b85526004850161157f565b03925af18015610dfc57611ebd575b808080611e45565b611ec88280926113b4565b6101eb5780611eb5565b8480fd5b90516001600160a01b0383811692911690823b15610e4057611f1392855f809460405196879586948593630b0d9c0960e01b85526004850161157f565b03925af18015610e3557611f28575b80611e3b565b611f359195505f906113b4565b5f935f611f22565b60405190611f4a8261137e565b6009546001600160a01b039081168352600a54808216602085015260a081901c62ffffff16604085015260b81c60020b6060840152600b54166080830152565b91909160e06060610100830194611fa28482516114ee565b60208101516001600160a01b031660a0850152604081015160020b60c085015201511515910152565b602081830312610e40578051906001600160401b038211610e40570181601f82011215610e40578051906001600160401b03821161134e576040519261201b601f8401601f1916602001856113b4565b82845260208383010111610e4057815f9260208093018386015e8301015290565b600f91820b910b019060016001607f1b0319821260016001607f1b0383131761145e57565b6084358060020b8103610e405790565b60020b627fffff19811461145e575f0390565b60020b60010190627fffff8213627fffff1983121761145e57565b9060020b9060020b0190627fffff198212627fffff83131761145e57565b5f80549160ff8360081c16613254576010544210613245576120dd61480d565b64ffffffffff600154161015613234575f9260115442101580613229575b612e7e575b509060ff5f5416155f14612e105761211661480d565b9060015461212b64ffffffffff8216846115a1565b64ffffffffff1990911664ffffffffff84161760015560035460025f526007602052946121645f8051602061550383398151915261147f565b9461219c60a06121753660246113e7565b207f0000000000000000000000000000000000000000000000000000000000000000614754565b505050946121a986614841565b608435978860020b90818a14159283610e40578a6121c691614f2e565b905f916121d68d600554906136d4565b5f198a0194908a861161145e575f8f966121f26121f791613a72565b614fac565b80971115911280612e09575b15612cac575050506122249192505160020b9161221e615332565b90614ebe565b955b60018111612c165750612262908a60055561225c670de0b6b3a764000061224f89600254614ebe565b9880612c0d575b05614ef6565b9061209f565b90612c09578761227191614f2e565b9061228d8861173761172c670de0b6b3a76400005f9905614ef6565b9760145460ff8160181c165f14612bf6576122ab9060020b8a61209f565b955b8960ff60145460181c16809b811580612be6575b15612baa57505050612ba6576122d7908361209f565b945b6122e283613378565b986122ec87613378565b908b15612b9d5715612aea5760016123058c8c84615420565b91818060a01b038c1690828060a01b0316038060ff1d9081011891818060801b031661233183826150ca565b928260601b9109151516015b975b60155461234e6118e682611450565b9060018a52600760205261236460408b2061147f565b61236d8361162c565b526123778261162c565b5060028a52600760205261238d60408b2061147f565b6123968361164d565b526123a08261164d565b50895b818110612aa25750506123c1906123bb3660246113e7565b90614afa565b5060145460181c60ff1699908a156129fc576044356001600160a01b03811681036129f857612402906123f3906145cf565b6001600160801b038316611472565b6006549061241a906001600160801b038316906115a1565b916024356001600160a01b03811681036129f4579e6118e69f936124728e969461245d8c9561244b89879a506145cf565b9060801d6001600160801b0316611472565b60809190911d6001600160801b0316906115a1565b9e5b61247f3660246113e7565b906124886136a5565b958361299457505050505060020b80825260208201528260408201525b604081018051909c6125ab916125a391612591916001600160801b031615612985575b6124d33660246113e7565b906124fa6124df6136a5565b976118036117fa6117db6117d26117c96117c46117bf61480d565b88808213156129715750818111156129685750612555815b928d606060185460020b920191825160020b8082135f146129605750905b60020b90818b5260ff60145460181c165f14611c105761185f91508a5160020b61209f565b60020b60208801525b865160020b976020880198895160020b14155f14612956575060ff60145460181c166118c5836118a68a5160020b613378565b878561259e3660246113e7565b61374b565b9e8f51611450565b9b6020825160020b92015160020b9060018060801b0390511690604051926125d284611333565b835260208301526040820152600160608201526125ee8c61162c565b526125f88b61162c565b50805160020b915160020b90604060018060801b0391015116906040519261261f84611333565b8352602083015260408201526002606082015261263b8a61164d565b526126458961164d565b50875b8b518110156126f9578b602061266d83612662818561165d565b515160020b9361165d565b51015160020b8d60406126878560018060801b039361165d565b510151168360030191826003116126e5579260ff6126de938f9360019796604051946126b286611333565b8552602085015260408401521660608201526126d76126d085611450565b809361165d565b528c61165d565b5001612648565b634e487b7160e01b8d52601160045260248dfd5b50612719919293949596999a979a6127123660246113e7565b918a613a82565b6127228761162c565b5160018a52600760205260408a2090805162ffffff198354169062ffffff16178255612755602082015160020b83611671565b60408101518254606090920151600160301b600160b81b031990921660309190911b600160301b600160b01b03161760b09190911b60ff60b01b1617905561279c8761164d565b5160028a52600760205260408a2090805162ffffff198354169062ffffff161782556127cf602082015160020b83611671565b60408101518254606090920151600160301b600160b81b031990921660309190911b600160301b600160b01b03161760b09190911b60ff60b01b16179055885b6015548110156128fc578651811061285957806003018060031161284557906001918b5260076020528a60408120555b0161280f565b634e487b7160e01b8b52601160045260248bfd5b61286b61286582611450565b8961165d565b5181600301806003116128e85790600192918c52600760205260408c2090805162ffffff198354169062ffffff161782556128ad602082015160020b83611671565b604081015190825490606060ff60b01b91015160b01b16918560301b8660b01b039060301b16908560301b8660b81b0319161717905561283f565b634e487b7160e01b8c52601160045260248cfd5b5090919295507f223157ec47d7bd04fa3ed10c0a8adb38faf97b51ec856a777425a2e39253bd739450608093966040519360020b845260020b602084015260020b60408301526060820152a15b6315d7892d60e21b929190565b60408801526115a1565b905090612530565b61255590612512565b9250508b60020b808852602088015261255e565b602085015160020b85526124c8565b838111156129ad5750506129a89450614ca4565b6124a5565b92509350506129e991508c60020b84528960020b60208501526129cf8d613378565b6001600160801b0393906129e28c613378565b9115614fcc565b1660408201526124a5565b8c80fd5b8a80fd5b6024356001600160a01b03811681036129f857612a2f90612a1c906145cf565b608083901d6001600160801b0316611472565b60065490612a4b90608083901d6001600160801b0316906115a1565b916044356001600160a01b03811681036129f4579e6118e69f93612a9c8e9694612a8b8c95612a7c89879a506145cf565b906001600160801b0316611472565b6001600160801b03909116906115a1565b9e612474565b80600301806003116128e857906001918c526007602052612ae360408d20612ad2612acc84611450565b9161147f565b612adc828861165d565b528561165d565b50016123a3565b612af58b8b836153dd565b8a826001600160a01b0380831690821611612b92575b506001600160a01b038316918215612b865760601b600160601b600160e01b0316926001600160a01b03828116929190910316612b4982828661527d565b938215612b725709612b63575b808206151591040161233d565b906001019081612b56575b8880fd5b634e487b7160e01b8c52601260045260248cfd5b62bfc9218b526004601cfd5b8c935090505f612b0b565b5050869761233f565b8680fd5b91989392509081612bd5575b50612bc2575b506122d9565b612bce9196508361335b565b945f612bbc565b905060020b8460020b13155f612bb6565b508060020b8760020b12156122c1565b612c039060020b8a61335b565b956122ad565b8580fd5b89600255612256565b612c1f906136ec565b5f198101818111611a20576121f2612c3691613a72565b808c10612c44575b50612226565b612c59612c52989298615332565b918d615033565b670de0b6b3a76400000390670de0b6b3a76400008211612c9857612c8a612c919392670de0b6b3a764000092614e80565b0590614ebe565b955f612c3e565b634e487b7160e01b8a52601160045260248afd5b9192909115612d0957505083612b6e578a612cc691614f2e565b91612cd2612c52615332565b670de0b6b3a76400000390670de0b6b3a76400008211612c9857612c8a612d039392670de0b6b3a764000092614e80565b95612226565b93509350975050612d2f60125460020b670de0b6b3a76400006002540560020b9061209f565b60185460020b5f9381135f14612dfe57905b6014549260ff8460181c1692835f14612deb57612d61915160020b61209f565b915b829985610e4057612db394612d7b8e612dab96614f2e565b938315612dd857612d8f9160020b9061209f565b915b15612dc3578160020b8160020b135f14612dbc575061335b565b60020b614e5c565b955f9695612226565b905061335b565b8160020b8160020b125f14612dbc575061335b565b612de59160020b9061335b565b91612d91565b612df8915160020b61335b565b91612d63565b505f92508990612d41565b5080612203565b915060ff60145460181c168080612e67575b8115612e47575b50612e38576240000090612949565b63016ccb0760e01b5f5260045ffd5b90501580612e56575b5f612e29565b5060c4358015158114612e50575f80fd5b905060c43580159081158103610e40575090612e22565b600454600e54111561321a5760019060ff1916175f557fe8775e4a58023f399765c3455b45eebcc45ad6b99607a1163f02e1318430970c5f80a1612ed3612ecb60a06121753660246113e7565b505050614841565b601554612ee26118e682611450565b60015f52600760205290612f025f805160206154e383398151915261147f565b612f0b8361162c565b52612f158261162c565b5060025f526007602052612f355f8051602061550383398151915261147f565b612f3e8361164d565b52612f488261164d565b505f5b8181106131e9575050612f63906123bb3660246113e7565b5060145460181c60ff1690811561319e576044356001600160a01b0381168103610e4057612fce918491612fb8906001600160801b0390612fa3906145cf565b16600f0b60018060801b0392600f0b9061203c565b165b60035490612fc93660246113e7565b614ca4565b90604080519290612fdf81856113b4565b60018452601f19015f5b81811061316f575050805160020b6020820191825160020b90604060018060801b0391015116906040519261301d84611333565b835260208301526040820152600160608201526130398461162c565b526130438361162c565b505160020b901561314657608435928360020b8403610e405761308061307a613075613093948761309898509061209f565b613378565b91613378565b9061308c3660246113e7565b9184613a82565b61162c565b5160015f52600760205260405f2090805162ffffff198354169062ffffff161782556130cb602082015160020b83611671565b60408101518254606090920151600160301b600160b81b031990921660309190911b600160301b600160b01b03161760b09190911b60ff60b01b161790555f5b6015546001810180911161145e5781101561313f578061312c600192611450565b5f5260076020525f60408120550161310b565b505f612100565b608435928360020b8403610e405761308061307a6130756130939461225c886130989950612071565b60209060405161317e81611333565b5f81525f838201525f60408201525f606082015282828801015201612fe9565b6024356001600160a01b0381168103610e4057612fce9184916131e3906001600160801b03906131cd906145cf565b6001600160801b039360801d9116600f0b61203c565b16612fba565b80600301908160031161145e576001915f52600760205261321360405f20612ad2612acc84611450565b5001612f4b565b631ed9bcf960e01b5f5260045ffd5b5060ff8116156120fb565b6315d7892d60e21b92505f91508190565b630fc95b4360e01b5f5260045ffd5b636fce6c3960e01b5f5260045ffd5b6001607f1b81101561327557600f0b90565b6335278d125f526004601cfd5b6132a5906132978360801d8260801d01614ed9565b92600f0b90600f0b01614ed9565b60018060801b03169060801b1790565b90816020910312610e40575190565b6001600160a01b039182165f9081529282166020908152604093849020935163789add5560e11b815260048101949094529183916024918391165afa908115610e35575f91613311575090565b90506020813d602011613338575b8161332c602093836113b4565b81010312610e40575190565b3d915061331f565b60020b5f190190627fffff198212627fffff83131761145e57565b600291820b910b0390627fffff198212627fffff83131761145e57565b60020b908160ff1d82810118620d89e881116136925763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116613676575b6004811661365a575b6008811661363e575b60108116613622575b60208116613606575b604081166135ea575b608081166135ce575b61010081166135b2575b6102008116613596575b610400811661357a575b610800811661355e575b6110008116613542575b6120008116613526575b614000811661350a575b61800081166134ee575b6201000081166134d2575b6202000081166134b7575b62040000811661349c575b6208000016613483575b5f1261347b575b0160201c90565b5f1904613474565b6b048a170391f7dc42444e8fa290910260801c9061346d565b6d2216e584f5fa1ea926041bedfe9890920260801c91613463565b916e5d6af8dedb81196699c329225ee6040260801c91613458565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161344d565b916f31be135f97d08fd981231505542fcfa60260801c91613442565b916f70d869a156d2a1b890bb3df62baf32f70260801c91613438565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161342e565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91613424565b916fe7159475a2c29b7443b29c7fa6e889d90260801c9161341a565b916ff3392b0822b70005940c7a398e4b70f30260801c91613410565b916ff987a7253ac413176f2b074cf7815e540260801c91613406565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c916133fc565b916ffe5dee046a99a2a811c461f1969c30530260801c916133f2565b916fff2ea16466c96a3843ec78b326b528610260801c916133e9565b916fff973b41fa98c081472e6896dfb254c00260801c916133e0565b916fffcb9843d60f6159c9db58835c9266440260801c916133d7565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916133ce565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916133c5565b916ffff97272373d413259a46990580e213a0260801c916133bc565b826345c3193d60e11b5f5260045260245ffd5b604051906136b282611399565b5f6040838281528260208201520152565b905f19820191821360011661145e57565b81810392915f13801582851316918412161761145e57565b801561145e575f190190565b60020b9060020b90811561371a57627fffff1981145f1983141661145e570590565b634e487b7160e01b5f52601260045260245ffd5b8181029291811591840414171561145e57565b811561371a570490565b9291909161375761480d565b613764601354809261372e565b906137726010548093611472565b9060115492838311613a46575b61378761480d565b6001810180911161145e576137a49261379f9161372e565b611472565b91808311613a3e575b50808214613a01576137e06137cf6137e6936117f46117eb60105480936115a1565b916117f46117eb60105480936115a1565b906115a1565b936015549384805b6139c0575b5061380a6020613814920194855160020b9061335b565b8560020b906136f8565b918461384b60ff60145460181c1694855f1461398657606085015160020b90818160020b125f1461397f57505b97600d5490615113565b9180613857838561372e565b1161396f575050925b5160020b9461386e856115ae565b9561387c60405197886113b4565b858752601f1961388b876115ae565b015f5b8181106139585750505f905b8682106138ab575050505050505090565b6138b5828961165d565b519060020b905260016138e76138d9846138cf858c61165d565b515160020b61209f565b606086015160020b90614f2e565b9160206138f4828b61165d565b51018360020b9052613939878a613932602061392786613921613917828761165d565b515160020b613378565b9461165d565b51015160020b613378565b9089614fcc565b6040613945838c61165d565b510190838060801b03169052019061389a565b6020906139636136a5565b82828c0101520161388e565b6139799250613741565b92613860565b9050613841565b60608501613997815160020b612071565b60020b8260020b125f146139ad57505b976117fa565b6139bb91505160020b612071565b6139a7565b945f19860186811161145e576139d590615001565b6139de87615001565b036139fb576139ef6139f5916136ec565b956136ec565b806137ee565b946137f3565b505050505050604051613a156020826113b4565b5f81525f805b818110613a2757505090565b602090613a326136a5565b82828601015201613a1b565b91505f6137ad565b83925061377f565b805115158252602080820151908301526040908101516001600160a01b0316910152565b600160ff1b811461145e575f0390565b9392916001600160a01b039182169116818103613f83575b50505f915f5b8451811015613c0d576001600160801b036040613abd838861165d565b51015116613ace575b600101613aa0565b613b7e90604060ff60145460181c16805f14613bf557613aee838961165d565b515160020b905b15613be1576020613b06848a61165d565b51015160020b5b613b2c6001600160801b0384613b23878d61165d565b51015116613263565b60ff6060613b3a878d61165d565b5101511691845193613b4b85611333565b60020b845260020b6020840152600f0b838301526060820152815180948192632d35e7ed60e11b83528860048401611531565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610e3557600192613bc4575b509050613ac6565b613bdb9060403d8111611db257611da481836113b4565b50613bbc565b613beb838961165d565b515160020b613b0d565b6020613c01848a61165d565b51015160020b90613af5565b509190928051905f19820191821161145e57602091613c2b9161165d565b5101516018549060181b65ffffff000000169065ffffff0000001916176018557f0000000000000000000000000000000000000000000000000000000000000000613c8060018060a01b0385511630836132c4565b906020850194613c9a60018060a01b0387511630846132c4565b925f8113613f1c575b848413613ea7575b848112613db4575b5050828212613cc4575b5050509050565b84516001600160a01b039081169591169190823b15613db05760405195632961046560e21b87526004870152838660248183875af195861561074b57849596613d93575b505160209291613d2d916001600160a01b0316908390613d2790613a72565b91614611565b600460405180958193630476982d60e21b83525af1908115613d875750613d58575b80808392613cbd565b613d799060203d602011613d80575b613d7181836113b4565b8101906132b5565b505f613d4f565b503d613d67565b604051903d90823e3d90fd5b84613da29195929394956113b4565b613db057908392915f613d08565b8380fd5b81516001600160a01b03848116939116833b15612ba65760405190632961046560e21b82526004820152868160248183885af18015613e9c57908791613e87575b505080516001600160a01b031680613e73575b50516001600160a01b0316613e6957613e22602091613a72565b915b600460405180948193630476982d60e21b83525af1801561074b57613e4a575b80613cb3565b613e629060203d602011613d8057613d7181836113b4565b505f613e44565b5060208491613e24565b613e819084613d2785613a72565b5f613e08565b81613e91916113b4565b612c0957855f613df5565b6040513d89823e3d90fd5b86516001600160a01b038481169116813b15612ba65785613ee392889283604051809681958294630b0d9c0960e01b845230906004850161157f565b03925af18015613f1157908691613efc575b5050613cab565b81613f06916113b4565b611ed257845f613ef5565b6040513d88823e3d90fd5b81516001600160a01b03908116908416803b15610e4057825f91613f599383604051809681958294630b0d9c0960e01b845230906004850161157f565b03925af18015610e3557613f6e575b50613ca3565b613f7b9195505f906113b4565b5f935f613f68565b60405191613f9083611399565b81108252600160208301526040820152613fc860405191633cf3645360e21b8352613fbe60048401856114ee565b60a4830190613a4e565b6101206101048201525f610124820152602081610144815f60018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610e355761401c575b80613a9a565b6140349060203d602011613d8057613d7181836113b4565b505f614016565b6101409290916140c391906001600160a01b0361405782611181565b1684526001600160a01b0361406e60208301611181565b16602085015262ffffff614084604083016113d7565b166040850152614096606082016112a4565b60020b60608501526001600160a01b03906140b390608001611181565b16608084015260a0830190613a4e565b6101206101008201525f6101208201520190565b60ff5f54166145c1576141299060a06140f13660246113e7565b207f00000000000000000000000000000000000000000000000000000000000000009061411e8183614754565b949290969150614841565b60145460181c60ff1680156145ae5760185460181c60020b8260020b135b60015f5260076020525f805160206154e38339815191525460020b9082156145a257818460020b12905b156144c05750505050906141ea91602060ff60145460181c16805f146144ac576141a561307560185460181c60020b612084565b604051916141b283611399565b151582526001838301526001600160a01b031660408083019190915251633cf3645360e21b815294859182919060246004840161403b565b03815f6001600160a01b0386165af18015610e3557614479575b61420e9250614754565b50509050925b60c435908115158203610e405762ffffff91610fff9182911561447057165b169116620f42408183020491010360ff60145460181c165f146143c757608082901d5f600f82900b1261438257600354614276916001600160801b031690611472565b6003555b600f82900b5f81126143285750505f805160206154c3833981519152916142ad60609260018060801b03166004546115a1565b6004555b600454600f548110156142e4575b600354906040519260020b835260208301526040820152a163b47b2fb160e01b905f90565b61010061ff00195f5416175f557f628a470bfdde264ef77cd19acfbfca22b3e4413adaf5837ec9fbc0043e35793f602061431c61480d565b604051908152a16142bf565b62ffffff919250614338906114c1565b9116620f42400391620f4240831161145e575f805160206154c38339815191529260609261437a91614372916001600160801b031661518e565b600454611472565b6004556142b1565b61438b906114c1565b62ffffff8216620f42400390620f4240821161145e576143bf916143b7916001600160801b031661518e565b6003546115a1565b60035561427a565b90600f81900b5f811261443357506003546143ec906001600160801b03831690611472565b6003555b60801d905f600f83900b1261442557505f805160206154c38339815191529161437a60609260018060801b03166004546115a1565b9061433862ffffff916114c1565b61443c906114c1565b62ffffff8316620f42400390620f4240821161145e57614468916143b7916001600160801b031661518e565b6003556143f0565b600c1c16614233565b6020833d6020116144a4575b81614492602093836113b4565b81010312610e405761420e9250614204565b3d9150614485565b6141a561307560185460181c60020b613340565b97949392976144d3575b50505050614214565b614534949750906144f0602092825f146145995761307590613340565b604051916144fd83611399565b1582526001838301526001600160a01b031660408083019190915251633cf3645360e21b815294859182919060246004840161403b565b03815f6001600160a01b0386165af18015610e3557614566575b6145589250614754565b50509050925f8080806144ca565b6020833d602011614591575b8161457f602093836113b4565b81010312610e4057614558925061454e565b3d9150614572565b61307590612084565b818460020b1390614171565b60185460181c60020b8260020b12614147565b5063b47b2fb160e01b905f90565b6001600160a01b0316806145e257504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115610e35575f91613311575090565b9091906001600160a01b038116908161469f5750505f80808093855af1156146365750565b6040516390bfb86560e01b81526001600160a01b0390911660048201525f602482018190526080604483015260a03d601f01601f191690810160648401523d6084840152903d9060a484013e808201600460a482015260c4633d2cec6f60e21b91015260e40190fd5b60205f604481949682604095865198899363a9059cbb60e01b855260018060a01b0316600485015260248401525af13d15601f3d116001855114161716928281528260208201520152156146f05750565b6040516390bfb86560e01b8152600481019190915263a9059cbb60e01b602482015260806044820152601f3d01601f191660a0810160648301523d60848301523d5f60a484013e808201600460a482015260c4633c9fd93960e21b91015260e40190fd5b919060209060405182810191825260066040820152604081526147786060826113b4565b519020604051631e2eaeaf60e01b8152600481019190915292839060249082906001600160a01b03165afa918215610e35575f926147d9575b506001600160a01b0382169160a081901c60020b9162ffffff60b883901c81169260d01c1690565b9091506020813d602011614805575b816147f5602093836113b4565b81010312610e405751905f6147b1565b3d91506147e8565b60105480421061483b5761482461482d91426115a1565b60135490613741565b6001810180911161145e5790565b50600190565b73fffd8963efd1fc6a506488495d951d51639616826401000276a21982016001600160a01b031611614ada57602081901b600160201b600160c01b0316808015610e4057693627a301d71055774c859160ff8260018060801b031060071b83811c60018060401b031060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c821060031b177b01c1818141808140018080c0814100004181408140c0c100414140c160221b6f8421084210842108cc6318c6db6d54be85831c1c601f161a17169160808310155f14614ace5750607e1982011c5b800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c600160321b90800260cd1c169d600160331b9060cc1c169c600160341b9060cb1c169b600160351b9060ca1c169a600160361b9060c91c1699600160371b9060c81c1698600160381b9060c71c1697600160391b9060c61c16966001603a1b9060c51c16956001603b1b9060c41c16946001603c1b9060c31c16936001603d1b9060c21c16926001603e1b9060c11c16916001603f1b9060c01c1690607f190160401b1717171717171717171717171717026fdb2df09e81959a81455e260799a0632f6f028f6481ab7f045a5af012a19d003aa919820160801d60020b910160801d60020b918282145f14614aaa5750905090565b6001600160a01b0390811690614abf84613378565b1611614ac9575090565b905090565b905081607f031b61491e565b6318521d4960e21b5f9081526001600160a01b0391909116600452602490fd5b91905f905f905f5b8551811015614c8d576001600160801b036040614b1f838961165d565b51015116614b30575b600101614b02565b9192614bdf604060ff60145460181c16805f14614c7557614b51868a61165d565b515160020b905b15614c61576020614b69878b61165d565b51015160020b5b8960ff6060614b9b8a6139216001600160801b0389614b8f848961165d565b51015116600f0b6114c1565b5101511691845193614bac85611333565b60020b845260020b6020840152600f0b838301526060820152815180938192632d35e7ed60e11b83528760048401611531565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610e3557600192614c36925f905f92614c3e575b50614c309192613282565b95613282565b929050614b28565b614c309250614c5b915060403d8111611db257611da481836113b4565b91614c25565b614c6b868a61165d565b515160020b614b70565b6020614c81878b61165d565b51015160020b90614b58565b505091909250614c9f82600654613282565b600655565b9093929193614cb16136a5565b9480614e0457505f5b6001600160a01b031680614cde5750505060020b80835260208301525f6040830152565b919250614de991614d9090606090614d829060b56001600160881b03821160071b82811c6001600160481b031060061b1782811c64ffffffffff1060051b1782811c62ffffff1060041b17600181811c9290921b9083901c62010000010260121c80830401811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900360301b6001600160a01b0316614841565b940193845160020b90614f2e565b92614dd1602087019460020b9182865260ff60145460181c1692835f14614df15750614dc690865160020b905160020b9061335b565b60020b808852613378565b93516001600160801b0394906129e29060020b613378565b166040830152565b614dff915160020b9061209f565b614dc6565b8160ff60145460181c165f14614e3d5750600654614e3891614e329160801d6001600160801b0316906115a1565b826152fd565b614cba565b600654614e3892614e57916001600160801b0316906115a1565b6152fd565b90670de0b6b3a7640000820291808305670de0b6b3a7640000149015171561145e57565b81810292915f8212600160ff1b82141661145e57818405149015171561145e57565b9060018201915f60018412911290801582169115161761145e57565b9190915f838201938412911290801582169115161761145e57565b9081600f0b918203614ee757565b6393dafdf160e01b5f5260045ffd5b80628000000160181c15614f11576335278d125f526004601cfd5b60020b90565b9060020b9060020b02908160020b91820361145e57565b9060ff60145460181c165f14614f7a575f8260020b125f14614f6d57614f6881614f63614f5e82611e679661335b565b612084565b6136f8565b614f17565b614f6881611e67936136f8565b5f8260020b125f14614f9357614f6881611e67936136f8565b614f6881614f63614fa782611e679661209f565b613340565b6117fa6117db6117d26117c96117c4611e6795614fc761480d565b614ebe565b90929091908015614ffb575f19810190811161145e57915b15614ff257611e6792615420565b611e67926153dd565b91614fe4565b61501c6150136150259261379f61480d565b6013549061372e565b60105490611472565b601154808211614ac9575090565b90670de0b6b3a76400008202905f19670de0b6b3a7640000840992828085109403938085039485841115610e4057146150c357670de0b6b3a764000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b1115610e40571461510a57600160601b910990828211900360a01b910360601c1790565b50505060601c90565b808202905f1983820990828083109203918083039283670de0b6b3a76400001115610e40571461517d577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a764000091500490565b808202905f1983820990828083109203918083039283620f42401115610e4057146151ee577fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c2613993620f4240910990828211900360fa1b910360061c170290565b5050620f424091500490565b90606082901b905f19600160601b840992828085109403938085039485841115610e4057146150c3578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b91818302915f1981850993838086109503948086039586851115610e4057146152f5579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b90615307916151fa565b6001600160a01b03811161532d57600160a01b811015613275576001600160a01b031690565b505f90565b615378612dab615348612ecb60a0612175611f3d565b60145460181c60ff16156153ac5760125460020b808260020b135f146153a557505b60125460181c60020b61335b565b61538a614824601154601054906115a1565b90811561371a57600160ff1b81145f1983141661145e570590565b905061536a565b60125460020b808260020b125f146153a5575061536a565b6001600160a01b03918216908216039190821161145e57565b611e67926154159290916001600160a01b038083169082161161541a575b6001600160a01b039161540e91906153c4565b16906151fa565b615474565b906153fb565b611e6792615415929091906001600160a01b038082169083161161546e575b6154676154586001600160a01b038381169085166150ca565b926001600160a01b03926153c4565b169161527d565b9061543f565b6001600160801b0381169190820361548857565b60405162461bcd60e51b81526020600482015260126024820152716c6971756964697479206f766572666c6f7760701b6044820152606490fdfe27db09392d7d230eb65a11bd84925fb8da90df8a067ca8a4fc2933b4f637262bb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b828b7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96da164736f6c634300081a000a";
1409
+ var doppler_default = "0x60a06040523461057b57604051601f615c1a38819003918201601f19168301916001600160401b0383118484101761057f578084926101c09460405283398101031261057b5780516001600160a01b038116810361057b5760208201516040830151906060840151608085015160a08601519061007e60c088016105b3565b9161008b60e089016105b3565b91610100890151946100a06101208b016105b3565b976101408b0151978815988915810361057b576101608d01516101808e01516001600160a01b0381169e919d91908f0361057b576101a001519062ffffff821680920361057b576080525f6101a06100f6610593565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a0610154610593565b6001815260016020820152600160408201528260608201528260808201528260a0820152600160c0820152600160e082015260016101008201528261012082015282610140820152826101608201528261018082015201526120003016151560011480159061056a575b8015610559575b801561054c575b801561053f575b8015610532575b8015610522575b8015610512575b8015610502575b80156104f6575b80156104ea575b80156104de575b80156104d2575b80156104c6575b6104b35762ffffff1960165416176016558442116104a4578660020b8860020b91818303610463575b5050508484101561045457838503858111610440578a60020b5f811380159061042b575b61041c578915610408578982066103f9578c156103eb57600f8d116103eb578484116103dc5761029861029d928b81046017558b6105c1565b610658565b628000008110156103cf5762ffffff19601854169062ffffff1617601855600d55600e55600f5560105560115562ffffff6012549160181b65ffffff0000001692169065ffffffffffff1916171760125560135562ffffff63ff000000601454921560181b1692169063ffffffff1916171760145560155560018060a01b0319600c541617600c5560405161554690816106d48239608051818181601c01528181610205015281816102a80152818161045c0152818161050c0152818161098701528181610a1e01528181610af501528181610b9201528181610c5a01528181610e8301528181610f3a0152818161103d015281816110b201528181611d2c01528181611de40152818161217801528181613ba601528181613c700152818161400c015281816141170152614c070152f35b6335278d125f526004601cfd5b638cc99b7b60e01b5f5260045ffd5b6287e39960e61b5f5260045ffd5b6388ac089760e01b5f5260045ffd5b634e487b7160e01b5f52601260045260245ffd5b6312469eb560e11b5f5260045ffd5b5061043a81610298848d6105c1565b1561025f565b634e487b7160e01b5f52601160045260245ffd5b63536a71af60e01b5f5260045ffd5b8061049b575b610483578a9182610491575b5050610483575f808061023b565b6264847d60e41b5f5260045ffd5b1390505f80610475565b50808212610469565b632ca4094f60e21b5f5260045ffd5b630732d7b560e51b5f523060045260245ffd5b50600130161515610212565b5060023016151561020b565b50600430161515610204565b506008301615156101fd565b506010301615156101f6565b50602030161515600114156101ef565b50604030161515600114156101e8565b50608030161515600114156101e1565b50610100301615156101da565b50610200301615156101d3565b50610400301615156101cc565b5061080030161515600114156101c5565b5061100030161515600114156101be565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b0381118382101761057f57604052565b51908160020b820361057b57565b90670de0b6b3a76400008202905f19670de0b6b3a764000084099282808510940393808503948584111561057b571461065157670de0b6b3a764000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b808202905f1983820990828083109203918083039283670de0b6b3a7640000111561057b57146106c2577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a76400009150049056fe608080604052600436101561005b575b50361561001a575f80fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361004c57005b6393c866c160e01b5f5260045ffd5b5f905f3560e01c908163182148ef146111155750806318cb1700146110f357806321d0ee701461109f578063259982e51461102a578063392e53cd1461100857806339518b5e14610feb578063514ea4bf14610f96578063575e24b414610ee357806357d775f814610ec65780636c2bbe7e14610e705780636c47a6c314610e535780636fe7e6eb14610c19578063897479cb14610bfb57806390ebab0a14610bdd57806391dd734614610b5e5780639ce110d714610b355780639f063efc14610ade578063a4dee15514610ab9578063b137392914610a98578063b356603014610a74578063b47b2fb1146109c6578063b6a8b0fa14610970578063c19d93fb14610921578063c4e833ce146107b6578063c70dfb4f14610795578063ce5494bb146104cb578063d0c52e21146104a9578063d65b4cb91461048b578063dc4c90d314610446578063dc98354e14610276578063dcf93f3214610250578063e1b4af69146101ee5763ee4644300361000f57346101eb57806003193601126101eb576020600d54604051908152f35b80fd5b50346101eb57600490610200366112dc565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303925061024491505057630a85dc2960e01b8152fd5b63570c108560e11b8152fd5b50346101eb57806003193601126101eb57602060ff60145460181c166040519015158152f35b50346101eb5760e03660031901126101eb5761029061116b565b5060a03660231901126101eb576102a561128e565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036104375760085460ff81166104295760ff19166001176008556001600160a01b03602435908116908181036104255750600980546001600160a01b0319169190911790556044356001600160a01b038116908181036104255750600a80546001600160a01b03191691909117905560643562ffffff8116810361042157600a5461035a612061565b60b81b62ffffff60b81b169162ffffff60a01b9060a01b169065ffffffffffff60a01b19161717600a5560a43560018060a01b03811680910361042157600b80546001600160a01b031916919091179055601e6103b5612061565b60020b136104125760145460020b6103cb612061565b60020b9081156103fe570760020b6103ef57604051636e4c1aa760e11b8152602090f35b6312469eb560e11b8152600490fd5b634e487b7160e01b83526012600452602483fd5b63013840ad60e51b8152600490fd5b5080fd5b8280fd5b62dc149f60e41b8252600482fd5b63570c108560e11b8152600490fd5b50346101eb57806003193601126101eb576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101eb57806003193601126101eb576020600f54604051908152f35b50346101eb57806003193601126101eb5760ff60209154166040519015158152f35b50346101eb5760203660031901126101eb576104e561116b565b600c546001600160a01b031633036107865760ff825460081c161580610765575b610756577f000000000000000000000000000000000000000000000000000000000000000061059d8361057561058360405161054181611333565b610549611f3d565b815260018060a01b03871660208201528360408201526001606082015260405192839160208301611f8a565b03601f1981018352826113b4565b604051809381926348c8949160e01b8352600483016112b2565b0381836001600160a01b0387165af190811561074b57916105d785926105e2959460e09791610729575b50602080825183010191016114d8565b6006959195546132a5565b9161064160018060a01b0360095416926106306105fe856145f2565b948761061f8761061760018060a01b03600a54166145f2565b9a8b94614634565b600a546001600160a01b0316614634565b60a061063a611f3d565b2090614777565b5050600954600a5492976001600160a01b039182169791909316946106879250610678906001600160801b03608086901d16611472565b926001600160801b0316611472565b906001600160801b0381111561071a57506001600160801b03915b506001600160801b0381111561070b57506001600160801b03935b604080516001600160a01b0397909716875260208701919091526001600160801b03608085811d821692880192909252918216606087015285019190915290811660a08401521660c0820152f35b6001600160801b0316936106bd565b6001600160801b0316916106a2565b61074591503d8086833e61073d81836113b4565b810190611fcb565b5f6105c7565b6040513d86823e3d90fd5b63051a2a5560e51b8252600482fd5b50600454600e5411158061077a575b15610506565b50601154421015610774565b638341a67960e01b8252600482fd5b50346101eb57806003193601126101eb57602060125460020b604051908152f35b50346101eb57806003193601126101eb576020816101c0926101a06040516107dd81611362565b82815282858201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201528060405161083b81611362565b60018152838101600181526040820160018152606083018481526080840185815260a0850186815260c08601906001825260e087019260018452610100880194600186526101208901968a88526101408a01988b8a526101a06101608c019b8d8d5261018081019d8e52019c8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b50346101eb57806003193601126101eb5760c064ffffffffff600154166002546003546004546005549160065493604051958652602086015260408501526060840152608083015260a0820152f35b50346101eb57600490610982366112dc565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330392506102449150505763567d91d160e01b8152fd5b50346101eb576101603660031901126101eb576109e161116b565b5060a03660231901126101eb5760603660c31901126101eb57610144356001600160401b03811161042157610a1a903690600401611195565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610437576040610a5a610124356140fa565b82516001600160e01b03199092168252600f0b6020820152f35b50346101eb57806003193601126101eb57602060125460181c60020b604051908152f35b50346101eb57806003193601126101eb57602060145460020b604051908152f35b50346101eb57806003193601126101eb5760ff6020915460081c166040519015158152f35b50346101eb57600490610af036611225565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330393506102449250505057630a85dc2960e01b8152fd5b50346101eb57806003193601126101eb57600c546040516001600160a01b039091168152602090f35b50346101eb5760203660031901126101eb576004356001600160401b03811161042157610b8f903690600401611195565b917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361043757610bd9610bcd848461168f565b604051918291826112b2565b0390f35b50346101eb57806003193601126101eb576020601554604051908152f35b50346101eb57806003193601126101eb576020600e54604051908152f35b5034610e4057610100366003190112610e4057610c3461116b565b60a0366023190112610e4057610c4861128e565b5060e435908160020b809203610e40577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169133839003610e445762ffffff6016541691833b15610e4057604051635275965160e01b815292602435906001600160a01b038216808303610e40576004860152604435946001600160a01b038616808703610e4057602482015260643562ffffff8116808203610e40576044830152608435918260020b808403610e4057606482015260a435936001600160a01b038516808603610e4057608483015260a48201525f8160c481838d5af18015610e3557610e07575b509488979461057594610da6948a9994610dc29960405196610d5a88611333565b60405194610d678661137e565b85526020850152604084015260608301526080820152835260018060a01b03166020830152604082015285606082015260405192839160208301611f8a565b6040519485809481936348c8949160e01b8352600483016112b2565b03925af18015610dfc57610de3575b604051636fe7e6eb60e01b8152602090f35b610df6913d8091833e61073d81836113b4565b5f610dd1565b6040513d84823e3d90fd5b610da69399509461057594610e245f610dc299949a959b986113b4565b5f9a94509450949791969095610d39565b6040513d5f823e3d90fd5b5f80fd5b63570c108560e11b5f5260045ffd5b34610e40575f366003190112610e40576020601154604051908152f35b34610e4057610e7e36611225565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633039350610e449250505057630a85dc2960e01b5f5260045ffd5b34610e40575f366003190112610e40576020601354604051908152f35b34610e4057610140366003190112610e4057610efd61116b565b5060a0366023190112610e405760603660c3190112610e4057610124356001600160401b038111610e4057610f36903690600401611195565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610e4457606062ffffff610f766120bd565b906040939293519363ffffffff60e01b1684526020840152166040820152f35b34610e40576020366003190112610e40576004355f526007602052608060405f205460ff604051918060020b83528060181c60020b6020840152600180851b038160301c16604084015260b01c166060820152f35b34610e40575f366003190112610e40576020601054604051908152f35b34610e40575f366003190112610e4057602060ff600854166040519015158152f35b34610e4057611038366111c2565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633039050610e4457306001600160a01b03909116036110905760405163259982e560e01b8152602090f35b636d1ed89b60e01b5f5260045ffd5b34610e40576110ad366111c2565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633039150610e44905057630a85dc2960e01b5f5260045ffd5b34610e40575f366003190112610e4057602062ffffff60165416604051908152f35b34610e40575f366003190112610e4057600954600a54600b546001600160a01b039283168452818316602085015260a082811c62ffffff16604086015260b89290921c60020b6060850152909116608083015290f35b600435906001600160a01b0382168203610e4057565b35906001600160a01b0382168203610e4057565b9181601f84011215610e40578235916001600160401b038311610e405760208381860195010111610e4057565b90610160600319830112610e40576004356001600160a01b0381168103610e40579160a0602319820112610e4057602491608060c319830112610e405760c49161014435906001600160401b038211610e405761122191600401611195565b9091565b906101a0600319830112610e40576004356001600160a01b0381168103610e40579160a0602319820112610e4057602491608060c319830112610e405760c4916101443591610164359161018435906001600160401b038211610e405761122191600401611195565b60c435906001600160a01b0382168203610e4057565b35908160020b8203610e4057565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b610120600319820112610e40576004356001600160a01b0381168103610e40579160a0602319830112610e405760249160c4359160e4359161010435906001600160401b038211610e405761122191600401611195565b608081019081106001600160401b0382111761134e57604052565b634e487b7160e01b5f52604160045260245ffd5b6101c081019081106001600160401b0382111761134e57604052565b60a081019081106001600160401b0382111761134e57604052565b606081019081106001600160401b0382111761134e57604052565b601f909101601f19168101906001600160401b0382119082101761134e57604052565b359062ffffff82168203610e4057565b91908260a0910312610e40576040516113ff8161137e565b608061144b81839561141081611181565b855261141e60208201611181565b602086015261142f604082016113d7565b6040860152611440606082016112a4565b606086015201611181565b910152565b600201908160021161145e57565b634e487b7160e01b5f52601160045260245ffd5b9190820180921161145e57565b9060405161148c81611333565b9154600281810b8452601882901c900b6020840152603081901c6001600160801b0316604084015260b01c60ff166060830152565b600f0b60016001607f1b0319811461145e575f0390565b9190826040910312610e40576020825192015190565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b9061016092611542836060936114ee565b805160020b60a0840152602081015160020b60c0840152604081015160e084015201516101008201526101406101208201525f6101408201520190565b6001600160a01b03918216815291166020820152604081019190915260600190565b9190820391821161145e57565b6001600160401b03811161134e5760051b60200190565b906115cf826115ae565b6115dc60405191826113b4565b82815280926115ed601f19916115ae565b01905f5b8281106115fd57505050565b60209060405161160c81611333565b5f81525f838201525f60408201525f6060820152828285010152016115f1565b8051156116395760200190565b634e487b7160e01b5f52603260045260245ffd5b8051600110156116395760400190565b80518210156116395760209160051b010190565b9081549060181b65ffffff000000169065ffffff0000001916179055565b919082015f61010084830312610e40576116b5604051926116af84611333565b856113e7565b938483526116c560a08201611181565b80602085015260e06116d960c084016112a4565b92836040870152013580151594858203610e40576060015260018060a01b03169060020b92611c4e5750600164ffffffffff1981541617600155606084019261173c845160020b61173761172c85614f19565b60125460020b61209f565b614f51565b6014549060ff8260181c165f14611c3b5761175a9160020b9061209f565b945b6117658461339b565b61176e8561339b565b956040519561177c87611399565b808752602087018181526118d8604089019a888c526118d0600d54956117a06136c8565b956118088c6118036117fa6117db6117d26117c96117c46117bf614830565b614ec5565b6136e6565b60135490614ea3565b60105490614ee1565b6117f46117eb60105480936115a1565b916011546115a1565b90615056565b600d5490615136565b6136f7565b8c929083811315611c2c5761186b9293508981115f14611c275750885b928d60185460020b835160020b8082135f14611c1f5750905b50818a5260145460181c60ff1615611c105761185f9150895160020b61209f565b905b5160020b90614f51565b60020b60208701525b855160020b966020870197885160020b14155f14611c055760ff60145460181c166118c5836118a68a5160020b61339b565b8b516001600160801b039491906118bf9060020b61339b565b91614fef565b1660408801526115a1565b90848861376e565b996118eb6118e68c51611450565b6115c5565b985160020b915160020b9060018060801b03905116906040519261190e84611333565b8352602083015260408201526001606082015261192a8861162c565b526119348761162c565b50805160020b915160020b90604060018060801b0391015116906040519261195b84611333565b835260208301526040820152600260608201526119778661164d565b526119818561164d565b50835b8751811015611a3457611997818961165d565b515160020b60206119a8838b61165d565b51015160020b6001600160801b0360406119c2858d61165d565b51015116836003019182600311611a2057611a1992600195949260ff92604051946119ec86611333565b855260208501526040840152166060820152611a0783611450565b90611a12828b61165d565b528861165d565b5001611984565b634e487b7160e01b89526011600452602489fd5b50611a429293969585613aa5565b611a4b8261162c565b516001855260076020526040852090805162ffffff198354169062ffffff16178255611a7e602082015160020b83611671565b60408101518254606090920151600160301b600160b81b031990921660309190911b600160301b600160b01b03161760b09190911b60ff60b01b16179055611ac58261164d565b516002855260076020526040852090805162ffffff198354169062ffffff16178255611af8602082015160020b83611671565b60408101518254606090920151600160301b600160b81b031990921660309190911b600160301b600160b01b03161760b09190911b60ff60b01b16179055835b8351811015611be557611b53611b4d82611450565b8461165d565b518160030180600311611bd1579060019291875260076020526040872090805162ffffff198354169062ffffff16178255611b95602082015160020b83611671565b604081015190825490606060ff60b01b91015160b01b16918560301b8660b01b039060301b16908560301b8660b81b0319161717905501611b38565b634e487b7160e01b87526011600452602487fd5b509291505060405190611bf96020836113b4565b81525f36602083013790565b8b60408801526115a1565b611c199161337e565b90611861565b90509061183e565b611825565b50508087526020870152611874565b611c489160020b9061337e565b9461175c565b925f9250829160015b6015546003018060031161145e57811015611ddc57805f526007602052611c8060405f2061147f565b60408101516001600160801b031680611c9e575b5050600101611c57565b611d279160409160ff6014999598995460181c1691825f14611dce57805160020b925b15611db95760ff6060611ce3611cde602085015160020b95613286565b6114c1565b9201511691845193611cf485611333565b60020b845260020b6020840152600f0b838301526060820152815180938192632d35e7ed60e11b83528c60048401611531565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610e3557600192611d7e925f905f92611d86575b50611d7891926132a5565b966132a5565b93905f611c94565b611d789250611dac915060403d8111611db2575b611da481836113b4565b8101906114d8565b91611d6d565b503d611d9a565b60ff6060611ce3611cde845160020b95613286565b602081015160020b92611cc1565b5091929390947f000000000000000000000000000000000000000000000000000000000000000091611e1860018060a01b0383511630856132e7565b926020830192611e3260018060a01b0385511630846132e7565b945f8113611ed6575b5050848413611e6a575b5050505050604051916020830152604082015260408152611e676060826113b4565b90565b91516001600160a01b039283169216823b15611ed25791611ea6939185809460405196879586948593630b0d9c0960e01b85526004850161157f565b03925af18015610dfc57611ebd575b808080611e45565b611ec88280926113b4565b6101eb5780611eb5565b8480fd5b90516001600160a01b0383811692911690823b15610e4057611f1392855f809460405196879586948593630b0d9c0960e01b85526004850161157f565b03925af18015610e3557611f28575b80611e3b565b611f359195505f906113b4565b5f935f611f22565b60405190611f4a8261137e565b6009546001600160a01b039081168352600a54808216602085015260a081901c62ffffff16604085015260b81c60020b6060840152600b54166080830152565b91909160e06060610100830194611fa28482516114ee565b60208101516001600160a01b031660a0850152604081015160020b60c085015201511515910152565b602081830312610e40578051906001600160401b038211610e40570181601f82011215610e40578051906001600160401b03821161134e576040519261201b601f8401601f1916602001856113b4565b82845260208383010111610e4057815f9260208093018386015e8301015290565b600f91820b910b019060016001607f1b0319821260016001607f1b0383131761145e57565b6084358060020b8103610e405790565b60020b627fffff19811461145e575f0390565b60020b60010190627fffff8213627fffff1983121761145e57565b9060020b9060020b0190627fffff198212627fffff83131761145e57565b5f80549160ff8360081c16613277576010544210613268576120dd614830565b64ffffffffff600154161015613257575f926011544210158061324c575b612ea1575b509060ff5f5416155f14612e3357612116614830565b9060015461212b64ffffffffff8216846115a1565b64ffffffffff1990911664ffffffffff84161760015560035460025f526007602052946121645f8051602061552683398151915261147f565b9461219c60a06121753660246113e7565b207f0000000000000000000000000000000000000000000000000000000000000000614777565b505050946121a986614864565b608435978860020b90818a14159283610e40578a6121c691614f51565b905f916121d68d600554906136f7565b5f198a0194908a861161145e575f8f966121f26121f791613a95565b614fcf565b80971115911280612e2c575b15612ccf575050506122249192505160020b9161221e615355565b90614ee1565b955b60018111612c395750612262908a60055561225c670de0b6b3a764000061224f89600254614ee1565b9880612c30575b05614f19565b9061209f565b90612c2c578761227191614f51565b9061228d8861173761172c670de0b6b3a76400005f9905614f19565b9760145460ff8160181c165f14612c19576122ab9060020b8a61209f565b955b8960ff60145460181c16809b811580612c09575b15612bcd57505050612bc9576122d7908361209f565b945b6122e28361339b565b986122ec8761339b565b908b15612bc05715612b0d5760016123058c8c84615443565b91818060a01b038c1690828060a01b0316038060ff1d9081011891818060801b031661233183826150ed565b928260601b9109151516015b975b60155461234e6118e682611450565b9060018a52600760205261236460408b2061147f565b61236d8361162c565b526123778261162c565b5060028a52600760205261238d60408b2061147f565b6123968361164d565b526123a08261164d565b50895b818110612ac55750506123c1906123bb3660246113e7565b90614b1d565b5060145460181c60ff1699908a15612a20576044356001600160a01b0381168103612a1c57612402906123f3906145f2565b6001600160801b038316611472565b6006549061241a906001600160801b038316906115a1565b916024356001600160a01b0381168103612a18579e6118e69f936124728e969461245d8c9561244b89879a506145f2565b9060801d6001600160801b0316611472565b60809190911d6001600160801b0316906115a1565b600d548380821115612a1057612487916115a1565b81811090821802189e61249b3660246113e7565b906124a46136c8565b95836129b057505050505060020b80825260208201528260408201525b604081018051909c6125c7916125bf916125ad916001600160801b0316156129a1575b6124ef3660246113e7565b906125166124fb6136c8565b976118036117fa6117db6117d26117c96117c46117bf614830565b888082131561298d5750818111156129845750612571815b928d606060185460020b920191825160020b8082135f1461297c5750905b60020b90818b5260ff60145460181c165f14611c105761185f91508a5160020b61209f565b60020b60208801525b865160020b976020880198895160020b14155f14612972575060ff60145460181c166118c5836118a68a5160020b61339b565b87856125ba3660246113e7565b61376e565b9e8f51611450565b9b6020825160020b92015160020b9060018060801b0390511690604051926125ee84611333565b8352602083015260408201526001606082015261260a8c61162c565b526126148b61162c565b50805160020b915160020b90604060018060801b0391015116906040519261263b84611333565b835260208301526040820152600260608201526126578a61164d565b526126618961164d565b50875b8b51811015612715578b60206126898361267e818561165d565b515160020b9361165d565b51015160020b8d60406126a38560018060801b039361165d565b51015116836003019182600311612701579260ff6126fa938f9360019796604051946126ce86611333565b8552602085015260408401521660608201526126f36126ec85611450565b809361165d565b528c61165d565b5001612664565b634e487b7160e01b8d52601160045260248dfd5b50612735919293949596999a979a61272e3660246113e7565b918a613aa5565b61273e8761162c565b5160018a52600760205260408a2090805162ffffff198354169062ffffff16178255612771602082015160020b83611671565b60408101518254606090920151600160301b600160b81b031990921660309190911b600160301b600160b01b03161760b09190911b60ff60b01b161790556127b88761164d565b5160028a52600760205260408a2090805162ffffff198354169062ffffff161782556127eb602082015160020b83611671565b60408101518254606090920151600160301b600160b81b031990921660309190911b600160301b600160b01b03161760b09190911b60ff60b01b16179055885b601554811015612918578651811061287557806003018060031161286157906001918b5260076020528a60408120555b0161282b565b634e487b7160e01b8b52601160045260248bfd5b61288761288182611450565b8961165d565b5181600301806003116129045790600192918c52600760205260408c2090805162ffffff198354169062ffffff161782556128c9602082015160020b83611671565b604081015190825490606060ff60b01b91015160b01b16918560301b8660b01b039060301b16908560301b8660b81b0319161717905561285b565b634e487b7160e01b8c52601160045260248cfd5b5090919295507f223157ec47d7bd04fa3ed10c0a8adb38faf97b51ec856a777425a2e39253bd739450608093966040519360020b845260020b602084015260020b60408301526060820152a15b6315d7892d60e21b929190565b60408801526115a1565b90509061254c565b6125719061252e565b9250508b60020b808852602088015261257a565b602085015160020b85526124e4565b838111156129c95750506129c49450614cc7565b6124c1565b9250935050612a0591508c60020b84528960020b60208501526129eb8d61339b565b6001600160801b0393906129fe8c61339b565b9115614fef565b1660408201526124c1565b505086612487565b8c80fd5b8a80fd5b6024356001600160a01b0381168103612a1c57612a5390612a40906145f2565b608083901d6001600160801b0316611472565b60065490612a6f90608083901d6001600160801b0316906115a1565b916044356001600160a01b0381168103612a18579e6118e69f93612ac08e9694612aaf8c95612aa089879a506145f2565b906001600160801b0316611472565b6001600160801b03909116906115a1565b612472565b806003018060031161290457906001918c526007602052612b0660408d20612af5612aef84611450565b9161147f565b612aff828861165d565b528561165d565b50016123a3565b612b188b8b83615400565b8a826001600160a01b0380831690821611612bb5575b506001600160a01b038316918215612ba95760601b600160601b600160e01b0316926001600160a01b03828116929190910316612b6c8282866152a0565b938215612b955709612b86575b808206151591040161233d565b906001019081612b79575b8880fd5b634e487b7160e01b8c52601260045260248cfd5b62bfc9218b526004601cfd5b8c935090505f612b2e565b5050869761233f565b8680fd5b91989392509081612bf8575b50612be5575b506122d9565b612bf19196508361337e565b945f612bdf565b905060020b8460020b13155f612bd9565b508060020b8760020b12156122c1565b612c269060020b8a61337e565b956122ad565b8580fd5b89600255612256565b612c429061370f565b5f198101818111611a20576121f2612c5991613a95565b808c10612c67575b50612226565b612c7c612c75989298615355565b918d615056565b670de0b6b3a76400000390670de0b6b3a76400008211612cbb57612cad612cb49392670de0b6b3a764000092614ea3565b0590614ee1565b955f612c61565b634e487b7160e01b8a52601160045260248afd5b9192909115612d2c57505083612b91578a612ce991614f51565b91612cf5612c75615355565b670de0b6b3a76400000390670de0b6b3a76400008211612cbb57612cad612d269392670de0b6b3a764000092614ea3565b95612226565b93509350975050612d5260125460020b670de0b6b3a76400006002540560020b9061209f565b60185460020b5f9381135f14612e2157905b6014549260ff8460181c1692835f14612e0e57612d84915160020b61209f565b915b829985610e4057612dd694612d9e8e612dce96614f51565b938315612dfb57612db29160020b9061209f565b915b15612de6578160020b8160020b135f14612ddf575061337e565b60020b614e7f565b955f9695612226565b905061337e565b8160020b8160020b125f14612ddf575061337e565b612e089160020b9061337e565b91612db4565b612e1b915160020b61337e565b91612d86565b505f92508990612d64565b5080612203565b915060ff60145460181c168080612e8a575b8115612e6a575b50612e5b576240000090612965565b63016ccb0760e01b5f5260045ffd5b90501580612e79575b5f612e4c565b5060c4358015158114612e73575f80fd5b905060c43580159081158103610e40575090612e45565b600454600e54111561323d5760019060ff1916175f557fe8775e4a58023f399765c3455b45eebcc45ad6b99607a1163f02e1318430970c5f80a1612ef6612eee60a06121753660246113e7565b505050614864565b601554612f056118e682611450565b60015f52600760205290612f255f8051602061550683398151915261147f565b612f2e8361162c565b52612f388261162c565b5060025f526007602052612f585f8051602061552683398151915261147f565b612f618361164d565b52612f6b8261164d565b505f5b81811061320c575050612f86906123bb3660246113e7565b5060145460181c60ff169081156131c1576044356001600160a01b0381168103610e4057612ff1918491612fdb906001600160801b0390612fc6906145f2565b16600f0b60018060801b0392600f0b9061203c565b165b60035490612fec3660246113e7565b614cc7565b9060408051929061300281856113b4565b60018452601f19015f5b818110613192575050805160020b6020820191825160020b90604060018060801b0391015116906040519261304084611333565b8352602083015260408201526001606082015261305c8461162c565b526130668361162c565b505160020b901561316957608435928360020b8403610e40576130a361309d6130986130b694876130bb98509061209f565b61339b565b9161339b565b906130af3660246113e7565b9184613aa5565b61162c565b5160015f52600760205260405f2090805162ffffff198354169062ffffff161782556130ee602082015160020b83611671565b60408101518254606090920151600160301b600160b81b031990921660309190911b600160301b600160b01b03161760b09190911b60ff60b01b161790555f5b6015546001810180911161145e57811015613162578061314f600192611450565b5f5260076020525f60408120550161312e565b505f612100565b608435928360020b8403610e40576130a361309d6130986130b69461225c886130bb9950612071565b6020906040516131a181611333565b5f81525f838201525f60408201525f60608201528282880101520161300c565b6024356001600160a01b0381168103610e4057612ff1918491613206906001600160801b03906131f0906145f2565b6001600160801b039360801d9116600f0b61203c565b16612fdd565b80600301908160031161145e576001915f52600760205261323660405f20612af5612aef84611450565b5001612f6e565b631ed9bcf960e01b5f5260045ffd5b5060ff8116156120fb565b6315d7892d60e21b92505f91508190565b630fc95b4360e01b5f5260045ffd5b636fce6c3960e01b5f5260045ffd5b6001607f1b81101561329857600f0b90565b6335278d125f526004601cfd5b6132c8906132ba8360801d8260801d01614efc565b92600f0b90600f0b01614efc565b60018060801b03169060801b1790565b90816020910312610e40575190565b6001600160a01b039182165f9081529282166020908152604093849020935163789add5560e11b815260048101949094529183916024918391165afa908115610e35575f91613334575090565b90506020813d60201161335b575b8161334f602093836113b4565b81010312610e40575190565b3d9150613342565b60020b5f190190627fffff198212627fffff83131761145e57565b600291820b910b0390627fffff198212627fffff83131761145e57565b60020b908160ff1d82810118620d89e881116136b55763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116613699575b6004811661367d575b60088116613661575b60108116613645575b60208116613629575b6040811661360d575b608081166135f1575b61010081166135d5575b61020081166135b9575b610400811661359d575b6108008116613581575b6110008116613565575b6120008116613549575b614000811661352d575b6180008116613511575b6201000081166134f5575b6202000081166134da575b6204000081166134bf575b62080000166134a6575b5f1261349e575b0160201c90565b5f1904613497565b6b048a170391f7dc42444e8fa290910260801c90613490565b6d2216e584f5fa1ea926041bedfe9890920260801c91613486565b916e5d6af8dedb81196699c329225ee6040260801c9161347b565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91613470565b916f31be135f97d08fd981231505542fcfa60260801c91613465565b916f70d869a156d2a1b890bb3df62baf32f70260801c9161345b565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91613451565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91613447565b916fe7159475a2c29b7443b29c7fa6e889d90260801c9161343d565b916ff3392b0822b70005940c7a398e4b70f30260801c91613433565b916ff987a7253ac413176f2b074cf7815e540260801c91613429565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161341f565b916ffe5dee046a99a2a811c461f1969c30530260801c91613415565b916fff2ea16466c96a3843ec78b326b528610260801c9161340c565b916fff973b41fa98c081472e6896dfb254c00260801c91613403565b916fffcb9843d60f6159c9db58835c9266440260801c916133fa565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916133f1565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916133e8565b916ffff97272373d413259a46990580e213a0260801c916133df565b826345c3193d60e11b5f5260045260245ffd5b604051906136d582611399565b5f6040838281528260208201520152565b905f19820191821360011661145e57565b81810392915f13801582851316918412161761145e57565b801561145e575f190190565b60020b9060020b90811561373d57627fffff1981145f1983141661145e570590565b634e487b7160e01b5f52601260045260245ffd5b8181029291811591840414171561145e57565b811561373d570490565b9291909161377a614830565b6137876013548092613751565b906137956010548093611472565b9060115492838311613a69575b6137aa614830565b6001810180911161145e576137c7926137c291613751565b611472565b91808311613a61575b50808214613a24576138036137f2613809936117f46117eb60105480936115a1565b916117f46117eb60105480936115a1565b906115a1565b936015549384805b6139e3575b5061382d6020613837920194855160020b9061337e565b8560020b9061371b565b918461386e60ff60145460181c1694855f146139a957606085015160020b90818160020b125f146139a257505b97600d5490615136565b918061387a8385613751565b11613992575050925b5160020b94613891856115ae565b9561389f60405197886113b4565b858752601f196138ae876115ae565b015f5b81811061397b5750505f905b8682106138ce575050505050505090565b6138d8828961165d565b519060020b9052600161390a6138fc846138f2858c61165d565b515160020b61209f565b606086015160020b90614f51565b916020613917828b61165d565b51018360020b905261395c878a613955602061394a8661394461393a828761165d565b515160020b61339b565b9461165d565b51015160020b61339b565b9089614fef565b6040613968838c61165d565b510190838060801b0316905201906138bd565b6020906139866136c8565b82828c010152016138b1565b61399c9250613764565b92613883565b9050613864565b606085016139ba815160020b612071565b60020b8260020b125f146139d057505b976117fa565b6139de91505160020b612071565b6139ca565b945f19860186811161145e576139f890615024565b613a0187615024565b03613a1e57613a12613a189161370f565b9561370f565b80613811565b94613816565b505050505050604051613a386020826113b4565b5f81525f805b818110613a4a57505090565b602090613a556136c8565b82828601015201613a3e565b91505f6137d0565b8392506137a2565b805115158252602080820151908301526040908101516001600160a01b0316910152565b600160ff1b811461145e575f0390565b9392916001600160a01b039182169116818103613fa6575b50505f915f5b8451811015613c30576001600160801b036040613ae0838861165d565b51015116613af1575b600101613ac3565b613ba190604060ff60145460181c16805f14613c1857613b11838961165d565b515160020b905b15613c04576020613b29848a61165d565b51015160020b5b613b4f6001600160801b0384613b46878d61165d565b51015116613286565b60ff6060613b5d878d61165d565b5101511691845193613b6e85611333565b60020b845260020b6020840152600f0b838301526060820152815180948192632d35e7ed60e11b83528860048401611531565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610e3557600192613be7575b509050613ae9565b613bfe9060403d8111611db257611da481836113b4565b50613bdf565b613c0e838961165d565b515160020b613b30565b6020613c24848a61165d565b51015160020b90613b18565b509190928051905f19820191821161145e57602091613c4e9161165d565b5101516018549060181b65ffffff000000169065ffffff0000001916176018557f0000000000000000000000000000000000000000000000000000000000000000613ca360018060a01b0385511630836132e7565b906020850194613cbd60018060a01b0387511630846132e7565b925f8113613f3f575b848413613eca575b848112613dd7575b5050828212613ce7575b5050509050565b84516001600160a01b039081169591169190823b15613dd35760405195632961046560e21b87526004870152838660248183875af195861561074b57849596613db6575b505160209291613d50916001600160a01b0316908390613d4a90613a95565b91614634565b600460405180958193630476982d60e21b83525af1908115613daa5750613d7b575b80808392613ce0565b613d9c9060203d602011613da3575b613d9481836113b4565b8101906132d8565b505f613d72565b503d613d8a565b604051903d90823e3d90fd5b84613dc59195929394956113b4565b613dd357908392915f613d2b565b8380fd5b81516001600160a01b03848116939116833b15612bc95760405190632961046560e21b82526004820152868160248183885af18015613ebf57908791613eaa575b505080516001600160a01b031680613e96575b50516001600160a01b0316613e8c57613e45602091613a95565b915b600460405180948193630476982d60e21b83525af1801561074b57613e6d575b80613cd6565b613e859060203d602011613da357613d9481836113b4565b505f613e67565b5060208491613e47565b613ea49084613d4a85613a95565b5f613e2b565b81613eb4916113b4565b612c2c57855f613e18565b6040513d89823e3d90fd5b86516001600160a01b038481169116813b15612bc95785613f0692889283604051809681958294630b0d9c0960e01b845230906004850161157f565b03925af18015613f3457908691613f1f575b5050613cce565b81613f29916113b4565b611ed257845f613f18565b6040513d88823e3d90fd5b81516001600160a01b03908116908416803b15610e4057825f91613f7c9383604051809681958294630b0d9c0960e01b845230906004850161157f565b03925af18015610e3557613f91575b50613cc6565b613f9e9195505f906113b4565b5f935f613f8b565b60405191613fb383611399565b81108252600160208301526040820152613feb60405191633cf3645360e21b8352613fe160048401856114ee565b60a4830190613a71565b6101206101048201525f610124820152602081610144815f60018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610e355761403f575b80613abd565b6140579060203d602011613da357613d9481836113b4565b505f614039565b6101409290916140e691906001600160a01b0361407a82611181565b1684526001600160a01b0361409160208301611181565b16602085015262ffffff6140a7604083016113d7565b1660408501526140b9606082016112a4565b60020b60608501526001600160a01b03906140d690608001611181565b16608084015260a0830190613a71565b6101206101008201525f6101208201520190565b60ff5f54166145e45761414c9060a06141143660246113e7565b207f0000000000000000000000000000000000000000000000000000000000000000906141418183614777565b949290969150614864565b60145460181c60ff1680156145d15760185460181c60020b8260020b135b60015f5260076020525f805160206155068339815191525460020b9082156145c557818460020b12905b156144e357505050509061420d91602060ff60145460181c16805f146144cf576141c861309860185460181c60020b612084565b604051916141d583611399565b151582526001838301526001600160a01b031660408083019190915251633cf3645360e21b815294859182919060246004840161405e565b03815f6001600160a01b0386165af18015610e355761449c575b6142319250614777565b50509050925b60c435908115158203610e405762ffffff91610fff9182911561449357165b169116620f42408183020491010360ff60145460181c165f146143ea57608082901d5f600f82900b126143a557600354614299916001600160801b031690611472565b6003555b600f82900b5f811261434b5750505f805160206154e6833981519152916142d060609260018060801b03166004546115a1565b6004555b600454600f54811015614307575b600354906040519260020b835260208301526040820152a163b47b2fb160e01b905f90565b61010061ff00195f5416175f557f628a470bfdde264ef77cd19acfbfca22b3e4413adaf5837ec9fbc0043e35793f602061433f614830565b604051908152a16142e2565b62ffffff91925061435b906114c1565b9116620f42400391620f4240831161145e575f805160206154e68339815191529260609261439d91614395916001600160801b03166151b1565b600454611472565b6004556142d4565b6143ae906114c1565b62ffffff8216620f42400390620f4240821161145e576143e2916143da916001600160801b03166151b1565b6003546115a1565b60035561429d565b90600f81900b5f8112614456575060035461440f906001600160801b03831690611472565b6003555b60801d905f600f83900b1261444857505f805160206154e68339815191529161439d60609260018060801b03166004546115a1565b9061435b62ffffff916114c1565b61445f906114c1565b62ffffff8316620f42400390620f4240821161145e5761448b916143da916001600160801b03166151b1565b600355614413565b600c1c16614256565b6020833d6020116144c7575b816144b5602093836113b4565b81010312610e40576142319250614227565b3d91506144a8565b6141c861309860185460181c60020b613363565b97949392976144f6575b50505050614237565b61455794975090614513602092825f146145bc5761309890613363565b6040519161452083611399565b1582526001838301526001600160a01b031660408083019190915251633cf3645360e21b815294859182919060246004840161405e565b03815f6001600160a01b0386165af18015610e3557614589575b61457b9250614777565b50509050925f8080806144ed565b6020833d6020116145b4575b816145a2602093836113b4565b81010312610e405761457b9250614571565b3d9150614595565b61309890612084565b818460020b1390614194565b60185460181c60020b8260020b1261416a565b5063b47b2fb160e01b905f90565b6001600160a01b03168061460557504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115610e35575f91613334575090565b9091906001600160a01b03811690816146c25750505f80808093855af1156146595750565b6040516390bfb86560e01b81526001600160a01b0390911660048201525f602482018190526080604483015260a03d601f01601f191690810160648401523d6084840152903d9060a484013e808201600460a482015260c4633d2cec6f60e21b91015260e40190fd5b60205f604481949682604095865198899363a9059cbb60e01b855260018060a01b0316600485015260248401525af13d15601f3d116001855114161716928281528260208201520152156147135750565b6040516390bfb86560e01b8152600481019190915263a9059cbb60e01b602482015260806044820152601f3d01601f191660a0810160648301523d60848301523d5f60a484013e808201600460a482015260c4633c9fd93960e21b91015260e40190fd5b9190602090604051828101918252600660408201526040815261479b6060826113b4565b519020604051631e2eaeaf60e01b8152600481019190915292839060249082906001600160a01b03165afa918215610e35575f926147fc575b506001600160a01b0382169160a081901c60020b9162ffffff60b883901c81169260d01c1690565b9091506020813d602011614828575b81614818602093836113b4565b81010312610e405751905f6147d4565b3d915061480b565b60105480421061485e5761484761485091426115a1565b60135490613764565b6001810180911161145e5790565b50600190565b73fffd8963efd1fc6a506488495d951d51639616826401000276a21982016001600160a01b031611614afd57602081901b600160201b600160c01b0316808015610e4057693627a301d71055774c859160ff8260018060801b031060071b83811c60018060401b031060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c821060031b177b01c1818141808140018080c0814100004181408140c0c100414140c160221b6f8421084210842108cc6318c6db6d54be85831c1c601f161a17169160808310155f14614af15750607e1982011c5b800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c600160321b90800260cd1c169d600160331b9060cc1c169c600160341b9060cb1c169b600160351b9060ca1c169a600160361b9060c91c1699600160371b9060c81c1698600160381b9060c71c1697600160391b9060c61c16966001603a1b9060c51c16956001603b1b9060c41c16946001603c1b9060c31c16936001603d1b9060c21c16926001603e1b9060c11c16916001603f1b9060c01c1690607f190160401b1717171717171717171717171717026fdb2df09e81959a81455e260799a0632f6f028f6481ab7f045a5af012a19d003aa919820160801d60020b910160801d60020b918282145f14614acd5750905090565b6001600160a01b0390811690614ae28461339b565b1611614aec575090565b905090565b905081607f031b614941565b6318521d4960e21b5f9081526001600160a01b0391909116600452602490fd5b91905f905f905f5b8551811015614cb0576001600160801b036040614b42838961165d565b51015116614b53575b600101614b25565b9192614c02604060ff60145460181c16805f14614c9857614b74868a61165d565b515160020b905b15614c84576020614b8c878b61165d565b51015160020b5b8960ff6060614bbe8a6139446001600160801b0389614bb2848961165d565b51015116600f0b6114c1565b5101511691845193614bcf85611333565b60020b845260020b6020840152600f0b838301526060820152815180938192632d35e7ed60e11b83528760048401611531565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610e3557600192614c59925f905f92614c61575b50614c5391926132a5565b956132a5565b929050614b4b565b614c539250614c7e915060403d8111611db257611da481836113b4565b91614c48565b614c8e868a61165d565b515160020b614b93565b6020614ca4878b61165d565b51015160020b90614b7b565b505091909250614cc2826006546132a5565b600655565b9093929193614cd46136c8565b9480614e2757505f5b6001600160a01b031680614d015750505060020b80835260208301525f6040830152565b919250614e0c91614db390606090614da59060b56001600160881b03821160071b82811c6001600160481b031060061b1782811c64ffffffffff1060051b1782811c62ffffff1060041b17600181811c9290921b9083901c62010000010260121c80830401811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900360301b6001600160a01b0316614864565b940193845160020b90614f51565b92614df4602087019460020b9182865260ff60145460181c1692835f14614e145750614de990865160020b905160020b9061337e565b60020b80885261339b565b93516001600160801b0394906129fe9060020b61339b565b166040830152565b614e22915160020b9061209f565b614de9565b8160ff60145460181c165f14614e605750600654614e5b91614e559160801d6001600160801b0316906115a1565b82615320565b614cdd565b600654614e5b92614e7a916001600160801b0316906115a1565b615320565b90670de0b6b3a7640000820291808305670de0b6b3a7640000149015171561145e57565b81810292915f8212600160ff1b82141661145e57818405149015171561145e57565b9060018201915f60018412911290801582169115161761145e57565b9190915f838201938412911290801582169115161761145e57565b9081600f0b918203614f0a57565b6393dafdf160e01b5f5260045ffd5b80628000000160181c15614f34576335278d125f526004601cfd5b60020b90565b9060020b9060020b02908160020b91820361145e57565b9060ff60145460181c165f14614f9d575f8260020b125f14614f9057614f8b81614f86614f8182611e679661337e565b612084565b61371b565b614f3a565b614f8b81611e679361371b565b5f8260020b125f14614fb657614f8b81611e679361371b565b614f8b81614f86614fca82611e679661209f565b613363565b6117fa6117db6117d26117c96117c4611e6795614fea614830565b614ee1565b9092909190801561501e575f19810190811161145e57915b1561501557611e6792615443565b611e6792615400565b91615007565b61503f615036615048926137c2614830565b60135490613751565b60105490611472565b601154808211614aec575090565b90670de0b6b3a76400008202905f19670de0b6b3a7640000840992828085109403938085039485841115610e4057146150e657670de0b6b3a764000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b1115610e40571461512d57600160601b910990828211900360a01b910360601c1790565b50505060601c90565b808202905f1983820990828083109203918083039283670de0b6b3a76400001115610e4057146151a0577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a764000091500490565b808202905f1983820990828083109203918083039283620f42401115610e405714615211577fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c2613993620f4240910990828211900360fa1b910360061c170290565b5050620f424091500490565b90606082901b905f19600160601b840992828085109403938085039485841115610e4057146150e6578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b91818302915f1981850993838086109503948086039586851115610e405714615318579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b9061532a9161521d565b6001600160a01b03811161535057600160a01b811015613298576001600160a01b031690565b505f90565b61539b612dce61536b612eee60a0612175611f3d565b60145460181c60ff16156153cf5760125460020b808260020b135f146153c857505b60125460181c60020b61337e565b6153ad614847601154601054906115a1565b90811561373d57600160ff1b81145f1983141661145e570590565b905061538d565b60125460020b808260020b125f146153c8575061538d565b6001600160a01b03918216908216039190821161145e57565b611e67926154389290916001600160a01b038083169082161161543d575b6001600160a01b039161543191906153e7565b169061521d565b615497565b9061541e565b611e6792615438929091906001600160a01b0380821690831611615491575b61548a61547b6001600160a01b038381169085166150ed565b926001600160a01b03926153e7565b16916152a0565b90615462565b6001600160801b038116919082036154ab57565b60405162461bcd60e51b81526020600482015260126024820152716c6971756964697479206f766572666c6f7760701b6044820152606490fdfe27db09392d7d230eb65a11bd84925fb8da90df8a067ca8a4fc2933b4f637262bb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b828b7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d";
1381
1410
 
1382
1411
  // src/evm/abis/bytecodes/dopplerDN404.ts
1383
- var dopplerDN404_default = "0x60a0604052346104a85761390680380380610019816107f1565b928339810160e0828203126104a85781516001600160401b0381116104a85781610044918401610816565b60208301519091906001600160401b0381116104a85781610066918501610816565b9060408401519161007960608601610867565b9361008660808701610867565b60a08701519093906001600160401b0381116104a85760c0916100aa918901610816565b960151926001600160a01b031680156107de575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a382156107cf578284066107c0578051906001600160401b0382116104eb5760015490600182811c921680156107b6575b60208310146105d05781601f849311610748575b50602090601f83116001146106e2575f926106d7575b50508160011b915f199060031b1c1916176001555b8051906001600160401b0382116104eb5760025490600182811c921680156106cd575b60208310146105d05781601f84931161065f575b50602090601f83116001146105f9575f926105ee575b50508160011b915f199060031b1c1916176002555b83516001600160401b0381116104eb57600354600181811c911680156105e4575b60208210146105d057601f811161056d575b50602094601f821160011461050a579481929394955f926104ff575b50508160011b915f199060031b1c1916176003555b608052604051610d35808201906001600160401b038211838310176104eb576020918391612bd183393381520301905ff080156104e0576080516001600160a01b0391909116906001600160601b035f1990910110156104d35768a20d6e21d0e5255309546001600160a01b03166104c65780156104b957630f4599e55f523360205260205f6024601c82855af160015f511416156104ac57678da5cb5b6cef16e65f5260208060046018305afa601f3d1160205160601b151016610499575b68a20d6e21d0e5255308805463ffffffff60201b191664010000000017905568a20d6e21d0e525530980546001600160a01b03191691909117905580610375575b604051612334908161089d823960805181818161040b01528181610a4f01528181610c1c015281816114860152818161171c015281816119110152611f920152f35b6001600160a01b03821691821561048c57608051820463fffffffe108260601c1761047f5768a20d6e21d0e525530880546001600160a01b031660a084901b6001600160a01b03191690811790915561041292906103d28361087b565b80546001600160a01b031690911790555f90815283907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082a361087b565b906bff00000000000000000000008254918260581c9060015f527fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039360205fa2600260ff821691161560011b1860011760581b16906bff000000000000000000000019161790555f80610333565b63e5cfe9575f526004601cfd5b63ea553b345f526004601cfd5b5f806004601c82855af16102f2575b5f80fd5b63d125259c5f526004601cfd5b6339a84a7b5f526004601cfd5b63ead4d2e45f526004601cfd5b63997c4ef45f526004601cfd5b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b015190505f8061021d565b601f1982169560035f52805f20915f5b8881106105555750836001959697981061053d575b505050811b01600355610232565b01515f1960f88460031b161c191690555f808061052f565b9192602060018192868501518155019401920161051a565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c810191602084106105c6575b601f0160051c01905b8181106105bb5750610201565b5f81556001016105ae565b90915081906105a5565b634e487b7160e01b5f52602260045260245ffd5b90607f16906101ef565b015190505f806101b9565b60025f9081528281209350601f198516905b818110610647575090846001959493921061062f575b505050811b016002556101ce565b01515f1960f88460031b161c191690555f8080610621565b9293602060018192878601518155019501930161060b565b60025f529091507f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace601f840160051c810191602085106106c3575b90601f859493920160051c01905b8181106106b557506101a3565b5f81558493506001016106a8565b909150819061069a565b91607f169161018f565b015190505f80610157565b60015f9081528281209350601f198516905b8181106107305750908460019594939210610718575b505050811b0160015561016c565b01515f1960f88460031b161c191690555f808061070a565b929360206001819287860151815501950193016106f4565b60015f529091507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f840160051c810191602085106107ac575b90601f859493920160051c01905b81811061079e5750610141565b5f8155849350600101610791565b9091508190610783565b91607f169161012d565b633eaf92f760e21b5f5260045ffd5b63265f13bd60e21b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b6040519190601f01601f191682016001600160401b038111838210176104eb57604052565b81601f820112156104a8578051906001600160401b0382116104eb57610845601f8301601f19166020016107f1565b92828452602083830101116104a857815f9260208093018386015e8301015290565b51906001600160a01b03821682036104a857565b6001600160a01b03165f90815268a20d6e21d0e5255313602052604090209056fe608080604052600436101561075d575b503615610752575f3560e01c63e5eb36c881146103d25763f6916ddd811461038f576362fb246d811461036b57632d8a746e81146103325763c016aa52811461031f5763d10b6e0c811461022f576327ef549581146102145763f5b100ea81146101ef5763e2c7928181146101d45763cb30b46081146100a95763b7a94eb8146100a057633c10b94e5f526004601cfd5b60015f5260205ff35b60206040510160405260606003546100c0816113a1565b6100e4575b50605f601f198201915f6020825180930101526020835201601f191690f35b905060405190608082019160a081016040525f8352600a600435935b5f19019360308282060185530492831561011c57600a90610100565b9250608083601f19810192030181526040519283915f9061013c856113a1565b94600181169081156101b45750600114610173575b61016d9450518092825e015f815203601f1981018352826113d9565b816100c5565b905060035f5260205f20935f5b818110610198575061016d9450830160200190610151565b8554602082890181019190915260019096019587955001610180565b602092935061016d96915060ff1916828601528015150284010190610151565b63ffffffff68a20d6e21d0e52553085460801c165f5260205ff35b63ffffffff6102086004356001600160a01b031661135f565b5460801c165f5260205ff35b6001600160a01b03610227600435612130565b165f5260205ff35b68a20d6e21d0e5255309546001600160a01b03163303610312576001600160a01b036044358116906024359060043581169061028061027b5f19600160201b861086020160011b612055565b6120eb565b5416928381036102ef575b505f82815268a20d6e21d0e525530c60209081526040822080546001600160a01b0319166001600160a01b03851617905568a20d6e21d0e525530d60601b600885901c018054600160ff90961695861b191693151590941b92909217909255918152f35b6102f990846115cd565b5415610305578361028b565b63cfb3b9425f526004601cfd5b63ce5a776b5f526004601cfd5b6001600160a01b03610227600435612107565b6004356001600160a01b0361034682612107565b161561035e576001600160a01b039061022790612107565b63ceea21b65f526004601cfd5b6103856001600160a01b03602435811690600435166115cd565b5415155f5260205ff35b68a20d6e21d0e5255309546001600160a01b031633036103125760243515156103c86001600160a01b03600435811690604435166115cd565b5560015f5260205ff35b68a20d6e21d0e5255309546001600160a01b031633819003610312576001600160a01b0360043581165f818152600560205260409020547f000000000000000000000000000000000000000000000000000000000000000093919260443592916064358216916024351690610448908790611438565b935f925f948661072d575b83156107205715610713576001600160a01b0361048061027b600160201b851085025f190160011b612055565b54168703610706578681036106cd575b5061049a8661135f565b906104a48361135f565b90825460a01c808a116106c0576105a69361055e916104cf908c90036001600160601b031682612169565b83546104ee9060a01c6001600160601b038d8116919091011685612169565b6104f78361229f565b61068f575b600161052b61050a8c611380565b9261052563ffffffff5f1981845460801c160116809261218c565b83612079565b61054d8161053f5f198801851b8501612055565b9463ffffffff8616906120c3565b63ffffffff165f1901811b01612095565b6105a08463ffffffff845460801c169361058163ffffffff60018701168261218c565b61059b61058d83611380565b8663ffffffff8716916120c3565b6121d0565b90612260565b855f52845f8051602061231483398151915260205fa36105c95760015f5260205ff35b5f19820191821161067b5763ffffffff6105e28461135f565b5460801c169182811061060d575b5050505f52600560205260405f20908154039055808080806100a0565b61061684611380565b928210156105f0578181146105f0576001826106628363ffffffff8481966106628a610645886106739d612079565b928161065d610655838795612079565b809b836120c3565b6120c3565b825f19911601811b01911690612095565b8280806105f0565b634e487b7160e01b5f52601160045260245ffd5b610698836121af565b5f83815268a20d6e21d0e525530c6020526040902080546001600160a01b03191690556104fc565b63f4d678b85f526004601cfd5b6106d781886115cd565b54610490576001600160a01b036106ed83612130565b16036106f95787610490565b6359c896be5f526004601cfd5b63a11481005f526004601cfd5b6340739bf05f526004601cfd5b63ea553b345f526004601cfd5b9350935063ffffffff61074760015f198401811b01612055565b169385851093610453565b3461075957005b5f80fd5b5f3560e01c90816306fdde031461126757508063095ea7b3146111c65780630ad9e7bf1461118e57806310aa0ebb1461116957806316f0115b1461114157806318160ddd14611119578063207d0636146110d657806323b872dd14611030578063274e430b146110035780632a6a935d14610f915780632f745c5914610f2a578063313ce56714610f0f5780634ef41efc14610edf5780634f6ccce714610ec157806355f804b314610d685780635b2aa23914610bcb5780636c0360eb14610b3957806370a0823114610b0a578063715018a614610ac65780638902653814610a995780638da5cb5b14610a72578063907af6c014610a3857806395d89b411461095e578063a9059cbb1461092d578063dd62ed3e146108f95763f2fde38b14610887575f61000f565b34610759576020366003190112610759576108a0611333565b6108a8611589565b6001600160a01b031680156108e6575f80546001600160a01b03198116831782556001600160a01b0316905f805160206122f48339815191529080a3005b631e4fbdf760e01b5f525f60045260245ffd5b34610759576040366003190112610759576020610925610917611333565b61091f611349565b90611523565b604051908152f35b3461075957604036600319011261075957610953610949611333565b60243590336115eb565b602060405160018152f35b34610759575f366003190112610759576040515f60025461097e816113a1565b8084529060018116908115610a1457506001146109b6575b6109b2836109a6818503826113d9565b60405191829182611309565b0390f35b60025f9081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b8082106109fa575090915081016020016109a6610996565b9192600181602092548385880101520191019092916109e2565b60ff191660208086019190915291151560051b840190910191506109a69050610996565b34610759575f3660031901126107595760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610759575f366003190112610759575f546040516001600160a01b039091168152602090f35b34610759575f36600319011261075957610ab1611589565b6004805460ff60a01b1916600160a01b179055005b34610759575f36600319011261075957610ade611589565b5f80546001600160a01b0319811682556001600160a01b03165f805160206122f48339815191528280a3005b34610759576020366003190112610759576020610b2d610b28611333565b61135f565b5460a01c604051908152f35b34610759575f366003190112610759576040515f600354610b59816113a1565b8084529060018116908115610a145750600114610b80576109b2836109a6818503826113d9565b60035f9081525f805160206122d4833981519152939250905b808210610bb1575090915081016020016109a6610996565b919260018160209254838588010152019101909291610b99565b34610759576020366003190112610759576004356001600160401b03811161075957366023820112156107595760048101356001600160401b038111610759573660248260051b84010111610759577f0000000000000000000000000000000000000000000000000000000000000000918282029282840481148315171561067b57335f52600560205260405f205493610c643361135f565b5460a01c610c728287611456565b11610d5957610c84610c8a9286611438565b94611456565b335f52600560205260405f2055610ca03361135f565b9263ffffffff610caf33611380565b945460801c16915f915b84831015610d575760248360051b8301013584811015610d4857818110610d3e578181600193849303610cf2575b5001925b0191610cb9565b8063ffffffff848b61066282610d0b610d389784612079565b610d26818a610d1a8188612079565b9661065d888c836120c3565b888616919086165f1901811b01612095565b88610ce7565b5091600190610ceb565b633277964160e01b5f5260045ffd5b005b6302579b0560e11b5f5260045ffd5b34610759576020366003190112610759576004356001600160401b03811161075957366023820112156107595760048101356001600160401b03811161075957366024828401011161075957610dbc611589565b610dc76003546113a1565b601f8111610e71575b505f601f8211600114610e0c5781925f92610dfe575b50508160011b915f199060031b1c1916176003555f80f35b602492500101358280610de6565b601f1982169260035f5260205f20915f5b858110610e5657508360019510610e3a575b505050811b01600355005b01602401355f19600384901b60f8161c19169055828080610e2f565b90926020600181926024878701013581550194019101610e1d565b60035f525f805160206122d4833981519152601f830160051c81019160208410610eb7575b601f0160051c01905b818110610eac5750610dd0565b5f8155600101610e9f565b9091508190610e96565b34610759576020366003190112610759576020610925600435611463565b34610759575f3660031901126107595768a20d6e21d0e5255309546040516001600160a01b039091168152602090f35b34610759575f36600319011261075957602060405160128152f35b3461075957604036600319011261075957610f43611333565b60243563ffffffff610f548361135f565b5460801c16811015610f8257610f7963ffffffff91610f74602094611380565b612079565b16604051908152f35b6306ed618760e11b5f5260045ffd5b3461075957602036600319011261075957600435801580158092036107595761095391610fbd3361135f565b91825460581c915f52337fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039360205fa2600260ff83169216151860011b186001179061156c565b34610759576020366003190112610759576020611026611021611333565b611410565b6040519015158152f35b3461075957606036600319011261075957611049611333565b611051611349565b6044359061105f33846115af565b926e22d473030f116ddee9f6b43ac78ba33314806110bf575b156110b7575f19935b60018501611095575b5061095393506115eb565b8484116110aa5783610953950390558461108a565b6313be252b5f526004601cfd5b835493611081565b5060046110cb8261135f565b5460581c1615611078565b34610759576020366003190112610759576110ef611333565b6110f7611589565b600480546001600160a81b0319166001600160a01b0392909216919091179055005b34610759575f36600319011261075957602068a20d6e21d0e52553085460a01c604051908152f35b34610759575f366003190112610759576004546040516001600160a01b039091168152602090f35b34610759575f36600319011261075957602060ff60045460a01c166040519015158152f35b34610759576020366003190112610759576001600160a01b036111af611333565b165f526005602052602060405f2054604051908152f35b34610759576040366003190112610759576111df611333565b6001600160a01b03811690602435908190611211906e22d473030f116ddee9f6b43ac78ba38514611245575b336115af565b555f52337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa3602060405160018152f35b6112626112513361135f565b600460ff825460581c16179061156c565b61120b565b34610759575f366003190112610759575f600154611284816113a1565b8084529060018116908115610a1457506001146112ab576109b2836109a6818503826113d9565b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b8082106112ef575090915081016020016109a6610996565b9192600181602092548385880101520191019092916112d7565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361075957565b602435906001600160a01b038216820361075957565b6001600160a01b03165f90815268a20d6e21d0e52553136020526040902090565b6001600160a01b03165f90815268a20d6e21d0e52553106020526040902090565b90600182811c921680156113cf575b60208310146113bb57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916113b0565b601f909101601f19168101906001600160401b038211908210176113fc57604052565b634e487b7160e01b5f52604160045260245ffd5b9061141a8261135f565b5460581c9160016002841615159316156114315750565b3b15159150565b8115611442570490565b634e487b7160e01b5f52601260045260245ffd5b9190820180921161067b57565b9068a20d6e21d0e52553085463ffffffff8160801c16831015611514576114ae907f00000000000000000000000000000000000000000000000000000000000000009060a01c611438565b905f925f5b8381106114c957639f6fb6c960e01b5f5260045ffd5b806001018060011161067b5763ffffffff6114e68360011b612055565b166114f5575b506001016114b3565b828692961461150b5750600180910194906114ec565b93505050915090565b639f6fb6c960e01b5f5260045ffd5b906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba314611551575b61154d916115af565b5490565b600461155c8361135f565b5460581c166115445750505f1990565b805460ff60581b191660589290921b60ff60581b16919091179055565b5f546001600160a01b0316330361159c57565b63118cdaa760e01b5f523360045260245ffd5b9060285260145268a20d6e21d0e525530f5f5260485f20905f602852565b9060285260145268a20d6e21d0e525530b5f5260485f20905f602852565b6004549092906001600160a01b03838116908216149081612046575b50612037576001600160a01b038316611fe0575b6001600160a01b03821615610720576116338361135f565b61163c8361135f565b68a20d6e21d0e5255309546001600160a01b031615610713576040519161018083016001600160401b038111848210176113fc576040525f83525f60208401525f60808401525f60a08401525f60c08401525f60e08401525f6101008401525f6101208401525f6101408401525f610160840152805463ffffffff8160801c16604085015263ffffffff835460801c1660608501528060a01c85116106c0576116f560a082901c8690036001600160601b031683612169565b825460a01c8501906117106001600160601b03831685612169565b611745604086015191877f00000000000000000000000000000000000000000000000000000000000000009160a01c03611438565b808203911102845261175686611410565b15611f78575b50611d73565b68a20d6e21d0e52553085463ffffffff60208501518551928382848360801c1601038060808901528360801b9060801b16908360801b191617928368a20d6e21d0e52553085501916040519260c060a085019180835260051b850101604052836040015260c0830183528261016087015260601c166101208501528351611c53575b505060208201516118c9575b5061014081015180611885575b50610160015180611833575b505f9081526001600160a01b0391821692909116905f8051602061231483398151915290602090a3565b600160206040828060a01b0368a20d6e21d0e5255309541693015192603f19840193849163263c69d6835283601f198301525f825160051b6044019260231901915af19151141615610759575f611809565b600160205f9281838060a01b0368a20d6e21d0e5255309541691015190815160051b60840190607f19830195869360631901915af19151141615610759575f6117fd565b9194610160829492015160208360601b9101526118e582611380565b9463ffffffff6118f584866121d0565b1660e086015268a20d6e21d0e5255308549263ffffffff6119397f00000000000000000000000000000000000000000000000000000000000000008660a01c611438565b9460201c16848111908115021761010087015261196e60608701519563ffffffff602089015188018060c08b0152169061218c565b63ffffffff68a20d6e21d0e52553085460401c169760015b15611bf4575b6101208701515f9063ffffffff8b8116911614611a4257611a3d63ffffffff60018c01169a60e0641fffffffe0631fffffff8360031c1668a20d6e21d0e525531160601b01549260051b16161c63ffffffff165b8060081c685106b710e87292a98760611b0160018260ff161b8019825416179055611a1263ffffffff82168a8d6120c3565b611a3263ffffffff60e08c01511663ffffffff60018c019b169083612260565b6101608a01516122bd565b611986565b949798939291906101008801515b63ffffffff611a645f19830160011b612055565b1615611bd0575f19906001810160081c685106b710e87292a98760611b018054196001830160ff1690811c901b8015611b58575b80611aae575b5050508981119081150217611a50565b600180939450811901167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f6101e07a1412563212c14164235266736f7425221143267a4524367526767760fc7b2aaaaaaaba69a69a6db6db6db2cb2cb2ce739ce73def7bdeffffffff860260f81c161b60f71c1692831c63d76453e004161a179082685106b710e87292a98760611b03190160081b17910181108a8211175f03175f8080611a9e565b506001909c9895929c9a9794919a9693965b01805419685106b710e87292a98760611b60088e901c0182118117611b925750600190611b6a565b9c9295989c9a9194979a969396808d60081c685106b710e87292a98760611b018311611bbf575b50611a98565b508c1960ff1690811b901c80611bb9565b611a3d909a999691929394959a6001810188811190811502176101008b01526119e0565b60c0870151860361198c57945094925094509468a20d6e21d0e52553085463ffffffff60201b61010084015160201b169163ffffffff60401b9060401b1690600160201b600160601b031916171768a20d6e21d0e5255308555f6117f0565b602060018860609a9699959a989497981b17910152611c7182611380565b94611c9160408801519563ffffffff895188038060a08c0152169061218c565b60015b15611d5a575b5f945f190194611caa8688612079565b63ffffffff8116905f1982018060021c685106b710e87292a98960611b019060c082549160061b1681811c60018060401b0316901b189055611cf1826101608c01516122bd565b600160ff62ffffff8360081c16685106b710e87292a98760611b0192161b198154169055611d1e8161229f565b611d29575b50611c94565b611d32816121af565b5f90815268a20d6e21d0e525530c6020526040812080546001600160a01b0319169055611d23565b60a08701518503611c9a57935093509390945f806117e4565b9194604086979294970151948651976020880151898110818b18028a1899888b108b8a18028914611f69578a8918898c10028918908190038a52900360208901526001600160a01b0383811690831614611f47576040805163144027d3818301526001600160a01b03858116606080840191909152908516608083015260a08201528a8918898c1002891860c0820181815260059190911b820160e090810190935260208201529081018152610140890152611e2e83611380565b95611e3883611380565b9763ffffffff611e4885846121d0565b1660e08b015260608a01519a81811090821802188a019560015b15611f01575b878b611eac8163ffffffff808f8f90611ea060e09284611e975f9b5f1960408701510190816040880152612079565b169889916120c3565b01511691169083612260565b6101408c015160208151838152019052611ec58161229f565b611ed0575b50611e62565b611ed9816121af565b5f90815268a20d6e21d0e525530c6020526040812080546001600160a01b0319169055611eca565b9960010199868b03611e6857939895509398611f2e92975063ffffffff919650806060870152168361218c565b611f4263ffffffff6040850151168261218c565b611762565b9492978681989593989792971090821802186060840151016060840152611762565b50509492975094509491611762565b611fb7906001600160a01b0388811690881614611fcd575b7f000000000000000000000000000000000000000000000000000000000000000090611438565b606084015180820391110260208401525f61175c565b6040850151855190036060860152611f90565b611fe98361135f565b5460a01c60018060a01b0384165f52600560205260405f205490808211918215612024575b50501561161b576311acc28f60e01b5f5260045ffd5b81039150811161067b5781115f8061200e565b632e13674560e01b5f5260045ffd5b60ff915060a01c16155f611607565b60e08160031c685106b710e87292a98960611b01549160051b161c63ffffffff1690565b60e0908260031c9060601b01549160051b161c63ffffffff1690565b9060e08260031c685106b710e87292a98960611b019260051b1682549182821c1863ffffffff16901b189055565b60e0909291928360031c9060601b019260051b1682549182821c1863ffffffff16901b189055565b63ffffffff165f5268a20d6e21d0e525530a60205260405f2090565b6001600160a01b039061212b9061027b90600160201b8110025f190160011b612055565b541690565b6001600160a01b0361214182612107565b161561035e575f90815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b80546001600160a01b031660a09290921b6001600160a01b031916919091179055565b805463ffffffff60801b191660809290921b63ffffffff60801b16919091179055565b60018160081c68a20d6e21d0e525530d60601b019160ff161b198154169055565b805460601c63ffffffff16929183156121e7575050565b68a20d6e21d0e5255308805463ffffffff19811663ffffffff918216600101918216908117909255835463ffffffff60601b191660609190911b63ffffffff60601b1617909255909250829061223c826120eb565b80546001600160a01b0319166001600160a01b039092169190911790551561075957565b5f1901908160021c685106b710e87292a98960611b019260c084549360061b169163ffffffff169060201b1782821c1860018060401b0316901b189055565b8060081c68a20d6e21d0e525530d60601b01549060ff161c60011690565b9060209082519060081b8284015117815201905256fec2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef608034607857601f610d3538819003918201601f19168301916001600160401b03831184841017607c57808492602094604052833981010312607857516001600160a01b03811690819003607857683602298b8c10b0123180546001600160a01b031916919091179055604051610ca490816100918239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60808060405260043610156101c5575b5036156101ba575f3560e01c63263c69d681146101405763144027d381146100cf57630f4599e51461004857633c10b94e5f526004601cfd5b683602298b8c10b01231546001600160a01b0316806100ab575b50683602298b8c10b01230546001600160a01b03811661009e576001600160a01b0319163317683602298b8c10b012305560015f908152602090f35b63bf656a465f526004601cfd5b6004356001600160a01b0316036100c2575f610062565b63c59ec47a5f526004601cfd5b683602298b8c10b01230546001600160a01b03163303610133576004356024359060443591602483810193600481013560051b0101925b8381036101165760015f5260205ff35b803582845f80516020610c848339815191525f80a4602001610106565b63363cb3125f526004601cfd5b683602298b8c10b01230546001600160a01b0316330361013357600435602481810191600481013560051b0101905b81810361017f5760015f5260205ff35b8035600881901c6001600160581b03169060018116801560609290921c91820291025f80516020610c848339815191525f80a460200161016f565b346101c157005b5f80fd5b5f3560e01c90816301ffc9a714610aa85750806306fdde0314610a3d578063081812fc146109e6578063095ea7b31461096457806318160ddd1461091857806323b872dd1461090457806324359879146108ad5780632f745c591461083c57806342842e0e146107c95780634f6ccce7146107325780636352211e146107035780636cef16e61461063757806370a08231146105da5780638da5cb5b146105aa57806395d89b411461053f57806397e5311c14610513578063a22cb46514610487578063b88d4fde1461039d578063c87b56dd146103215763e985e9c5146102ad575f61000f565b346101c15760403660031901126101c1576102c6610b1c565b60205f6044601c6102d5610b32565b6102dd610c25565b604080516362fb246d87526001600160a01b039889168852979092169091525afa601f3d1116156103195760405260205f516040519015158152f35b3d5f823e3d90fd5b346101c15760203660031901126101c15760043561033e81610c4f565b505f806024601c61034d610c25565b6040519563cb30b46085526020525afa15610319576103999060205f803e60205f51823e805160205f5101602083013e6040815182015f60208201520160405260405191829182610af2565b0390f35b60803660031901126101c1576103b1610b1c565b6103b9610b32565b60443591606435916001600160401b0383116101c157366023840112156101c1576004830135926001600160401b0384116101c15736602485830101116101c157610405858385610b82565b813b61040d57005b83602094602460a49360405198899763150b7a028952338a8a015260018060a01b0316604089015260608801526080808801528260a08801520160c086013701905f601c8401915af115610479575b5163757a42ff60e11b0161046c57005b63d1a57ed65f526004601cfd5b3d1561045c573d5f823e3d90fd5b346101c15760403660031901126101c1576104a0610b1c565b6024358015158091036101c15760205f6064601c826104bd610c25565b9660018060a01b0316966040519663f6916ddd8352888752604052336060525af160015f511416156103195750337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160206040a3005b346101c1575f3660031901126101c157602061052d610c25565b6040516001600160a01b039091168152f35b346101c1575f3660031901126101c157610557610c25565b5f806024601c604051946395d89b418452836020525afa15610319576103999060205f803e60205f51823e805160205f5101602083013e6040815182015f60208201520160405260405191829182610af2565b346101c1575f3660031901126101c157683602298b8c10b01232546040516001600160a01b039091168152602090f35b346101c15760203660031901126101c1576001600160a01b036105fb610b1c565b1660205f6044601c61060b610c25565b6040519563f5b100ea85528552836040525afa601f3d1116156103195760405260205f51604051908152f35b346101c1575f3660031901126101c15761064f610c25565b683602298b8c10b012325460205f6004601c60018060a01b03851695638da5cb5b84525afa9081601f3d1116600c5160601c0291156106ec575b506001600160a01b0316908181036106a7575b602060405160018152f35b683602298b8c10b0123280546001600160a01b031916831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3808061069c565b60601b6001600160601b0319166101c15782610689565b346101c15760203660031901126101c15760206001600160a01b03610729600435610c4f565b16604051908152f35b346101c15760203660031901126101c157602460206001600160a01b03610757610c25565b1660405192838092634f6ccce760e01b825260043560048301525afa80156107be575f9061078b575b602090604051908152f35b506020813d6020116107b6575b816107a560209383610bee565b810103126101c15760209051610780565b3d9150610798565b6040513d5f823e3d90fd5b6107d236610b48565b916107de838383610b82565b813b6107e657005b60a460209260405194859363150b7a028552338686015260018060a01b0316604085015260608401526080808401525f60a08401525f3681375f601c8401915af115610479575163757a42ff60e11b0161046c57005b346101c15760403660031901126101c157610855610b1c565b60206001600160a01b03610867610c25565b604051632f745c5960e01b81526001600160a01b039094166004850152602480359085015283916044918391165afa80156107be575f9061078b57602090604051908152f35b346101c15760203660031901126101c1576108c6610c25565b60205f6044601c6040519463c016aa5284526004358552836040525afa601f3d1116156103195760408190525f516001600160a01b03168152602090f35b61091661091036610b48565b91610b82565b005b346101c1575f3660031901126101c157610930610c25565b60205f6044601c6040519463e2c792818452838552836040525afa601f3d1116156103195760405260205f51604051908152f35b60403660031901126101c157610978610b1c565b60243590610984610c25565b9060018060a01b03169060205f6064601c6040519463d10b6e0c8452868552876040523360605234905af1601f3d1116156103195750600c5160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4005b346101c15760203660031901126101c1576109ff610c25565b60205f6044601c604051946327ef549584526004358552836040525afa601f3d1116156103195760408190525f516001600160a01b03168152602090f35b346101c1575f3660031901126101c157610a55610c25565b5f806024601c604051946306fdde038452836020525afa15610319576103999060205f803e60205f51823e805160205f5101602083013e6040815182015f60208201520160405260405191829182610af2565b346101c15760203660031901126101c157600435906001600160e01b0319821682036101c15760209160e01c635b5e139f8114906301ffc9a76380ac58cd82149114171715158152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036101c157565b602435906001600160a01b03821682036101c157565b60609060031901126101c1576004356001600160a01b03811681036101c157906024356001600160a01b03811681036101c1579060443590565b9060846020610b8f610c25565b6040805163e5eb36c881526001600160a01b03968716848201819052959096169086018190526060860187905233608087015294928391601c83019034905af16001825114161561031957505f80516020610c848339815191525f80a4565b601f909101601f19168101906001600160401b03821190821017610c1157604052565b634e487b7160e01b5f52604160045260245ffd5b683602298b8c10b01230546001600160a01b0316908115610c4257565b635b2a47ae5f526004601cfd5b60205f6044601c610c5e610c25565b60405195632d8a746e85528552836040525afa601f3d111615610319576040525f519056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef";
1412
+ var dopplerDN404_default = "0x60a0604052346104a85761394680380380610019816107f1565b928339810160e0828203126104a85781516001600160401b0381116104a85781610044918401610816565b60208301519091906001600160401b0381116104a85781610066918501610816565b9060408401519161007960608601610867565b9361008660808701610867565b60a08701519093906001600160401b0381116104a85760c0916100aa918901610816565b960151926001600160a01b031680156107de575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a382156107cf578284066107c0578051906001600160401b0382116104eb5760015490600182811c921680156107b6575b60208310146105d05781601f849311610748575b50602090601f83116001146106e2575f926106d7575b50508160011b915f199060031b1c1916176001555b8051906001600160401b0382116104eb5760025490600182811c921680156106cd575b60208310146105d05781601f84931161065f575b50602090601f83116001146105f9575f926105ee575b50508160011b915f199060031b1c1916176002555b83516001600160401b0381116104eb57600354600181811c911680156105e4575b60208210146105d057601f811161056d575b50602094601f821160011461050a579481929394955f926104ff575b50508160011b915f199060031b1c1916176003555b608052604051610d35808201906001600160401b038211838310176104eb576020918391612c1183393381520301905ff080156104e0576080516001600160a01b0391909116906001600160601b035f1990910110156104d35768a20d6e21d0e5255309546001600160a01b03166104c65780156104b957630f4599e55f523360205260205f6024601c82855af160015f511416156104ac57678da5cb5b6cef16e65f5260208060046018305afa601f3d1160205160601b151016610499575b68a20d6e21d0e5255308805463ffffffff60201b191664010000000017905568a20d6e21d0e525530980546001600160a01b03191691909117905580610375575b604051612374908161089d823960805181818161042701528181610a8401528181610c51015281816114bb0152818161173a0152818161192f0152611fb00152f35b6001600160a01b03821691821561048c57608051820463fffffffe108260601c1761047f5768a20d6e21d0e525530880546001600160a01b031660a084901b6001600160a01b03191690811790915561041292906103d28361087b565b80546001600160a01b031690911790555f90815283907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082a361087b565b906bff00000000000000000000008254918260581c9060015f527fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039360205fa2600260ff821691161560011b1860011760581b16906bff000000000000000000000019161790555f80610333565b63e5cfe9575f526004601cfd5b63ea553b345f526004601cfd5b5f806004601c82855af16102f2575b5f80fd5b63d125259c5f526004601cfd5b6339a84a7b5f526004601cfd5b63ead4d2e45f526004601cfd5b63997c4ef45f526004601cfd5b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b015190505f8061021d565b601f1982169560035f52805f20915f5b8881106105555750836001959697981061053d575b505050811b01600355610232565b01515f1960f88460031b161c191690555f808061052f565b9192602060018192868501518155019401920161051a565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c810191602084106105c6575b601f0160051c01905b8181106105bb5750610201565b5f81556001016105ae565b90915081906105a5565b634e487b7160e01b5f52602260045260245ffd5b90607f16906101ef565b015190505f806101b9565b60025f9081528281209350601f198516905b818110610647575090846001959493921061062f575b505050811b016002556101ce565b01515f1960f88460031b161c191690555f8080610621565b9293602060018192878601518155019501930161060b565b60025f529091507f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace601f840160051c810191602085106106c3575b90601f859493920160051c01905b8181106106b557506101a3565b5f81558493506001016106a8565b909150819061069a565b91607f169161018f565b015190505f80610157565b60015f9081528281209350601f198516905b8181106107305750908460019594939210610718575b505050811b0160015561016c565b01515f1960f88460031b161c191690555f808061070a565b929360206001819287860151815501950193016106f4565b60015f529091507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f840160051c810191602085106107ac575b90601f859493920160051c01905b81811061079e5750610141565b5f8155849350600101610791565b9091508190610783565b91607f169161012d565b633eaf92f760e21b5f5260045ffd5b63265f13bd60e21b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b6040519190601f01601f191682016001600160401b038111838210176104eb57604052565b81601f820112156104a8578051906001600160401b0382116104eb57610845601f8301601f19166020016107f1565b92828452602083830101116104a857815f9260208093018386015e8301015290565b51906001600160a01b03821682036104a857565b6001600160a01b03165f90815268a20d6e21d0e5255313602052604090209056fe6080806040526004361015610792575b503615610787575f3560e01c63e5eb36c881146103d25763f6916ddd811461038f576362fb246d811461036b57632d8a746e81146103325763c016aa52811461031f5763d10b6e0c811461022f576327ef549581146102145763f5b100ea81146101ef5763e2c7928181146101d45763cb30b46081146100a95763b7a94eb8146100a057633c10b94e5f526004601cfd5b60015f5260205ff35b60206040510160405260606003546100c0816113d6565b6100e4575b50605f601f198201915f6020825180930101526020835201601f191690f35b905060405190608082019160a081016040525f8352600a600435935b5f19019360308282060185530492831561011c57600a90610100565b9250608083601f19810192030181526040519283915f9061013c856113d6565b94600181169081156101b45750600114610173575b61016d9450518092825e015f815203601f19810183528261140e565b816100c5565b905060035f5260205f20935f5b818110610198575061016d9450830160200190610151565b8554602082890181019190915260019096019587955001610180565b602092935061016d96915060ff1916828601528015150284010190610151565b63ffffffff68a20d6e21d0e52553085460801c165f5260205ff35b63ffffffff6102086004356001600160a01b0316611394565b5460801c165f5260205ff35b6001600160a01b03610227600435612130565b165f5260205ff35b68a20d6e21d0e5255309546001600160a01b03163303610312576001600160a01b036044358116906024359060043581169061028061027b5f19600160201b861086020160011b612055565b6120eb565b5416928381036102ef575b505f82815268a20d6e21d0e525530c60209081526040822080546001600160a01b0319166001600160a01b03851617905568a20d6e21d0e525530d60601b600885901c018054600160ff90961695861b191693151590941b92909217909255918152f35b6102f99084611602565b5415610305578361028b565b63cfb3b9425f526004601cfd5b63ce5a776b5f526004601cfd5b6001600160a01b03610227600435612107565b6004356001600160a01b0361034682612107565b161561035e576001600160a01b039061022790612107565b63ceea21b65f526004601cfd5b6103856001600160a01b0360243581169060043516611602565b5415155f5260205ff35b68a20d6e21d0e5255309546001600160a01b031633036103125760243515156103c86001600160a01b0360043581169060443516611602565b5560015f5260205ff35b68a20d6e21d0e5255309546001600160a01b031633819003610312576001600160a01b0360643581169160043582169160443591906024351661041481612169565b835f52600560205260405f20549461044d7f0000000000000000000000000000000000000000000000000000000000000000809761146d565b935f915f9486610762575b84156107555715610748576001600160a01b0361048561027b600160201b851085025f190160011b612055565b5416870361073b57868103610702575b5061049f86611394565b906104a984611394565b90825460a01c808a116106f5576105ab93610563916104d4908c90036001600160601b0316826121a9565b83546104f39060a01c6001600160601b038d81169190910116856121a9565b6104fc836122df565b6106c4575b600161053061050f8c6113b5565b9261052a63ffffffff5f1981845460801c16011680926121cc565b83612079565b610552816105445f198801851b8501612055565b9463ffffffff8616906120c3565b63ffffffff165f1901811b01612095565b6105a58563ffffffff845460801c169361058663ffffffff6001870116826121cc565b6105a0610592836113b5565b8663ffffffff8716916120c3565b612210565b906122a0565b855f5281855f8051602061235483398151915260205fa36105cf5760015f5260205ff35b5f198301908382116106b05763ffffffff6105e986611394565b5460801c169384808410928361068e575b505050610620575b5050505f52600560205260405f2090815403905580808080806100a0565b610629846113b5565b9282101561060257818114610602576001826106758363ffffffff8481966106758a610658886106869d612079565b9281610670610668838795612079565b809b836120c3565b6120c3565b825f19911601811b01911690612095565b828080610602565b8714801593509091906106a6575b50508684816105fa565b109050838761069c565b634e487b7160e01b5f52601160045260245ffd5b6106cd836121ef565b5f83815268a20d6e21d0e525530c6020526040902080546001600160a01b0319169055610501565b63f4d678b85f526004601cfd5b61070c8188611602565b54610495576001600160a01b0361072283612130565b160361072e5787610495565b6359c896be5f526004601cfd5b63a11481005f526004601cfd5b6340739bf05f526004601cfd5b63ea553b345f526004601cfd5b9250935063ffffffff61077c60015f198401811b01612055565b169385851092610458565b3461078e57005b5f80fd5b5f3560e01c90816306fdde031461129c57508063095ea7b3146111fb5780630ad9e7bf146111c357806310aa0ebb1461119e57806316f0115b1461117657806318160ddd1461114e578063207d06361461110b57806323b872dd14611065578063274e430b146110385780632a6a935d14610fc65780632f745c5914610f5f578063313ce56714610f445780634ef41efc14610f145780634f6ccce714610ef657806355f804b314610d9d5780635b2aa23914610c005780636c0360eb14610b6e57806370a0823114610b3f578063715018a614610afb5780638902653814610ace5780638da5cb5b14610aa7578063907af6c014610a6d57806395d89b4114610993578063a9059cbb14610962578063dd62ed3e1461092e5763f2fde38b146108bc575f61000f565b3461078e57602036600319011261078e576108d5611368565b6108dd6115be565b6001600160a01b0316801561091b575f80546001600160a01b03198116831782556001600160a01b0316905f805160206123348339815191529080a3005b631e4fbdf760e01b5f525f60045260245ffd5b3461078e57604036600319011261078e57602061095a61094c611368565b61095461137e565b90611558565b604051908152f35b3461078e57604036600319011261078e5761098861097e611368565b6024359033611620565b602060405160018152f35b3461078e575f36600319011261078e576040515f6002546109b3816113d6565b8084529060018116908115610a4957506001146109eb575b6109e7836109db8185038261140e565b6040519182918261133e565b0390f35b60025f9081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b808210610a2f575090915081016020016109db6109cb565b919260018160209254838588010152019101909291610a17565b60ff191660208086019190915291151560051b840190910191506109db90506109cb565b3461078e575f36600319011261078e5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461078e575f36600319011261078e575f546040516001600160a01b039091168152602090f35b3461078e575f36600319011261078e57610ae66115be565b6004805460ff60a01b1916600160a01b179055005b3461078e575f36600319011261078e57610b136115be565b5f80546001600160a01b0319811682556001600160a01b03165f805160206123348339815191528280a3005b3461078e57602036600319011261078e576020610b62610b5d611368565b611394565b5460a01c604051908152f35b3461078e575f36600319011261078e576040515f600354610b8e816113d6565b8084529060018116908115610a495750600114610bb5576109e7836109db8185038261140e565b60035f9081525f80516020612314833981519152939250905b808210610be6575090915081016020016109db6109cb565b919260018160209254838588010152019101909291610bce565b3461078e57602036600319011261078e576004356001600160401b03811161078e573660238201121561078e5760048101356001600160401b03811161078e573660248260051b8401011161078e577f000000000000000000000000000000000000000000000000000000000000000091828202928284048114831517156106b057335f52600560205260405f205493610c9933611394565b5460a01c610ca7828761148b565b11610d8e57610cb9610cbf928661146d565b9461148b565b335f52600560205260405f2055610cd533611394565b9263ffffffff610ce4336113b5565b945460801c16915f915b84831015610d8c5760248360051b8301013584811015610d7d57818110610d73578181600193849303610d27575b5001925b0191610cee565b8063ffffffff848b61067582610d40610d6d9784612079565b610d5b818a610d4f8188612079565b96610670888c836120c3565b888616919086165f1901811b01612095565b88610d1c565b5091600190610d20565b633277964160e01b5f5260045ffd5b005b6302579b0560e11b5f5260045ffd5b3461078e57602036600319011261078e576004356001600160401b03811161078e573660238201121561078e5760048101356001600160401b03811161078e57366024828401011161078e57610df16115be565b610dfc6003546113d6565b601f8111610ea6575b505f601f8211600114610e415781925f92610e33575b50508160011b915f199060031b1c1916176003555f80f35b602492500101358280610e1b565b601f1982169260035f5260205f20915f5b858110610e8b57508360019510610e6f575b505050811b01600355005b01602401355f19600384901b60f8161c19169055828080610e64565b90926020600181926024878701013581550194019101610e52565b60035f525f80516020612314833981519152601f830160051c81019160208410610eec575b601f0160051c01905b818110610ee15750610e05565b5f8155600101610ed4565b9091508190610ecb565b3461078e57602036600319011261078e57602061095a600435611498565b3461078e575f36600319011261078e5768a20d6e21d0e5255309546040516001600160a01b039091168152602090f35b3461078e575f36600319011261078e57602060405160128152f35b3461078e57604036600319011261078e57610f78611368565b60243563ffffffff610f8983611394565b5460801c16811015610fb757610fae63ffffffff91610fa96020946113b5565b612079565b16604051908152f35b6306ed618760e11b5f5260045ffd5b3461078e57602036600319011261078e576004358015801580920361078e5761098891610ff233611394565b91825460581c915f52337fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039360205fa2600260ff83169216151860011b18600117906115a1565b3461078e57602036600319011261078e57602061105b611056611368565b611445565b6040519015158152f35b3461078e57606036600319011261078e5761107e611368565b61108661137e565b6044359061109433846115e4565b926e22d473030f116ddee9f6b43ac78ba33314806110f4575b156110ec575f19935b600185016110ca575b506109889350611620565b8484116110df578361098895039055846110bf565b6313be252b5f526004601cfd5b8354936110b6565b50600461110082611394565b5460581c16156110ad565b3461078e57602036600319011261078e57611124611368565b61112c6115be565b600480546001600160a81b0319166001600160a01b0392909216919091179055005b3461078e575f36600319011261078e57602068a20d6e21d0e52553085460a01c604051908152f35b3461078e575f36600319011261078e576004546040516001600160a01b039091168152602090f35b3461078e575f36600319011261078e57602060ff60045460a01c166040519015158152f35b3461078e57602036600319011261078e576001600160a01b036111e4611368565b165f526005602052602060405f2054604051908152f35b3461078e57604036600319011261078e57611214611368565b6001600160a01b03811690602435908190611246906e22d473030f116ddee9f6b43ac78ba3851461127a575b336115e4565b555f52337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa3602060405160018152f35b61129761128633611394565b600460ff825460581c1617906115a1565b611240565b3461078e575f36600319011261078e575f6001546112b9816113d6565b8084529060018116908115610a4957506001146112e0576109e7836109db8185038261140e565b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b808210611324575090915081016020016109db6109cb565b91926001816020925483858801015201910190929161130c565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361078e57565b602435906001600160a01b038216820361078e57565b6001600160a01b03165f90815268a20d6e21d0e52553136020526040902090565b6001600160a01b03165f90815268a20d6e21d0e52553106020526040902090565b90600182811c92168015611404575b60208310146113f057565b634e487b7160e01b5f52602260045260245ffd5b91607f16916113e5565b601f909101601f19168101906001600160401b0382119082101761143157604052565b634e487b7160e01b5f52604160045260245ffd5b9061144f82611394565b5460581c9160016002841615159316156114665750565b3b15159150565b8115611477570490565b634e487b7160e01b5f52601260045260245ffd5b919082018092116106b057565b9068a20d6e21d0e52553085463ffffffff8160801c16831015611549576114e3907f00000000000000000000000000000000000000000000000000000000000000009060a01c61146d565b905f925f5b8381106114fe57639f6fb6c960e01b5f5260045ffd5b80600101806001116106b05763ffffffff61151b8360011b612055565b1661152a575b506001016114e8565b8286929614611540575060018091019490611521565b93505050915090565b639f6fb6c960e01b5f5260045ffd5b906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba314611586575b611582916115e4565b5490565b600461159183611394565b5460581c166115795750505f1990565b805460ff60581b191660589290921b60ff60581b16919091179055565b5f546001600160a01b031633036115d157565b63118cdaa760e01b5f523360045260245ffd5b9060285260145268a20d6e21d0e525530f5f5260485f20905f602852565b9060285260145268a20d6e21d0e525530b5f5260485f20905f602852565b9161162a82612169565b6001600160a01b038316611ffe575b6001600160a01b038216156107555761165183611394565b61165a83611394565b68a20d6e21d0e5255309546001600160a01b031615610748576040519161018083016001600160401b03811184821017611431576040525f83525f60208401525f60808401525f60a08401525f60c08401525f60e08401525f6101008401525f6101208401525f6101408401525f610160840152805463ffffffff8160801c16604085015263ffffffff835460801c1660608501528060a01c85116106f55761171360a082901c8690036001600160601b0316836121a9565b825460a01c85019061172e6001600160601b038316856121a9565b611763604086015191877f00000000000000000000000000000000000000000000000000000000000000009160a01c0361146d565b808203911102845261177486611445565b15611f96575b50611d91565b68a20d6e21d0e52553085463ffffffff60208501518551928382848360801c1601038060808901528360801b9060801b16908360801b191617928368a20d6e21d0e52553085501916040519260c060a085019180835260051b850101604052836040015260c0830183528261016087015260601c166101208501528351611c71575b505060208201516118e7575b50610140810151806118a3575b50610160015180611851575b505f9081526001600160a01b0391821692909116905f8051602061235483398151915290602090a3565b600160206040828060a01b0368a20d6e21d0e5255309541693015192603f19840193849163263c69d6835283601f198301525f825160051b6044019260231901915af1915114161561078e575f611827565b600160205f9281838060a01b0368a20d6e21d0e5255309541691015190815160051b60840190607f19830195869360631901915af1915114161561078e575f61181b565b9194610160829492015160208360601b910152611903826113b5565b9463ffffffff6119138486612210565b1660e086015268a20d6e21d0e5255308549263ffffffff6119577f00000000000000000000000000000000000000000000000000000000000000008660a01c61146d565b9460201c16848111908115021761010087015261198c60608701519563ffffffff602089015188018060c08b015216906121cc565b63ffffffff68a20d6e21d0e52553085460401c169760015b15611c12575b6101208701515f9063ffffffff8b8116911614611a6057611a5b63ffffffff60018c01169a60e0641fffffffe0631fffffff8360031c1668a20d6e21d0e525531160601b01549260051b16161c63ffffffff165b8060081c685106b710e87292a98760611b0160018260ff161b8019825416179055611a3063ffffffff82168a8d6120c3565b611a5063ffffffff60e08c01511663ffffffff60018c019b1690836122a0565b6101608a01516122fd565b6119a4565b949798939291906101008801515b63ffffffff611a825f19830160011b612055565b1615611bee575f19906001810160081c685106b710e87292a98760611b018054196001830160ff1690811c901b8015611b76575b80611acc575b5050508981119081150217611a6e565b600180939450811901167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f6101e07a1412563212c14164235266736f7425221143267a4524367526767760fc7b2aaaaaaaba69a69a6db6db6db2cb2cb2ce739ce73def7bdeffffffff860260f81c161b60f71c1692831c63d76453e004161a179082685106b710e87292a98760611b03190160081b17910181108a8211175f03175f8080611abc565b506001909c9895929c9a9794919a9693965b01805419685106b710e87292a98760611b60088e901c0182118117611bb05750600190611b88565b9c9295989c9a9194979a969396808d60081c685106b710e87292a98760611b018311611bdd575b50611ab6565b508c1960ff1690811b901c80611bd7565b611a5b909a999691929394959a6001810188811190811502176101008b01526119fe565b60c087015186036119aa57945094925094509468a20d6e21d0e52553085463ffffffff60201b61010084015160201b169163ffffffff60401b9060401b1690600160201b600160601b031916171768a20d6e21d0e5255308555f61180e565b602060018860609a9699959a989497981b17910152611c8f826113b5565b94611caf60408801519563ffffffff895188038060a08c015216906121cc565b60015b15611d78575b5f945f190194611cc88688612079565b63ffffffff8116905f1982018060021c685106b710e87292a98960611b019060c082549160061b1681811c60018060401b0316901b189055611d0f826101608c01516122fd565b600160ff62ffffff8360081c16685106b710e87292a98760611b0192161b198154169055611d3c816122df565b611d47575b50611cb2565b611d50816121ef565b5f90815268a20d6e21d0e525530c6020526040812080546001600160a01b0319169055611d41565b60a08701518503611cb857935093509390945f80611802565b9194604086979294970151948651976020880151898110818b18028a1899888b108b8a18028914611f87578a8918898c10028918908190038a52900360208901526001600160a01b0383811690831614611f65576040805163144027d3818301526001600160a01b03858116606080840191909152908516608083015260a08201528a8918898c1002891860c0820181815260059190911b820160e090810190935260208201529081018152610140890152611e4c836113b5565b95611e56836113b5565b9763ffffffff611e668584612210565b1660e08b015260608a01519a81811090821802188a019560015b15611f1f575b878b611eca8163ffffffff808f8f90611ebe60e09284611eb55f9b5f1960408701510190816040880152612079565b169889916120c3565b015116911690836122a0565b6101408c015160208151838152019052611ee3816122df565b611eee575b50611e80565b611ef7816121ef565b5f90815268a20d6e21d0e525530c6020526040812080546001600160a01b0319169055611ee8565b9960010199868b03611e8657939895509398611f4c92975063ffffffff91965080606087015216836121cc565b611f6063ffffffff604085015116826121cc565b611780565b9492978681989593989792971090821802186060840151016060840152611780565b50509492975094509491611780565b611fd5906001600160a01b0388811690881614611feb575b7f00000000000000000000000000000000000000000000000000000000000000009061146d565b606084015180820391110260208401525f61177a565b6040850151855190036060860152611fae565b61200783611394565b5460a01c60018060a01b0384165f52600560205260405f205490808211918215612042575b505015611639576311acc28f60e01b5f5260045ffd5b8103915081116106b05781115f8061202c565b60e08160031c685106b710e87292a98960611b01549160051b161c63ffffffff1690565b60e0908260031c9060601b01549160051b161c63ffffffff1690565b9060e08260031c685106b710e87292a98960611b019260051b1682549182821c1863ffffffff16901b189055565b60e0909291928360031c9060601b019260051b1682549182821c1863ffffffff16901b189055565b63ffffffff165f5268a20d6e21d0e525530a60205260405f2090565b6001600160a01b039061212b9061027b90600160201b8110025f190160011b612055565b541690565b6001600160a01b0361214182612107565b161561035e575f90815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b6004546001600160a01b03808216921691909114908161219a575b5061218b57565b632e13674560e01b5f5260045ffd5b60ff915060a01c16155f612184565b80546001600160a01b031660a09290921b6001600160a01b031916919091179055565b805463ffffffff60801b191660809290921b63ffffffff60801b16919091179055565b60018160081c68a20d6e21d0e525530d60601b019160ff161b198154169055565b805460601c63ffffffff1692918315612227575050565b68a20d6e21d0e5255308805463ffffffff19811663ffffffff918216600101918216908117909255835463ffffffff60601b191660609190911b63ffffffff60601b1617909255909250829061227c826120eb565b80546001600160a01b0319166001600160a01b039092169190911790551561078e57565b5f1901908160021c685106b710e87292a98960611b019260c084549360061b169163ffffffff169060201b1782821c1860018060401b0316901b189055565b8060081c68a20d6e21d0e525530d60601b01549060ff161c60011690565b9060209082519060081b8284015117815201905256fec2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef608034607857601f610d3538819003918201601f19168301916001600160401b03831184841017607c57808492602094604052833981010312607857516001600160a01b03811690819003607857683602298b8c10b0123180546001600160a01b031916919091179055604051610ca490816100918239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60808060405260043610156101c5575b5036156101ba575f3560e01c63263c69d681146101405763144027d381146100cf57630f4599e51461004857633c10b94e5f526004601cfd5b683602298b8c10b01231546001600160a01b0316806100ab575b50683602298b8c10b01230546001600160a01b03811661009e576001600160a01b0319163317683602298b8c10b012305560015f908152602090f35b63bf656a465f526004601cfd5b6004356001600160a01b0316036100c2575f610062565b63c59ec47a5f526004601cfd5b683602298b8c10b01230546001600160a01b03163303610133576004356024359060443591602483810193600481013560051b0101925b8381036101165760015f5260205ff35b803582845f80516020610c848339815191525f80a4602001610106565b63363cb3125f526004601cfd5b683602298b8c10b01230546001600160a01b0316330361013357600435602481810191600481013560051b0101905b81810361017f5760015f5260205ff35b8035600881901c6001600160581b03169060018116801560609290921c91820291025f80516020610c848339815191525f80a460200161016f565b346101c157005b5f80fd5b5f3560e01c90816301ffc9a714610aa85750806306fdde0314610a3d578063081812fc146109e6578063095ea7b31461096457806318160ddd1461091857806323b872dd1461090457806324359879146108ad5780632f745c591461083c57806342842e0e146107c95780634f6ccce7146107325780636352211e146107035780636cef16e61461063757806370a08231146105da5780638da5cb5b146105aa57806395d89b411461053f57806397e5311c14610513578063a22cb46514610487578063b88d4fde1461039d578063c87b56dd146103215763e985e9c5146102ad575f61000f565b346101c15760403660031901126101c1576102c6610b1c565b60205f6044601c6102d5610b32565b6102dd610c25565b604080516362fb246d87526001600160a01b039889168852979092169091525afa601f3d1116156103195760405260205f516040519015158152f35b3d5f823e3d90fd5b346101c15760203660031901126101c15760043561033e81610c4f565b505f806024601c61034d610c25565b6040519563cb30b46085526020525afa15610319576103999060205f803e60205f51823e805160205f5101602083013e6040815182015f60208201520160405260405191829182610af2565b0390f35b60803660031901126101c1576103b1610b1c565b6103b9610b32565b60443591606435916001600160401b0383116101c157366023840112156101c1576004830135926001600160401b0384116101c15736602485830101116101c157610405858385610b82565b813b61040d57005b83602094602460a49360405198899763150b7a028952338a8a015260018060a01b0316604089015260608801526080808801528260a08801520160c086013701905f601c8401915af115610479575b5163757a42ff60e11b0161046c57005b63d1a57ed65f526004601cfd5b3d1561045c573d5f823e3d90fd5b346101c15760403660031901126101c1576104a0610b1c565b6024358015158091036101c15760205f6064601c826104bd610c25565b9660018060a01b0316966040519663f6916ddd8352888752604052336060525af160015f511416156103195750337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160206040a3005b346101c1575f3660031901126101c157602061052d610c25565b6040516001600160a01b039091168152f35b346101c1575f3660031901126101c157610557610c25565b5f806024601c604051946395d89b418452836020525afa15610319576103999060205f803e60205f51823e805160205f5101602083013e6040815182015f60208201520160405260405191829182610af2565b346101c1575f3660031901126101c157683602298b8c10b01232546040516001600160a01b039091168152602090f35b346101c15760203660031901126101c1576001600160a01b036105fb610b1c565b1660205f6044601c61060b610c25565b6040519563f5b100ea85528552836040525afa601f3d1116156103195760405260205f51604051908152f35b346101c1575f3660031901126101c15761064f610c25565b683602298b8c10b012325460205f6004601c60018060a01b03851695638da5cb5b84525afa9081601f3d1116600c5160601c0291156106ec575b506001600160a01b0316908181036106a7575b602060405160018152f35b683602298b8c10b0123280546001600160a01b031916831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3808061069c565b60601b6001600160601b0319166101c15782610689565b346101c15760203660031901126101c15760206001600160a01b03610729600435610c4f565b16604051908152f35b346101c15760203660031901126101c157602460206001600160a01b03610757610c25565b1660405192838092634f6ccce760e01b825260043560048301525afa80156107be575f9061078b575b602090604051908152f35b506020813d6020116107b6575b816107a560209383610bee565b810103126101c15760209051610780565b3d9150610798565b6040513d5f823e3d90fd5b6107d236610b48565b916107de838383610b82565b813b6107e657005b60a460209260405194859363150b7a028552338686015260018060a01b0316604085015260608401526080808401525f60a08401525f3681375f601c8401915af115610479575163757a42ff60e11b0161046c57005b346101c15760403660031901126101c157610855610b1c565b60206001600160a01b03610867610c25565b604051632f745c5960e01b81526001600160a01b039094166004850152602480359085015283916044918391165afa80156107be575f9061078b57602090604051908152f35b346101c15760203660031901126101c1576108c6610c25565b60205f6044601c6040519463c016aa5284526004358552836040525afa601f3d1116156103195760408190525f516001600160a01b03168152602090f35b61091661091036610b48565b91610b82565b005b346101c1575f3660031901126101c157610930610c25565b60205f6044601c6040519463e2c792818452838552836040525afa601f3d1116156103195760405260205f51604051908152f35b60403660031901126101c157610978610b1c565b60243590610984610c25565b9060018060a01b03169060205f6064601c6040519463d10b6e0c8452868552876040523360605234905af1601f3d1116156103195750600c5160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4005b346101c15760203660031901126101c1576109ff610c25565b60205f6044601c604051946327ef549584526004358552836040525afa601f3d1116156103195760408190525f516001600160a01b03168152602090f35b346101c1575f3660031901126101c157610a55610c25565b5f806024601c604051946306fdde038452836020525afa15610319576103999060205f803e60205f51823e805160205f5101602083013e6040815182015f60208201520160405260405191829182610af2565b346101c15760203660031901126101c157600435906001600160e01b0319821682036101c15760209160e01c635b5e139f8114906301ffc9a76380ac58cd82149114171715158152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036101c157565b602435906001600160a01b03821682036101c157565b60609060031901126101c1576004356001600160a01b03811681036101c157906024356001600160a01b03811681036101c1579060443590565b9060846020610b8f610c25565b6040805163e5eb36c881526001600160a01b03968716848201819052959096169086018190526060860187905233608087015294928391601c83019034905af16001825114161561031957505f80516020610c848339815191525f80a4565b601f909101601f19168101906001600160401b03821190821017610c1157604052565b634e487b7160e01b5f52604160045260245ffd5b683602298b8c10b01230546001600160a01b0316908115610c4257565b635b2a47ae5f526004601cfd5b60205f6044601c610c5e610c25565b60405195632d8a746e85528552836040525afa601f3d111615610319576040525f519056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef";
1384
1413
 
1385
1414
  // src/evm/abis/bytecodes/dopplerDN404BaseSepolia.ts
1386
1415
  var dopplerDN404BaseSepolia_default = "0x60a06040523461049b57613a4d80380380610019816107c6565b928339810160e08282031261049b5781516001600160401b03811161049b57816100449184016107eb565b60208301519091906001600160401b03811161049b57816100669185016107eb565b906040840151916100796060860161083c565b936100866080870161083c565b60a08701519093906001600160401b03811161049b5760c0916100aa9189016107eb565b960151926001600160a01b031680156107b3575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a38051906001600160401b0382116104de5760015490600182811c921680156107a9575b60208310146105c35781601f84931161073b575b50602090601f83116001146106d5575f926106ca575b50508160011b915f199060031b1c1916176001555b8051906001600160401b0382116104de5760025490600182811c921680156106c0575b60208310146105c35781601f849311610652575b50602090601f83116001146105ec575f926105e1575b50508160011b915f199060031b1c1916176002555b83516001600160401b0381116104de57600354600181811c911680156105d7575b60208210146105c357601f8111610560575b50602094601f82116001146104fd579481929394955f926104f2575b50508160011b915f199060031b1c1916176003555b608052604051610d41808201906001600160401b038211838310176104de576020918391612d0c83393381520301905ff080156104d3576080516001600160a01b0391909116906001600160601b035f1990910110156104c65768a20d6e21d0e5255309546001600160a01b03166104b95780156104ac57630f4599e55f523360205260205f6024601c82855af160015f5114161561049f57678da5cb5b6cef16e65f5260208060046018305afa601f3d1160205160601b15101661048c575b68a20d6e21d0e5255308805463ffffffff60201b191664010000000017905568a20d6e21d0e525530980546001600160a01b03191691909117905580610368575b60405161249a9081610872823960805181818161040b01528181610a4f01528181610c47015281816115920152818161184701528181611a3c01526120bd0152f35b6001600160a01b03821691821561047f57608051820463fffffffe108260601c176104725768a20d6e21d0e525530880546001600160a01b031660a084901b6001600160a01b03191690811790915561040592906103c583610850565b80546001600160a01b031690911790555f90815283907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082a3610850565b906bff00000000000000000000008254918260581c9060015f527fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039360205fa2600260ff821691161560011b1860011760581b16906bff000000000000000000000019161790555f80610326565b63e5cfe9575f526004601cfd5b63ea553b345f526004601cfd5b5f806004601c82855af16102e5575b5f80fd5b63d125259c5f526004601cfd5b6339a84a7b5f526004601cfd5b63ead4d2e45f526004601cfd5b63997c4ef45f526004601cfd5b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b015190505f80610210565b601f1982169560035f52805f20915f5b88811061054857508360019596979810610530575b505050811b01600355610225565b01515f1960f88460031b161c191690555f8080610522565b9192602060018192868501518155019401920161050d565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c810191602084106105b9575b601f0160051c01905b8181106105ae57506101f4565b5f81556001016105a1565b9091508190610598565b634e487b7160e01b5f52602260045260245ffd5b90607f16906101e2565b015190505f806101ac565b60025f9081528281209350601f198516905b81811061063a5750908460019594939210610622575b505050811b016002556101c1565b01515f1960f88460031b161c191690555f8080610614565b929360206001819287860151815501950193016105fe565b60025f529091507f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace601f840160051c810191602085106106b6575b90601f859493920160051c01905b8181106106a85750610196565b5f815584935060010161069b565b909150819061068d565b91607f1691610182565b015190505f8061014a565b60015f9081528281209350601f198516905b818110610723575090846001959493921061070b575b505050811b0160015561015f565b01515f1960f88460031b161c191690555f80806106fd565b929360206001819287860151815501950193016106e7565b60015f529091507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f840160051c8101916020851061079f575b90601f859493920160051c01905b8181106107915750610134565b5f8155849350600101610784565b9091508190610776565b91607f1691610120565b631e4fbdf760e01b5f525f60045260245ffd5b6040519190601f01601f191682016001600160401b038111838210176104de57604052565b81601f8201121561049b578051906001600160401b0382116104de5761081a601f8301601f19166020016107c6565b928284526020838301011161049b57815f9260208093018386015e8301015290565b51906001600160a01b038216820361049b57565b6001600160a01b03165f90815268a20d6e21d0e5255313602052604090209056fe608080604052600436101561075d575b503615610752575f3560e01c63e5eb36c881146103d25763f6916ddd811461038f576362fb246d811461036b57632d8a746e81146103325763c016aa52811461031f5763d10b6e0c811461022f576327ef549581146102145763f5b100ea81146101ef5763e2c7928181146101d45763cb30b46081146100a95763b7a94eb8146100a057633c10b94e5f526004601cfd5b60015f5260205ff35b60206040510160405260606003546100c0816114af565b6100e4575b50605f601f198201915f6020825180930101526020835201601f191690f35b905060405190608082019160a081016040525f8352600a600435935b5f19019360308282060185530492831561011c57600a90610100565b9250608083601f19810192030181526040519283915f9061013c856114af565b94600181169081156101b45750600114610173575b61016d9450518092825e015f815203601f19810183528261148c565b816100c5565b905060035f5260205f20935f5b818110610198575061016d9450830160200190610151565b8554602082890181019190915260019096019587955001610180565b602092935061016d96915060ff1916828601528015150284010190610151565b63ffffffff68a20d6e21d0e52553085460801c165f5260205ff35b63ffffffff6102086004356001600160a01b031661144a565b5460801c165f5260205ff35b6001600160a01b0361022760043561228a565b165f5260205ff35b68a20d6e21d0e5255309546001600160a01b03163303610312576001600160a01b036044358116906024359060043581169061028061027b5f19600160201b861086020160011b6121af565b612245565b5416928381036102ef575b505f82815268a20d6e21d0e525530c60209081526040822080546001600160a01b0319166001600160a01b03851617905568a20d6e21d0e525530d60601b600885901c018054600160ff90961695861b191693151590941b92909217909255918152f35b6102f990846116f1565b5415610305578361028b565b63cfb3b9425f526004601cfd5b63ce5a776b5f526004601cfd5b6001600160a01b03610227600435612261565b6004356001600160a01b0361034682612261565b161561035e576001600160a01b039061022790612261565b63ceea21b65f526004601cfd5b6103856001600160a01b03602435811690600435166116f1565b5415155f5260205ff35b68a20d6e21d0e5255309546001600160a01b031633036103125760243515156103c86001600160a01b03600435811690604435166116f1565b5560015f5260205ff35b68a20d6e21d0e5255309546001600160a01b031633819003610312576001600160a01b0360043581165f818152600560205260409020547f000000000000000000000000000000000000000000000000000000000000000093919260443592916064358216916024351690610448908790611544565b935f925f948661072d575b83156107205715610713576001600160a01b0361048061027b600160201b851085025f190160011b6121af565b54168703610706578681036106cd575b5061049a8661144a565b906104a48361144a565b90825460a01c808a116106c0576105a69361055e916104cf908c90036001600160601b0316826122c3565b83546104ee9060a01c6001600160601b038d81169190910116856122c3565b6104f7836123f9565b61068f575b600161052b61050a8c61146b565b9261052563ffffffff5f1981845460801c16011680926122e6565b836121d3565b61054d8161053f5f198801851b85016121af565b9463ffffffff86169061221d565b63ffffffff165f1901811b016121ef565b6105a08463ffffffff845460801c169361058163ffffffff6001870116826122e6565b61059b61058d8361146b565b8663ffffffff87169161221d565b61232a565b906123ba565b855f52845f8051602061246e83398151915260205fa36105c95760015f5260205ff35b5f19820191821161067b5763ffffffff6105e28461144a565b5460801c169182811061060d575b5050505f52600560205260405f20908154039055808080806100a0565b6106168461146b565b928210156105f0578181146105f0576001826106628363ffffffff8481966106628a610645886106739d6121d3565b928161065d6106558387956121d3565b809b8361221d565b61221d565b825f19911601811b019116906121ef565b8280806105f0565b634e487b7160e01b5f52601160045260245ffd5b61069883612309565b5f83815268a20d6e21d0e525530c6020526040902080546001600160a01b03191690556104fc565b63f4d678b85f526004601cfd5b6106d781886116f1565b54610490576001600160a01b036106ed8361228a565b16036106f95787610490565b6359c896be5f526004601cfd5b63a11481005f526004601cfd5b6340739bf05f526004601cfd5b63ea553b345f526004601cfd5b9350935063ffffffff61074760015f198401811b016121af565b169385851093610453565b3461075957005b5f80fd5b5f3560e01c90816306fdde031461135257508063095ea7b3146112b15780630ad9e7bf1461127957806310aa0ebb1461125457806316f0115b1461122c57806318160ddd14611204578063207d0636146111c157806323b872dd1461111b578063274e430b146110ee5780632a6a935d1461107c5780632f745c5914610fe3578063313ce56714610fc85780634ef41efc14610f985780634f6ccce714610f7a57806355f804b314610e215780635b2aa23914610bcb5780636c0360eb14610b3957806370a0823114610b0a578063715018a614610ac65780638902653814610a995780638da5cb5b14610a72578063907af6c014610a3857806395d89b411461095e578063a9059cbb1461092d578063dd62ed3e146108f95763f2fde38b14610887575f61000f565b34610759576020366003190112610759576108a061141e565b6108a86116ad565b6001600160a01b031680156108e6575f80546001600160a01b03198116831782556001600160a01b0316905f8051602061244e8339815191529080a3005b631e4fbdf760e01b5f525f60045260245ffd5b3461075957604036600319011261075957602061092561091761141e565b61091f611434565b90611647565b604051908152f35b346107595760403660031901126107595761095361094961141e565b602435903361170f565b602060405160018152f35b34610759575f366003190112610759576040515f60025461097e816114af565b8084529060018116908115610a1457506001146109b6575b6109b2836109a68185038261148c565b604051918291826113f4565b0390f35b60025f9081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b8082106109fa575090915081016020016109a6610996565b9192600181602092548385880101520191019092916109e2565b60ff191660208086019190915291151560051b840190910191506109a69050610996565b34610759575f3660031901126107595760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610759575f366003190112610759575f546040516001600160a01b039091168152602090f35b34610759575f36600319011261075957610ab16116ad565b6004805460ff60a01b1916600160a01b179055005b34610759575f36600319011261075957610ade6116ad565b5f80546001600160a01b0319811682556001600160a01b03165f8051602061244e8339815191528280a3005b34610759576020366003190112610759576020610b2d610b2861141e565b61144a565b5460a01c604051908152f35b34610759575f366003190112610759576040515f600354610b59816114af565b8084529060018116908115610a145750600114610b80576109b2836109a68185038261148c565b60035f9081525f8051602061242e833981519152939250905b808210610bb1575090915081016020016109a6610996565b919260018160209254838588010152019101909291610b99565b34610759576020366003190112610759576004356001600160401b0381116107595736602382011215610759576004810135906001600160401b038211610e0d578160051b60405192610c21602083018561148c565b8352602460208401918301019136831161075957602401905b828210610dfd57838051907f00000000000000000000000000000000000000000000000000000000000000008083029280840482149015171561067b57335f52600560205260405f205492610c8e3361144a565b5460a01c610c9c8286611562565b11610db957610cae610cb49285611544565b93611562565b335f52600560205260405f2055610cca3361144a565b9163ffffffff610cd93361146b565b935460801c16905f905b8351821015610db75760208260051b8501015183811015610d7357818110610d69578181600193849303610d1d575b5001915b0190610ce3565b8063ffffffff848a61066282610d36610d6397846121d3565b610d51818a610d4581886121d3565b9661065d888c8361221d565b888616919086165f1901811b016121ef565b87610d12565b5090600190610d16565b60405162461bcd60e51b815260206004820152601c60248201527b546f6b656e20494420696e646578206f7574206f6620626f756e647360201b6044820152606490fd5b005b60405162461bcd60e51b815260206004820152601c60248201527b4e6f7420656e6f7567682062616c616e636520746f20667265657a6560201b6044820152606490fd5b8135815260209182019101610c3a565b634e487b7160e01b5f52604160045260245ffd5b34610759576020366003190112610759576004356001600160401b03811161075957366023820112156107595760048101356001600160401b03811161075957366024828401011161075957610e756116ad565b610e806003546114af565b601f8111610f2a575b505f601f8211600114610ec55781925f92610eb7575b50508160011b915f199060031b1c1916176003555f80f35b602492500101358280610e9f565b601f1982169260035f5260205f20915f5b858110610f0f57508360019510610ef3575b505050811b01600355005b01602401355f19600384901b60f8161c19169055828080610ee8565b90926020600181926024878701013581550194019101610ed6565b60035f525f8051602061242e833981519152601f830160051c81019160208410610f70575b601f0160051c01905b818110610f655750610e89565b5f8155600101610f58565b9091508190610f4f565b3461075957602036600319011261075957602061092560043561156f565b34610759575f3660031901126107595768a20d6e21d0e5255309546040516001600160a01b039091168152602090f35b34610759575f36600319011261075957602060405160128152f35b3461075957604036600319011261075957610ffc61141e565b60243563ffffffff61100d8361144a565b5460801c1681101561103b5761103263ffffffff9161102d60209461146b565b6121d3565b16604051908152f35b60405162461bcd60e51b81526020600482015260196024820152784f776e657220696e646578206f7574206f6620626f756e647360381b6044820152606490fd5b34610759576020366003190112610759576004358015801580920361075957610953916110a83361144a565b91825460581c915f52337fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039360205fa2600260ff83169216151860011b1860011790611690565b3461075957602036600319011261075957602061111161110c61141e565b6114e7565b6040519015158152f35b346107595760603660031901126107595761113461141e565b61113c611434565b6044359061114a33846116d3565b926e22d473030f116ddee9f6b43ac78ba33314806111aa575b156111a2575f19935b60018501611180575b50610953935061170f565b84841161119557836109539503905584611175565b6313be252b5f526004601cfd5b83549361116c565b5060046111b68261144a565b5460581c1615611163565b34610759576020366003190112610759576111da61141e565b6111e26116ad565b600480546001600160a81b0319166001600160a01b0392909216919091179055005b34610759575f36600319011261075957602068a20d6e21d0e52553085460a01c604051908152f35b34610759575f366003190112610759576004546040516001600160a01b039091168152602090f35b34610759575f36600319011261075957602060ff60045460a01c166040519015158152f35b34610759576020366003190112610759576001600160a01b0361129a61141e565b165f526005602052602060405f2054604051908152f35b34610759576040366003190112610759576112ca61141e565b6001600160a01b038116906024359081906112fc906e22d473030f116ddee9f6b43ac78ba38514611330575b336116d3565b555f52337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa3602060405160018152f35b61134d61133c3361144a565b600460ff825460581c161790611690565b6112f6565b34610759575f366003190112610759575f60015461136f816114af565b8084529060018116908115610a145750600114611396576109b2836109a68185038261148c565b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b8082106113da575090915081016020016109a6610996565b9192600181602092548385880101520191019092916113c2565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361075957565b602435906001600160a01b038216820361075957565b6001600160a01b03165f90815268a20d6e21d0e52553136020526040902090565b6001600160a01b03165f90815268a20d6e21d0e52553106020526040902090565b601f909101601f19168101906001600160401b03821190821017610e0d57604052565b90600182811c921680156114dd575b60208310146114c957565b634e487b7160e01b5f52602260045260245ffd5b91607f16916114be565b906114f18261144a565b5460581c9160016002841615159316156115085750565b3b15159150565b60609060208152601a602082015279476c6f62616c20696e646578206f7574206f6620626f756e647360301b60408201520190565b811561154e570490565b634e487b7160e01b5f52601260045260245ffd5b9190820180921161067b57565b9068a20d6e21d0e52553085463ffffffff8160801c1683101561162e576115ba907f00000000000000000000000000000000000000000000000000000000000000009060a01c611544565b905f925f5b8381106115e35760405162461bcd60e51b8152806115df6004820161150f565b0390fd5b806001018060011161067b5763ffffffff6116008360011b6121af565b1661160f575b506001016115bf565b8286929614611625575060018091019490611606565b93505050915090565b60405162461bcd60e51b8152806115df6004820161150f565b906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba314611675575b611671916116d3565b5490565b60046116808361144a565b5460581c166116685750505f1990565b805460ff60581b191660589290921b60ff60581b16919091179055565b5f546001600160a01b031633036116c057565b63118cdaa760e01b5f523360045260245ffd5b9060285260145268a20d6e21d0e525530f5f5260485f20905f602852565b9060285260145268a20d6e21d0e525530b5f5260485f20905f602852565b6004549092906001600160a01b038381169082161490816121a0575b50612191576001600160a01b03831615158061215b575b61210b576001600160a01b038216156107205761175e8361144a565b6117678361144a565b68a20d6e21d0e5255309546001600160a01b031615610713576040519161018083016001600160401b03811184821017610e0d576040525f83525f60208401525f60808401525f60a08401525f60c08401525f60e08401525f6101008401525f6101208401525f6101408401525f610160840152805463ffffffff8160801c16604085015263ffffffff835460801c1660608501528060a01c85116106c05761182060a082901c8690036001600160601b0316836122c3565b825460a01c85019061183b6001600160601b038316856122c3565b611870604086015191877f00000000000000000000000000000000000000000000000000000000000000009160a01c03611544565b8082039111028452611881866114e7565b156120a3575b50611e9e565b68a20d6e21d0e52553085463ffffffff60208501518551928382848360801c1601038060808901528360801b9060801b16908360801b191617928368a20d6e21d0e52553085501916040519260c060a085019180835260051b850101604052836040015260c0830183528261016087015260601c166101208501528351611d7e575b505060208201516119f4575b50610140810151806119b0575b5061016001518061195e575b505f9081526001600160a01b0391821692909116905f8051602061246e83398151915290602090a3565b600160206040828060a01b0368a20d6e21d0e5255309541693015192603f19840193849163263c69d6835283601f198301525f825160051b6044019260231901915af19151141615610759575f611934565b600160205f9281838060a01b0368a20d6e21d0e5255309541691015190815160051b60840190607f19830195869360631901915af19151141615610759575f611928565b9194610160829492015160208360601b910152611a108261146b565b9463ffffffff611a20848661232a565b1660e086015268a20d6e21d0e5255308549263ffffffff611a647f00000000000000000000000000000000000000000000000000000000000000008660a01c611544565b9460201c168481119081150217610100870152611a9960608701519563ffffffff602089015188018060c08b015216906122e6565b63ffffffff68a20d6e21d0e52553085460401c169760015b15611d1f575b6101208701515f9063ffffffff8b8116911614611b6d57611b6863ffffffff60018c01169a60e0641fffffffe0631fffffff8360031c1668a20d6e21d0e525531160601b01549260051b16161c63ffffffff165b8060081c685106b710e87292a98760611b0160018260ff161b8019825416179055611b3d63ffffffff82168a8d61221d565b611b5d63ffffffff60e08c01511663ffffffff60018c019b1690836123ba565b6101608a0151612417565b611ab1565b949798939291906101008801515b63ffffffff611b8f5f19830160011b6121af565b1615611cfb575f19906001810160081c685106b710e87292a98760611b018054196001830160ff1690811c901b8015611c83575b80611bd9575b5050508981119081150217611b7b565b600180939450811901167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f6101e07a1412563212c14164235266736f7425221143267a4524367526767760fc7b2aaaaaaaba69a69a6db6db6db2cb2cb2ce739ce73def7bdeffffffff860260f81c161b60f71c1692831c63d76453e004161a179082685106b710e87292a98760611b03190160081b17910181108a8211175f03175f8080611bc9565b506001909c9895929c9a9794919a9693965b01805419685106b710e87292a98760611b60088e901c0182118117611cbd5750600190611c95565b9c9295989c9a9194979a969396808d60081c685106b710e87292a98760611b018311611cea575b50611bc3565b508c1960ff1690811b901c80611ce4565b611b68909a999691929394959a6001810188811190811502176101008b0152611b0b565b60c08701518603611ab757945094925094509468a20d6e21d0e52553085463ffffffff60201b61010084015160201b169163ffffffff60401b9060401b1690600160201b600160601b031916171768a20d6e21d0e5255308555f61191b565b602060018860609a9699959a989497981b17910152611d9c8261146b565b94611dbc60408801519563ffffffff895188038060a08c015216906122e6565b60015b15611e85575b5f945f190194611dd586886121d3565b63ffffffff8116905f1982018060021c685106b710e87292a98960611b019060c082549160061b1681811c60018060401b0316901b189055611e1c826101608c0151612417565b600160ff62ffffff8360081c16685106b710e87292a98760611b0192161b198154169055611e49816123f9565b611e54575b50611dbf565b611e5d81612309565b5f90815268a20d6e21d0e525530c6020526040812080546001600160a01b0319169055611e4e565b60a08701518503611dc557935093509390945f8061190f565b9194604086979294970151948651976020880151898110818b18028a1899888b108b8a18028914612094578a8918898c10028918908190038a52900360208901526001600160a01b0383811690831614612072576040805163144027d3818301526001600160a01b03858116606080840191909152908516608083015260a08201528a8918898c1002891860c0820181815260059190911b820160e090810190935260208201529081018152610140890152611f598361146b565b95611f638361146b565b9763ffffffff611f73858461232a565b1660e08b015260608a01519a81811090821802188a019560015b1561202c575b878b611fd78163ffffffff808f8f90611fcb60e09284611fc25f9b5f19604087015101908160408801526121d3565b1698899161221d565b015116911690836123ba565b6101408c015160208151838152019052611ff0816123f9565b611ffb575b50611f8d565b61200481612309565b5f90815268a20d6e21d0e525530c6020526040812080546001600160a01b0319169055611ff5565b9960010199868b03611f935793989550939861205992975063ffffffff91965080606087015216836122e6565b61206d63ffffffff604085015116826122e6565b61188d565b949297868198959398979297109082180218606084015101606084015261188d565b5050949297509450949161188d565b6120e2906001600160a01b03888116908816146120f8575b7f000000000000000000000000000000000000000000000000000000000000000090611544565b606084015180820391110260208401525f611887565b60408501518551900360608601526120bb565b60405162461bcd60e51b815260206004820152602260248201527f5472616e73666572206578636565647320617661696c61626c652062616c616e604482015261636560f01b6064820152608490fd5b506121658361144a565b5460a01c81810390811161067b576001600160a01b0384165f9081526005602052604090205411611742565b632e13674560e01b5f5260045ffd5b60ff915060a01c16155f61172b565b60e08160031c685106b710e87292a98960611b01549160051b161c63ffffffff1690565b60e0908260031c9060601b01549160051b161c63ffffffff1690565b9060e08260031c685106b710e87292a98960611b019260051b1682549182821c1863ffffffff16901b189055565b60e0909291928360031c9060601b019260051b1682549182821c1863ffffffff16901b189055565b63ffffffff165f5268a20d6e21d0e525530a60205260405f2090565b6001600160a01b03906122859061027b90600160201b8110025f190160011b6121af565b541690565b6001600160a01b0361229b82612261565b161561035e575f90815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b80546001600160a01b031660a09290921b6001600160a01b031916919091179055565b805463ffffffff60801b191660809290921b63ffffffff60801b16919091179055565b60018160081c68a20d6e21d0e525530d60601b019160ff161b198154169055565b805460601c63ffffffff1692918315612341575050565b68a20d6e21d0e5255308805463ffffffff19811663ffffffff918216600101918216908117909255835463ffffffff60601b191660609190911b63ffffffff60601b1617909255909250829061239682612245565b80546001600160a01b0319166001600160a01b039092169190911790551561075957565b5f1901908160021c685106b710e87292a98960611b019260c084549360061b169163ffffffff169060201b1782821c1860018060401b0316901b189055565b8060081c68a20d6e21d0e525530d60601b01549060ff161c60011690565b9060209082519060081b8284015117815201905256fec2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300081a000a608034607857601f610d4138819003918201601f19168301916001600160401b03831184841017607c57808492602094604052833981010312607857516001600160a01b03811690819003607857683602298b8c10b0123180546001600160a01b031916919091179055604051610cb090816100918239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60808060405260043610156101c5575b5036156101ba575f3560e01c63263c69d681146101405763144027d381146100cf57630f4599e51461004857633c10b94e5f526004601cfd5b683602298b8c10b01231546001600160a01b0316806100ab575b50683602298b8c10b01230546001600160a01b03811661009e576001600160a01b0319163317683602298b8c10b012305560015f908152602090f35b63bf656a465f526004601cfd5b6004356001600160a01b0316036100c2575f610062565b63c59ec47a5f526004601cfd5b683602298b8c10b01230546001600160a01b03163303610133576004356024359060443591602483810193600481013560051b0101925b8381036101165760015f5260205ff35b803582845f80516020610c848339815191525f80a4602001610106565b63363cb3125f526004601cfd5b683602298b8c10b01230546001600160a01b0316330361013357600435602481810191600481013560051b0101905b81810361017f5760015f5260205ff35b8035600881901c6001600160581b03169060018116801560609290921c91820291025f80516020610c848339815191525f80a460200161016f565b346101c157005b5f80fd5b5f3560e01c90816301ffc9a714610aa85750806306fdde0314610a3d578063081812fc146109e6578063095ea7b31461096457806318160ddd1461091857806323b872dd1461090457806324359879146108ad5780632f745c591461083c57806342842e0e146107c95780634f6ccce7146107325780636352211e146107035780636cef16e61461063757806370a08231146105da5780638da5cb5b146105aa57806395d89b411461053f57806397e5311c14610513578063a22cb46514610487578063b88d4fde1461039d578063c87b56dd146103215763e985e9c5146102ad575f61000f565b346101c15760403660031901126101c1576102c6610b1c565b60205f6044601c6102d5610b32565b6102dd610c25565b604080516362fb246d87526001600160a01b039889168852979092169091525afa601f3d1116156103195760405260205f516040519015158152f35b3d5f823e3d90fd5b346101c15760203660031901126101c15760043561033e81610c4f565b505f806024601c61034d610c25565b6040519563cb30b46085526020525afa15610319576103999060205f803e60205f51823e805160205f5101602083013e6040815182015f60208201520160405260405191829182610af2565b0390f35b60803660031901126101c1576103b1610b1c565b6103b9610b32565b60443591606435916001600160401b0383116101c157366023840112156101c1576004830135926001600160401b0384116101c15736602485830101116101c157610405858385610b82565b813b61040d57005b83602094602460a49360405198899763150b7a028952338a8a015260018060a01b0316604089015260608801526080808801528260a08801520160c086013701905f601c8401915af115610479575b5163757a42ff60e11b0161046c57005b63d1a57ed65f526004601cfd5b3d1561045c573d5f823e3d90fd5b346101c15760403660031901126101c1576104a0610b1c565b6024358015158091036101c15760205f6064601c826104bd610c25565b9660018060a01b0316966040519663f6916ddd8352888752604052336060525af160015f511416156103195750337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160206040a3005b346101c1575f3660031901126101c157602061052d610c25565b6040516001600160a01b039091168152f35b346101c1575f3660031901126101c157610557610c25565b5f806024601c604051946395d89b418452836020525afa15610319576103999060205f803e60205f51823e805160205f5101602083013e6040815182015f60208201520160405260405191829182610af2565b346101c1575f3660031901126101c157683602298b8c10b01232546040516001600160a01b039091168152602090f35b346101c15760203660031901126101c1576001600160a01b036105fb610b1c565b1660205f6044601c61060b610c25565b6040519563f5b100ea85528552836040525afa601f3d1116156103195760405260205f51604051908152f35b346101c1575f3660031901126101c15761064f610c25565b683602298b8c10b012325460205f6004601c60018060a01b03851695638da5cb5b84525afa9081601f3d1116600c5160601c0291156106ec575b506001600160a01b0316908181036106a7575b602060405160018152f35b683602298b8c10b0123280546001600160a01b031916831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3808061069c565b60601b6001600160601b0319166101c15782610689565b346101c15760203660031901126101c15760206001600160a01b03610729600435610c4f565b16604051908152f35b346101c15760203660031901126101c157602460206001600160a01b03610757610c25565b1660405192838092634f6ccce760e01b825260043560048301525afa80156107be575f9061078b575b602090604051908152f35b506020813d6020116107b6575b816107a560209383610bee565b810103126101c15760209051610780565b3d9150610798565b6040513d5f823e3d90fd5b6107d236610b48565b916107de838383610b82565b813b6107e657005b60a460209260405194859363150b7a028552338686015260018060a01b0316604085015260608401526080808401525f60a08401525f3681375f601c8401915af115610479575163757a42ff60e11b0161046c57005b346101c15760403660031901126101c157610855610b1c565b60206001600160a01b03610867610c25565b604051632f745c5960e01b81526001600160a01b039094166004850152602480359085015283916044918391165afa80156107be575f9061078b57602090604051908152f35b346101c15760203660031901126101c1576108c6610c25565b60205f6044601c6040519463c016aa5284526004358552836040525afa601f3d1116156103195760408190525f516001600160a01b03168152602090f35b61091661091036610b48565b91610b82565b005b346101c1575f3660031901126101c157610930610c25565b60205f6044601c6040519463e2c792818452838552836040525afa601f3d1116156103195760405260205f51604051908152f35b60403660031901126101c157610978610b1c565b60243590610984610c25565b9060018060a01b03169060205f6064601c6040519463d10b6e0c8452868552876040523360605234905af1601f3d1116156103195750600c5160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4005b346101c15760203660031901126101c1576109ff610c25565b60205f6044601c604051946327ef549584526004358552836040525afa601f3d1116156103195760408190525f516001600160a01b03168152602090f35b346101c1575f3660031901126101c157610a55610c25565b5f806024601c604051946306fdde038452836020525afa15610319576103999060205f803e60205f51823e805160205f5101602083013e6040815182015f60208201520160405260405191829182610af2565b346101c15760203660031901126101c157600435906001600160e01b0319821682036101c15760209160e01c635b5e139f8114906301ffc9a76380ac58cd82149114171715158152f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036101c157565b602435906001600160a01b03821682036101c157565b60609060031901126101c1576004356001600160a01b03811681036101c157906024356001600160a01b03811681036101c1579060443590565b9060846020610b8f610c25565b6040805163e5eb36c881526001600160a01b03968716848201819052959096169086018190526060860187905233608087015294928391601c83019034905af16001825114161561031957505f80516020610c848339815191525f80a4565b601f909101601f19168101906001600160401b03821190821017610c1157604052565b634e487b7160e01b5f52604160045260245ffd5b683602298b8c10b01230546001600160a01b0316908115610c4257565b635b2a47ae5f526004601cfd5b60205f6044601c610c5e610c25565b60405195632d8a746e85528552836040525afa601f3d111615610319576040525f519056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300081a000a";
@@ -1398,19 +1427,6 @@ var derc2080_default = "0x6101c0604052346100ab5761002761001561023e565b9897909796
1398
1427
  var stateView_default = "0x60a03460b257601f610b8338819003918201601f19168301916001600160401b0383118484101760b65780849260209460405283398101031260b257516001600160a01b038116810360b257608052604051610ab890816100cb823960805181818160e1015281816101b701528181610217015281816102ba0152818161034a015281816103f50152818161045b015281816104a2015281816104e90152818161054c0152818161060701526107170152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80631c7ccb4c146106a357806353e9c1fb146105de5780637c40f1fe1461050d5780638a2bb9e6146104c657806397fd7b421461048b5780639ec538c814610440578063c815641c146103d5578063caedab5414610309578063dacf1d2f14610246578063dc4c90d314610202578063f0928f29146101835763fa6793d51461009d575f80fd5b34610158576020366003190112610158576100b9600435610a1c565b6003810180911161016f57604051631e2eaeaf60e01b815260048101919091526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610164575f9061012d575b6040516001600160801b039091168152602090f35b506020813d60201161015c575b81610147602093836107c2565b810103126101585760209051610118565b5f80fd5b3d915061013a565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b346101585761019a610194366107ac565b90610a78565b604051631e2eaeaf60e01b815260048101919091526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610164575f9061012d576040516001600160801b039091168152602090f35b34610158575f366003190112610158576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101585760a0366003190112610158576024356001600160a01b03811681036101585761027261079c565b6064358060020b810361015857610305926102de926040519260843560268501526006840152600383015281525f603a600c83012091816040820152816020820152526004357f00000000000000000000000000000000000000000000000000000000000000006108fb565b604080516001600160801b0390941684526020840192909252908201529081906060820190565b0390f35b346101585760403660031901126101585761032d61032561078c565b600435610a42565b604051631e2eaeaf60e01b815260048101919091526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610164575f906103a2575b604080516001600160801b038316815260809290921d600f0b602083015290f35b506020813d6020116103cd575b816103bc602093836107c2565b810103126101585760409051610381565b3d91506103af565b3461015857602036600319011261015857608062ffffff806104196004357f000000000000000000000000000000000000000000000000000000000000000061097d565b9294916040519560018060a01b0316865260020b6020860152166040840152166060820152f35b3461015857602036600319011261015857604061047f6004357f0000000000000000000000000000000000000000000000000000000000000000610972565b82519182526020820152f35b34610158576103056102de61049f366107ac565b907f00000000000000000000000000000000000000000000000000000000000000006108fb565b3461015857604036600319011261015857604061047f6104e461078c565b6004357f000000000000000000000000000000000000000000000000000000000000000061087c565b346101585760403660031901126101585761052961032561078c565b604051631afeb18d60e11b81526004810191909152600360248201525f816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610164576080915f916105bc575b50602081015190606060408201519101519060405192600180861b0381168452841d600f0b602084015260408301526060820152f35b6105d891503d805f833e6105d081836107c2565b8101906107f9565b82610586565b346101585760603660031901126101585760406004356105fc61078c565b9061060561079c565b7f0000000000000000000000000000000000000000000000000000000000000000906106318383610972565b9061063d86868661087c565b96909361065661064e82898961087c565b98909761097d565b5050905060020b9160020b82125f1461067c575050505003910382519182526020820152f35b95969593949360020b1361069457505003910361047f565b9493929094030392030361047f565b34610158576040366003190112610158576024358060010b809103610158576106cd600435610a1c565b6005810180911161016f5760405190602082019283526040820152604081526106f76060826107c2565b519020604051631e2eaeaf60e01b815260048101919091526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610164575f90610759575b602090604051908152f35b506020813d602011610784575b81610773602093836107c2565b81010312610158576020905161074e565b3d9150610766565b602435908160020b820361015857565b604435908160020b820361015857565b6040906003190112610158576004359060243590565b601f909101601f19168101906001600160401b038211908210176107e557604052565b634e487b7160e01b5f52604160045260245ffd5b602081830312610158578051906001600160401b03821161015857019080601f83011215610158578151916001600160401b0383116107e5578260051b906040519361084860208401866107c2565b845260208085019282010192831161015857602001905b82821061086c5750505090565b815181526020918201910161085f565b929161088791610a42565b6001810180911161016f57604051631afeb18d60e11b8152600481019190915260026024820152915f90839060449082906001600160a01b03165afa918215610164575f926108df575b506040602083015192015190565b6108f49192503d805f833e6105d081836107c2565b905f6108d1565b91610907905f92610a78565b604051631afeb18d60e11b815260048101919091526003602482015291829060449082906001600160a01b03165afa908115610164575f91610958575b506020810151916060604083015192015190565b61096c91503d805f833e6105d081836107c2565b5f610944565b919061088790610a1c565b919061098a602091610a1c565b604051631e2eaeaf60e01b8152600481019190915292839060249082906001600160a01b03165afa918215610164575f926109e8575b506001600160a01b0382169160a081901c60020b9162ffffff60b883901c81169260d01c1690565b9091506020813d602011610a14575b81610a04602093836107c2565b810103126101585751905f6109c0565b3d91506109f7565b604051602081019182526006604082015260408152610a3c6060826107c2565b51902090565b610a4b90610a1c565b6004810180911161016f5760405190602082019260020b8352604082015260408152610a3c6060826107c2565b610a8190610a1c565b6006810180911161016f576040519060208201928352604082015260408152610a3c6060826107c256fea164736f6c634300081a000a";
1399
1428
 
1400
1429
  // src/evm/abis/index.ts
1401
- var topUpDistributorAbi = [
1402
- {
1403
- type: "function",
1404
- name: "topUp",
1405
- inputs: [
1406
- { name: "asset", type: "address", internalType: "address" },
1407
- { name: "numeraire", type: "address", internalType: "address" },
1408
- { name: "amount", type: "uint256", internalType: "uint256" }
1409
- ],
1410
- outputs: [],
1411
- stateMutability: "payable"
1412
- }
1413
- ];
1414
1430
  var airlockAbi = [
1415
1431
  {
1416
1432
  type: "constructor",
@@ -2600,6 +2616,25 @@ var dopplerERC20V1Abi = [
2600
2616
  ],
2601
2617
  stateMutability: "view"
2602
2618
  },
2619
+ {
2620
+ type: "function",
2621
+ name: "getPastTotalSupply",
2622
+ inputs: [
2623
+ {
2624
+ name: "timepoint",
2625
+ type: "uint256",
2626
+ internalType: "uint256"
2627
+ }
2628
+ ],
2629
+ outputs: [
2630
+ {
2631
+ name: "",
2632
+ type: "uint256",
2633
+ internalType: "uint256"
2634
+ }
2635
+ ],
2636
+ stateMutability: "view"
2637
+ },
2603
2638
  {
2604
2639
  type: "function",
2605
2640
  name: "getPastVotesTotalSupply",
@@ -3082,6 +3117,25 @@ var dopplerERC20V1Abi = [
3082
3117
  ],
3083
3118
  stateMutability: "view"
3084
3119
  },
3120
+ {
3121
+ type: "function",
3122
+ name: "totalUnreleasedOf",
3123
+ inputs: [
3124
+ {
3125
+ name: "beneficiary",
3126
+ type: "address",
3127
+ internalType: "address"
3128
+ }
3129
+ ],
3130
+ outputs: [
3131
+ {
3132
+ name: "",
3133
+ type: "uint256",
3134
+ internalType: "uint256"
3135
+ }
3136
+ ],
3137
+ stateMutability: "view"
3138
+ },
3085
3139
  {
3086
3140
  type: "function",
3087
3141
  name: "totalSupply",
@@ -5458,27 +5512,7 @@ var streamableFeesLockerAbi = [
5458
5512
  { name: "recipient", type: "address", internalType: "address" },
5459
5513
  { name: "startDate", type: "uint32", internalType: "uint32" },
5460
5514
  { name: "lockDuration", type: "uint32", internalType: "uint32" },
5461
- { name: "isUnlocked", type: "bool", internalType: "bool" },
5462
- {
5463
- name: "beneficiaries",
5464
- type: "tuple[]",
5465
- internalType: "struct BeneficiaryData[]",
5466
- components: [
5467
- { name: "beneficiary", type: "address", internalType: "address" },
5468
- { name: "shares", type: "uint96", internalType: "uint96" }
5469
- ]
5470
- },
5471
- {
5472
- name: "positions",
5473
- type: "tuple[]",
5474
- internalType: "struct Position[]",
5475
- components: [
5476
- { name: "tickLower", type: "int24", internalType: "int24" },
5477
- { name: "tickUpper", type: "int24", internalType: "int24" },
5478
- { name: "liquidity", type: "uint128", internalType: "uint128" },
5479
- { name: "salt", type: "bytes32", internalType: "bytes32" }
5480
- ]
5481
- }
5515
+ { name: "isUnlocked", type: "bool", internalType: "bool" }
5482
5516
  ],
5483
5517
  stateMutability: "view"
5484
5518
  },
@@ -5493,10 +5527,154 @@ var streamableFeesLockerV2Abi = [
5493
5527
  {
5494
5528
  type: "function",
5495
5529
  name: "approvedMigrators",
5496
- stateMutability: "view",
5497
- inputs: [{ name: "migrator", type: "address" }],
5498
- outputs: [{ name: "approved", type: "bool" }]
5499
- }
5530
+ inputs: [{ name: "migrator", type: "address", internalType: "address" }],
5531
+ outputs: [{ name: "approved", type: "bool", internalType: "bool" }],
5532
+ stateMutability: "view"
5533
+ },
5534
+ {
5535
+ type: "function",
5536
+ name: "collectFees",
5537
+ inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
5538
+ outputs: [
5539
+ { name: "fees0", type: "uint128", internalType: "uint128" },
5540
+ { name: "fees1", type: "uint128", internalType: "uint128" }
5541
+ ],
5542
+ stateMutability: "nonpayable"
5543
+ },
5544
+ {
5545
+ type: "function",
5546
+ name: "getCumulatedFees0",
5547
+ inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
5548
+ outputs: [
5549
+ { name: "cumulatedFees0", type: "uint256", internalType: "uint256" }
5550
+ ],
5551
+ stateMutability: "view"
5552
+ },
5553
+ {
5554
+ type: "function",
5555
+ name: "getCumulatedFees1",
5556
+ inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
5557
+ outputs: [
5558
+ { name: "cumulatedFees1", type: "uint256", internalType: "uint256" }
5559
+ ],
5560
+ stateMutability: "view"
5561
+ },
5562
+ {
5563
+ type: "function",
5564
+ name: "getPoolKey",
5565
+ inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
5566
+ outputs: [
5567
+ { name: "currency0", type: "address", internalType: "Currency" },
5568
+ { name: "currency1", type: "address", internalType: "Currency" },
5569
+ { name: "fee", type: "uint24", internalType: "uint24" },
5570
+ { name: "tickSpacing", type: "int24", internalType: "int24" },
5571
+ { name: "hooks", type: "address", internalType: "contract IHooks" }
5572
+ ],
5573
+ stateMutability: "view"
5574
+ },
5575
+ {
5576
+ type: "function",
5577
+ name: "getShares",
5578
+ inputs: [
5579
+ { name: "poolId", type: "bytes32", internalType: "PoolId" },
5580
+ { name: "beneficiary", type: "address", internalType: "address" }
5581
+ ],
5582
+ outputs: [{ name: "shares", type: "uint256", internalType: "uint256" }],
5583
+ stateMutability: "view"
5584
+ },
5585
+ {
5586
+ type: "function",
5587
+ name: "streams",
5588
+ inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
5589
+ outputs: [
5590
+ {
5591
+ name: "poolKey",
5592
+ type: "tuple",
5593
+ internalType: "struct PoolKey",
5594
+ components: [
5595
+ { name: "currency0", type: "address", internalType: "Currency" },
5596
+ { name: "currency1", type: "address", internalType: "Currency" },
5597
+ { name: "fee", type: "uint24", internalType: "uint24" },
5598
+ { name: "tickSpacing", type: "int24", internalType: "int24" },
5599
+ {
5600
+ name: "hooks",
5601
+ type: "address",
5602
+ internalType: "contract IHooks"
5603
+ }
5604
+ ]
5605
+ },
5606
+ { name: "recipient", type: "address", internalType: "address" },
5607
+ { name: "startDate", type: "uint32", internalType: "uint32" },
5608
+ { name: "lockDuration", type: "uint32", internalType: "uint32" },
5609
+ { name: "isUnlocked", type: "bool", internalType: "bool" }
5610
+ ],
5611
+ stateMutability: "view"
5612
+ },
5613
+ {
5614
+ type: "function",
5615
+ name: "unlock",
5616
+ inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
5617
+ outputs: [],
5618
+ stateMutability: "nonpayable"
5619
+ },
5620
+ {
5621
+ type: "function",
5622
+ name: "updateBeneficiary",
5623
+ inputs: [
5624
+ { name: "poolId", type: "bytes32", internalType: "PoolId" },
5625
+ { name: "newBeneficiary", type: "address", internalType: "address" }
5626
+ ],
5627
+ outputs: [],
5628
+ stateMutability: "nonpayable"
5629
+ },
5630
+ {
5631
+ type: "event",
5632
+ name: "Collect",
5633
+ inputs: [
5634
+ {
5635
+ name: "poolId",
5636
+ type: "bytes32",
5637
+ indexed: true,
5638
+ internalType: "PoolId"
5639
+ },
5640
+ {
5641
+ name: "fees0",
5642
+ type: "uint256",
5643
+ indexed: false,
5644
+ internalType: "uint256"
5645
+ },
5646
+ {
5647
+ name: "fees1",
5648
+ type: "uint256",
5649
+ indexed: false,
5650
+ internalType: "uint256"
5651
+ }
5652
+ ],
5653
+ anonymous: false
5654
+ },
5655
+ {
5656
+ type: "event",
5657
+ name: "Unlock",
5658
+ inputs: [
5659
+ {
5660
+ name: "poolId",
5661
+ type: "bytes32",
5662
+ indexed: true,
5663
+ internalType: "PoolId"
5664
+ },
5665
+ {
5666
+ name: "recipient",
5667
+ type: "address",
5668
+ indexed: false,
5669
+ internalType: "address"
5670
+ }
5671
+ ],
5672
+ anonymous: false
5673
+ },
5674
+ { type: "error", name: "CallerNotRecipient", inputs: [] },
5675
+ { type: "error", name: "LockNotExpired", inputs: [] },
5676
+ { type: "error", name: "StreamAlreadyUnlocked", inputs: [] },
5677
+ { type: "error", name: "StreamNotFound", inputs: [] }
5500
5678
  ];
5501
5679
  var v4MulticurveMigratorAbi = [
5502
5680
  {
@@ -6117,31 +6295,91 @@ var rehypeDopplerHookInitializerAbi = [
6117
6295
  },
6118
6296
  {
6119
6297
  type: "function",
6120
- name: "getHookFees",
6298
+ name: "getIntegratorFeeShare",
6121
6299
  inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6122
- outputs: [
6123
- { name: "fees0", type: "uint128", internalType: "uint128" },
6124
- { name: "fees1", type: "uint128", internalType: "uint128" },
6125
- { name: "beneficiaryFees0", type: "uint128", internalType: "uint128" },
6126
- { name: "beneficiaryFees1", type: "uint128", internalType: "uint128" },
6127
- { name: "airlockOwnerFees0", type: "uint128", internalType: "uint128" },
6128
- { name: "airlockOwnerFees1", type: "uint128", internalType: "uint128" },
6129
- { name: "customFee", type: "uint24", internalType: "uint24" }
6130
- ],
6300
+ outputs: [{ name: "", type: "uint24", internalType: "uint24" }],
6131
6301
  stateMutability: "view"
6132
6302
  },
6133
6303
  {
6134
6304
  type: "function",
6135
- name: "getPoolInfo",
6305
+ name: "getIntegratorRoutingConfig",
6136
6306
  inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6137
6307
  outputs: [
6138
- { name: "asset", type: "address", internalType: "address" },
6139
- { name: "numeraire", type: "address", internalType: "address" },
6140
- { name: "buybackDst", type: "address", internalType: "address" }
6141
- ],
6142
- stateMutability: "view"
6143
- },
6144
- {
6308
+ { name: "integrator", type: "address", internalType: "address" },
6309
+ {
6310
+ name: "assetFeesToNumeraireRatio",
6311
+ type: "uint32",
6312
+ internalType: "uint32"
6313
+ },
6314
+ {
6315
+ name: "numeraireFeesToAssetRatio",
6316
+ type: "uint32",
6317
+ internalType: "uint32"
6318
+ },
6319
+ { name: "automaticPayout", type: "bool", internalType: "bool" }
6320
+ ],
6321
+ stateMutability: "view"
6322
+ },
6323
+ {
6324
+ type: "function",
6325
+ name: "getPendingIntegratorFees",
6326
+ inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6327
+ outputs: [
6328
+ { name: "fees0", type: "uint128", internalType: "uint128" },
6329
+ { name: "fees1", type: "uint128", internalType: "uint128" }
6330
+ ],
6331
+ stateMutability: "view"
6332
+ },
6333
+ {
6334
+ type: "function",
6335
+ name: "getClaimableIntegratorFees",
6336
+ inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6337
+ outputs: [
6338
+ { name: "fees0", type: "uint128", internalType: "uint128" },
6339
+ { name: "fees1", type: "uint128", internalType: "uint128" }
6340
+ ],
6341
+ stateMutability: "view"
6342
+ },
6343
+ {
6344
+ type: "function",
6345
+ name: "claimIntegratorFees",
6346
+ inputs: [
6347
+ { name: "asset", type: "address", internalType: "address" },
6348
+ { name: "to", type: "address", internalType: "address" }
6349
+ ],
6350
+ outputs: [
6351
+ { name: "fees0", type: "uint128", internalType: "uint128" },
6352
+ { name: "fees1", type: "uint128", internalType: "uint128" }
6353
+ ],
6354
+ stateMutability: "nonpayable"
6355
+ },
6356
+ {
6357
+ type: "function",
6358
+ name: "getHookFees",
6359
+ inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6360
+ outputs: [
6361
+ { name: "fees0", type: "uint128", internalType: "uint128" },
6362
+ { name: "fees1", type: "uint128", internalType: "uint128" },
6363
+ { name: "beneficiaryFees0", type: "uint128", internalType: "uint128" },
6364
+ { name: "beneficiaryFees1", type: "uint128", internalType: "uint128" },
6365
+ { name: "airlockOwnerFees0", type: "uint128", internalType: "uint128" },
6366
+ { name: "airlockOwnerFees1", type: "uint128", internalType: "uint128" },
6367
+ { name: "customFee", type: "uint24", internalType: "uint24" }
6368
+ ],
6369
+ stateMutability: "view"
6370
+ },
6371
+ {
6372
+ type: "function",
6373
+ name: "getPoolInfo",
6374
+ inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6375
+ outputs: [
6376
+ { name: "asset", type: "address", internalType: "address" },
6377
+ { name: "numeraire", type: "address", internalType: "address" },
6378
+ { name: "buybackDst", type: "address", internalType: "address" }
6379
+ ],
6380
+ stateMutability: "view"
6381
+ },
6382
+ {
6145
6383
  type: "function",
6146
6384
  name: "getPosition",
6147
6385
  inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
@@ -6290,6 +6528,170 @@ var rehypeDopplerHookInitializerAbi = [
6290
6528
  ],
6291
6529
  anonymous: false
6292
6530
  },
6531
+ {
6532
+ type: "event",
6533
+ name: "IntegratorAutomaticPayoutSet",
6534
+ inputs: [
6535
+ {
6536
+ name: "poolId",
6537
+ type: "bytes32",
6538
+ indexed: true,
6539
+ internalType: "PoolId"
6540
+ },
6541
+ {
6542
+ name: "automaticPayout",
6543
+ type: "bool",
6544
+ indexed: false,
6545
+ internalType: "bool"
6546
+ }
6547
+ ],
6548
+ anonymous: false
6549
+ },
6550
+ {
6551
+ type: "event",
6552
+ name: "IntegratorConversionRatiosSet",
6553
+ inputs: [
6554
+ {
6555
+ name: "poolId",
6556
+ type: "bytes32",
6557
+ indexed: true,
6558
+ internalType: "PoolId"
6559
+ },
6560
+ {
6561
+ name: "assetFeesToNumeraireRatio",
6562
+ type: "uint32",
6563
+ indexed: false,
6564
+ internalType: "uint32"
6565
+ },
6566
+ {
6567
+ name: "numeraireFeesToAssetRatio",
6568
+ type: "uint32",
6569
+ indexed: false,
6570
+ internalType: "uint32"
6571
+ }
6572
+ ],
6573
+ anonymous: false
6574
+ },
6575
+ {
6576
+ type: "event",
6577
+ name: "IntegratorFeeShareSet",
6578
+ inputs: [
6579
+ {
6580
+ name: "poolId",
6581
+ type: "bytes32",
6582
+ indexed: true,
6583
+ internalType: "PoolId"
6584
+ },
6585
+ {
6586
+ name: "feeShare",
6587
+ type: "uint24",
6588
+ indexed: false,
6589
+ internalType: "uint24"
6590
+ }
6591
+ ],
6592
+ anonymous: false
6593
+ },
6594
+ {
6595
+ type: "event",
6596
+ name: "IntegratorFeesClaimed",
6597
+ inputs: [
6598
+ {
6599
+ name: "poolId",
6600
+ type: "bytes32",
6601
+ indexed: true,
6602
+ internalType: "PoolId"
6603
+ },
6604
+ {
6605
+ name: "integrator",
6606
+ type: "address",
6607
+ indexed: true,
6608
+ internalType: "address"
6609
+ },
6610
+ {
6611
+ name: "to",
6612
+ type: "address",
6613
+ indexed: true,
6614
+ internalType: "address"
6615
+ },
6616
+ {
6617
+ name: "fees0",
6618
+ type: "uint128",
6619
+ indexed: false,
6620
+ internalType: "uint128"
6621
+ },
6622
+ {
6623
+ name: "fees1",
6624
+ type: "uint128",
6625
+ indexed: false,
6626
+ internalType: "uint128"
6627
+ }
6628
+ ],
6629
+ anonymous: false
6630
+ },
6631
+ {
6632
+ type: "event",
6633
+ name: "IntegratorSet",
6634
+ inputs: [
6635
+ {
6636
+ name: "poolId",
6637
+ type: "bytes32",
6638
+ indexed: true,
6639
+ internalType: "PoolId"
6640
+ },
6641
+ {
6642
+ name: "oldIntegrator",
6643
+ type: "address",
6644
+ indexed: true,
6645
+ internalType: "address"
6646
+ },
6647
+ {
6648
+ name: "newIntegrator",
6649
+ type: "address",
6650
+ indexed: true,
6651
+ internalType: "address"
6652
+ }
6653
+ ],
6654
+ anonymous: false
6655
+ },
6656
+ {
6657
+ type: "function",
6658
+ name: "setIntegratorConversionRatios",
6659
+ inputs: [
6660
+ { name: "poolId", type: "bytes32", internalType: "PoolId" },
6661
+ {
6662
+ name: "assetFeesToNumeraireRatio",
6663
+ type: "uint32",
6664
+ internalType: "uint32"
6665
+ },
6666
+ {
6667
+ name: "numeraireFeesToAssetRatio",
6668
+ type: "uint32",
6669
+ internalType: "uint32"
6670
+ }
6671
+ ],
6672
+ outputs: [],
6673
+ stateMutability: "nonpayable"
6674
+ },
6675
+ {
6676
+ type: "function",
6677
+ name: "setIntegratorAutomaticPayout",
6678
+ inputs: [
6679
+ { name: "poolId", type: "bytes32", internalType: "PoolId" },
6680
+ { name: "automaticPayout", type: "bool", internalType: "bool" }
6681
+ ],
6682
+ outputs: [],
6683
+ stateMutability: "nonpayable"
6684
+ },
6685
+ {
6686
+ type: "function",
6687
+ name: "setIntegrator",
6688
+ inputs: [
6689
+ { name: "poolId", type: "bytes32", internalType: "PoolId" },
6690
+ { name: "newIntegrator", type: "address", internalType: "address" }
6691
+ ],
6692
+ outputs: [],
6693
+ stateMutability: "nonpayable"
6694
+ },
6293
6695
  {
6294
6696
  type: "function",
6295
6697
  name: "setFeeDistribution",
@@ -6335,6 +6737,10 @@ var rehypeDopplerHookInitializerAbi = [
6335
6737
  outputs: [],
6336
6738
  stateMutability: "nonpayable"
6337
6739
  },
6740
+ { type: "error", name: "InvalidIntegrator", inputs: [] },
6741
+ { type: "error", name: "InvalidIntegratorClaimDestination", inputs: [] },
6742
+ { type: "error", name: "InvalidIntegratorConversionRatio", inputs: [] },
6743
+ { type: "error", name: "SenderNotIntegrator", inputs: [] },
6338
6744
  { type: "error", name: "FeeBeneficiariesNotConfigured", inputs: [] },
6339
6745
  {
6340
6746
  type: "error",
@@ -6386,184 +6792,173 @@ var rehypeDopplerHookInitializerAbi = [
6386
6792
  { type: "error", name: "UnorderedBeneficiaries", inputs: [] }
6387
6793
  ];
6388
6794
  var rehypeDopplerHookAbi = rehypeDopplerHookInitializerAbi;
6389
- var rehypeDopplerHookMigratorAbi = [
6795
+ var dopplerHookMigratorAbi = [
6390
6796
  {
6391
6797
  type: "function",
6392
- name: "MIGRATOR",
6393
- inputs: [],
6394
- outputs: [{ name: "", type: "address", internalType: "address" }],
6395
- stateMutability: "view"
6396
- },
6397
- {
6398
- type: "function",
6399
- name: "claimAirlockOwnerFees",
6400
- inputs: [{ name: "asset", type: "address", internalType: "address" }],
6401
- outputs: [
6402
- { name: "fees0", type: "uint128", internalType: "uint128" },
6403
- { name: "fees1", type: "uint128", internalType: "uint128" }
6798
+ name: "claimMigrationRefund",
6799
+ inputs: [
6800
+ { name: "poolId", type: "bytes32", internalType: "PoolId" },
6801
+ { name: "to", type: "address", internalType: "address" }
6404
6802
  ],
6803
+ outputs: [],
6405
6804
  stateMutability: "nonpayable"
6406
6805
  },
6407
6806
  {
6408
6807
  type: "function",
6409
- name: "collectFees",
6410
- inputs: [{ name: "asset", type: "address", internalType: "address" }],
6411
- outputs: [{ name: "fees", type: "int256", internalType: "BalanceDelta" }],
6412
- stateMutability: "nonpayable"
6413
- },
6414
- {
6415
- type: "function",
6416
- name: "getFeeDistributionInfo",
6417
- inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6808
+ name: "getAssetData",
6809
+ inputs: [
6810
+ { name: "token0", type: "address", internalType: "address" },
6811
+ { name: "token1", type: "address", internalType: "address" }
6812
+ ],
6418
6813
  outputs: [
6814
+ { name: "isToken0", type: "bool", internalType: "bool" },
6419
6815
  {
6420
- name: "assetFeesToAssetBuybackWad",
6421
- type: "uint256",
6422
- internalType: "uint256"
6423
- },
6424
- {
6425
- name: "assetFeesToNumeraireBuybackWad",
6426
- type: "uint256",
6427
- internalType: "uint256"
6428
- },
6429
- {
6430
- name: "assetFeesToBeneficiaryWad",
6431
- type: "uint256",
6432
- internalType: "uint256"
6433
- },
6434
- { name: "assetFeesToLpWad", type: "uint256", internalType: "uint256" },
6435
- {
6436
- name: "numeraireFeesToAssetBuybackWad",
6437
- type: "uint256",
6438
- internalType: "uint256"
6816
+ name: "poolKey",
6817
+ type: "tuple",
6818
+ internalType: "struct PoolKey",
6819
+ components: [
6820
+ { name: "currency0", type: "address", internalType: "Currency" },
6821
+ { name: "currency1", type: "address", internalType: "Currency" },
6822
+ { name: "fee", type: "uint24", internalType: "uint24" },
6823
+ { name: "tickSpacing", type: "int24", internalType: "int24" },
6824
+ {
6825
+ name: "hooks",
6826
+ type: "address",
6827
+ internalType: "contract IHooks"
6828
+ }
6829
+ ]
6439
6830
  },
6831
+ { name: "lockDuration", type: "uint32", internalType: "uint32" },
6440
6832
  {
6441
- name: "numeraireFeesToNumeraireBuybackWad",
6442
- type: "uint256",
6443
- internalType: "uint256"
6833
+ name: "feeOrInitialDynamicFee",
6834
+ type: "uint24",
6835
+ internalType: "uint24"
6444
6836
  },
6837
+ { name: "useDynamicFee", type: "bool", internalType: "bool" },
6838
+ { name: "dopplerHook", type: "address", internalType: "address" },
6445
6839
  {
6446
- name: "numeraireFeesToBeneficiaryWad",
6447
- type: "uint256",
6448
- internalType: "uint256"
6840
+ name: "onInitializationCalldata",
6841
+ type: "bytes",
6842
+ internalType: "bytes"
6449
6843
  },
6450
- {
6451
- name: "numeraireFeesToLpWad",
6452
- type: "uint256",
6453
- internalType: "uint256"
6454
- }
6455
- ],
6456
- stateMutability: "view"
6457
- },
6458
- {
6459
- type: "function",
6460
- name: "getFeeRoutingMode",
6461
- inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6462
- outputs: [{ name: "", type: "uint8", internalType: "enum FeeRoutingMode" }],
6463
- stateMutability: "view"
6464
- },
6465
- {
6466
- type: "function",
6467
- name: "getHookFees",
6468
- inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6469
- outputs: [
6470
- { name: "fees0", type: "uint128", internalType: "uint128" },
6471
- { name: "fees1", type: "uint128", internalType: "uint128" },
6472
- { name: "beneficiaryFees0", type: "uint128", internalType: "uint128" },
6473
- { name: "beneficiaryFees1", type: "uint128", internalType: "uint128" },
6474
- { name: "airlockOwnerFees0", type: "uint128", internalType: "uint128" },
6475
- { name: "airlockOwnerFees1", type: "uint128", internalType: "uint128" },
6476
- { name: "customFee", type: "uint24", internalType: "uint24" }
6844
+ { name: "status", type: "uint8", internalType: "enum PoolStatus" }
6477
6845
  ],
6478
6846
  stateMutability: "view"
6479
6847
  },
6480
6848
  {
6481
6849
  type: "function",
6482
- name: "getPoolInfo",
6850
+ name: "getMigrationRefund",
6483
6851
  inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6484
6852
  outputs: [
6485
- { name: "asset", type: "address", internalType: "address" },
6486
- { name: "numeraire", type: "address", internalType: "address" },
6487
- { name: "buybackDst", type: "address", internalType: "address" }
6853
+ { name: "recipient", type: "address", internalType: "address" },
6854
+ { name: "currency0", type: "address", internalType: "Currency" },
6855
+ { name: "currency1", type: "address", internalType: "Currency" },
6856
+ { name: "amount0", type: "uint256", internalType: "uint256" },
6857
+ { name: "amount1", type: "uint256", internalType: "uint256" }
6488
6858
  ],
6489
6859
  stateMutability: "view"
6490
6860
  },
6491
6861
  {
6492
6862
  type: "function",
6493
- name: "getPosition",
6494
- inputs: [{ name: "poolId", type: "bytes32", internalType: "PoolId" }],
6863
+ name: "getPair",
6864
+ inputs: [{ name: "asset", type: "address", internalType: "address" }],
6495
6865
  outputs: [
6496
- { name: "tickLower", type: "int24", internalType: "int24" },
6497
- { name: "tickUpper", type: "int24", internalType: "int24" },
6498
- { name: "liquidity", type: "uint128", internalType: "uint128" },
6499
- { name: "salt", type: "bytes32", internalType: "bytes32" }
6866
+ { name: "token0", type: "address", internalType: "address" },
6867
+ { name: "token1", type: "address", internalType: "address" }
6500
6868
  ],
6501
6869
  stateMutability: "view"
6502
- },
6503
- {
6504
- type: "function",
6505
- name: "poolManager",
6506
- inputs: [],
6507
- outputs: [
6508
- { name: "", type: "address", internalType: "contract IPoolManager" }
6509
- ],
6870
+ },
6871
+ {
6872
+ type: "function",
6873
+ name: "getTotalClaimableMigrationRefund",
6874
+ inputs: [{ name: "currency", type: "address", internalType: "Currency" }],
6875
+ outputs: [{ name: "amount", type: "uint256", internalType: "uint256" }],
6510
6876
  stateMutability: "view"
6511
6877
  },
6512
6878
  {
6513
6879
  type: "function",
6514
- name: "quoter",
6880
+ name: "locker",
6515
6881
  inputs: [],
6516
- outputs: [{ name: "", type: "address", internalType: "contract Quoter" }],
6882
+ outputs: [
6883
+ {
6884
+ name: "",
6885
+ type: "address",
6886
+ internalType: "contract StreamableFeesLockerV2"
6887
+ }
6888
+ ],
6517
6889
  stateMutability: "view"
6518
6890
  },
6519
6891
  {
6520
- type: "function",
6521
- name: "setFeeDistribution",
6892
+ type: "event",
6893
+ name: "MigrationRefundClaimed",
6522
6894
  inputs: [
6523
- { name: "poolId", type: "bytes32", internalType: "PoolId" },
6524
6895
  {
6525
- name: "assetFeesToAssetBuybackWad",
6526
- type: "uint256",
6527
- internalType: "uint256"
6896
+ name: "poolId",
6897
+ type: "bytes32",
6898
+ indexed: true,
6899
+ internalType: "PoolId"
6528
6900
  },
6529
6901
  {
6530
- name: "assetFeesToNumeraireBuybackWad",
6531
- type: "uint256",
6532
- internalType: "uint256"
6902
+ name: "recipient",
6903
+ type: "address",
6904
+ indexed: true,
6905
+ internalType: "address"
6533
6906
  },
6534
6907
  {
6535
- name: "assetFeesToBeneficiaryWad",
6536
- type: "uint256",
6537
- internalType: "uint256"
6908
+ name: "to",
6909
+ type: "address",
6910
+ indexed: true,
6911
+ internalType: "address"
6538
6912
  },
6539
- { name: "assetFeesToLpWad", type: "uint256", internalType: "uint256" },
6540
6913
  {
6541
- name: "numeraireFeesToAssetBuybackWad",
6914
+ name: "amount0",
6542
6915
  type: "uint256",
6916
+ indexed: false,
6543
6917
  internalType: "uint256"
6544
6918
  },
6545
6919
  {
6546
- name: "numeraireFeesToNumeraireBuybackWad",
6920
+ name: "amount1",
6547
6921
  type: "uint256",
6922
+ indexed: false,
6548
6923
  internalType: "uint256"
6924
+ }
6925
+ ],
6926
+ anonymous: false
6927
+ },
6928
+ {
6929
+ type: "event",
6930
+ name: "MigrationRefundRecorded",
6931
+ inputs: [
6932
+ {
6933
+ name: "poolId",
6934
+ type: "bytes32",
6935
+ indexed: true,
6936
+ internalType: "PoolId"
6549
6937
  },
6550
6938
  {
6551
- name: "numeraireFeesToBeneficiaryWad",
6939
+ name: "recipient",
6940
+ type: "address",
6941
+ indexed: true,
6942
+ internalType: "address"
6943
+ },
6944
+ {
6945
+ name: "amount0",
6552
6946
  type: "uint256",
6947
+ indexed: false,
6553
6948
  internalType: "uint256"
6554
6949
  },
6555
6950
  {
6556
- name: "numeraireFeesToLpWad",
6951
+ name: "amount1",
6557
6952
  type: "uint256",
6953
+ indexed: false,
6558
6954
  internalType: "uint256"
6559
6955
  }
6560
6956
  ],
6561
- outputs: [],
6562
- stateMutability: "nonpayable"
6957
+ anonymous: false
6563
6958
  },
6564
- { type: "error", name: "FeeDistributionMustAddUpToWAD", inputs: [] },
6565
- { type: "error", name: "SenderNotAirlockOwner", inputs: [] },
6566
- { type: "error", name: "SenderNotAuthorized", inputs: [] }
6959
+ { type: "error", name: "CallerNotRefundRecipient", inputs: [] },
6960
+ { type: "error", name: "InvalidRefundDestination", inputs: [] },
6961
+ { type: "error", name: "NoMigrationRefund", inputs: [] }
6567
6962
  ];
6568
6963
 
6569
6964
  // src/evm/utils/tokenAddressMiner.ts
@@ -7162,10 +7557,10 @@ function isNonEmpty(values) {
7162
7557
  // src/evm/types.ts
7163
7558
  var NO_OP_ENABLED_CHAIN_IDS = [
7164
7559
  CHAIN_IDS.MAINNET,
7165
- CHAIN_IDS.ETH_SEPOLIA,
7166
7560
  CHAIN_IDS.ARBITRUM,
7167
7561
  CHAIN_IDS.BASE,
7168
7562
  CHAIN_IDS.BASE_SEPOLIA,
7563
+ CHAIN_IDS.BSC,
7169
7564
  CHAIN_IDS.UNICHAIN,
7170
7565
  CHAIN_IDS.UNICHAIN_SEPOLIA,
7171
7566
  CHAIN_IDS.ROBINHOOD,
@@ -7180,6 +7575,7 @@ var LAUNCHPAD_ENABLED_CHAIN_IDS = [
7180
7575
  CHAIN_IDS.ARBITRUM,
7181
7576
  CHAIN_IDS.BASE,
7182
7577
  CHAIN_IDS.BASE_SEPOLIA,
7578
+ CHAIN_IDS.BSC,
7183
7579
  CHAIN_IDS.ROBINHOOD,
7184
7580
  CHAIN_IDS.MONAD_MAINNET
7185
7581
  ];
@@ -7266,7 +7662,9 @@ function validateFeeDistributionInfo(feeDistributionInfo) {
7266
7662
  }
7267
7663
 
7268
7664
  // src/evm/utils/rehypeDopplerHookInitializer.ts
7269
- function normalizeRehypeDopplerHookInitializerConfig(config, controllerOverride) {
7665
+ var MAX_REHYPE_INTEGRATOR_FEE_SHARE = 75e4;
7666
+ var REHYPE_INTEGRATOR_CONVERSION_RATIO_DENOMINATOR = 1e9;
7667
+ function normalizeRehypeDopplerHookInitializerConfig(config, controllerOverride, fallbackIntegrator) {
7270
7668
  assertNonZeroAddress(config.hookAddress, "Rehype hookAddress");
7271
7669
  if (config.buybackDestination !== void 0 && controllerOverride !== void 0) {
7272
7670
  throw new Error(
@@ -7284,6 +7682,10 @@ function normalizeRehypeDopplerHookInitializerConfig(config, controllerOverride)
7284
7682
  const feeDistributionInfo = resolveRehypeFeeDistributionInfo(config);
7285
7683
  const { startFee, endFee, durationSeconds, startingTime } = normalizeFeeSchedule(config);
7286
7684
  const feeRoutingMode = feeBeneficiaries !== void 0 ? normalizeBeneficiaryFeeRoutingMode(config.feeRoutingMode) : normalizeFeeRoutingMode(config.feeRoutingMode);
7685
+ const integratorFeeConfig = config.integratorFeeConfig === void 0 ? void 0 : normalizeIntegratorFeeConfig(
7686
+ config.integratorFeeConfig,
7687
+ fallbackIntegrator
7688
+ );
7287
7689
  const common = {
7288
7690
  hookAddress: config.hookAddress,
7289
7691
  startFee,
@@ -7291,6 +7693,7 @@ function normalizeRehypeDopplerHookInitializerConfig(config, controllerOverride)
7291
7693
  durationSeconds,
7292
7694
  startingTime,
7293
7695
  feeDistributionInfo,
7696
+ ...integratorFeeConfig === void 0 ? {} : { integratorFeeConfig },
7294
7697
  graduationCalldata: config.graduationCalldata,
7295
7698
  graduationMarketCap: config.graduationMarketCap,
7296
7699
  numerairePrice: config.numerairePrice,
@@ -7314,6 +7717,47 @@ function normalizeRehypeDopplerHookInitializerConfig(config, controllerOverride)
7314
7717
  feeRoutingMode
7315
7718
  };
7316
7719
  }
7720
+ function normalizeIntegratorFeeConfig(config, fallbackIntegrator) {
7721
+ const integrator = config.integrator ?? fallbackIntegrator;
7722
+ if (integrator === void 0) {
7723
+ throw new Error(
7724
+ "Rehype integratorFeeConfig requires integrator or withIntegrator"
7725
+ );
7726
+ }
7727
+ assertNonZeroAddress(integrator, "Rehype integratorFeeConfig.integrator");
7728
+ if (!Number.isInteger(config.feeShare) || config.feeShare <= 0 || config.feeShare > MAX_REHYPE_INTEGRATOR_FEE_SHARE) {
7729
+ throw new Error(
7730
+ "Rehype integrator feeShare must be an integer between 1 and 750000"
7731
+ );
7732
+ }
7733
+ const assetFeesToNumeraireRatio = config.assetFeesToNumeraireRatio ?? 0;
7734
+ const numeraireFeesToAssetRatio = config.numeraireFeesToAssetRatio ?? 0;
7735
+ assertIntegratorConversionRatio(
7736
+ assetFeesToNumeraireRatio,
7737
+ "Rehype integrator assetFeesToNumeraireRatio"
7738
+ );
7739
+ assertIntegratorConversionRatio(
7740
+ numeraireFeesToAssetRatio,
7741
+ "Rehype integrator numeraireFeesToAssetRatio"
7742
+ );
7743
+ if (config.automaticPayout !== void 0 && typeof config.automaticPayout !== "boolean") {
7744
+ throw new Error("Rehype integrator automaticPayout must be a boolean");
7745
+ }
7746
+ return {
7747
+ integrator,
7748
+ feeShare: config.feeShare,
7749
+ assetFeesToNumeraireRatio,
7750
+ numeraireFeesToAssetRatio,
7751
+ automaticPayout: config.automaticPayout ?? false
7752
+ };
7753
+ }
7754
+ function assertIntegratorConversionRatio(value, label) {
7755
+ if (!Number.isInteger(value) || value < 0 || value > REHYPE_INTEGRATOR_CONVERSION_RATIO_DENOMINATOR) {
7756
+ throw new Error(
7757
+ `${label} must be an integer between 0 and ${REHYPE_INTEGRATOR_CONVERSION_RATIO_DENOMINATOR}`
7758
+ );
7759
+ }
7760
+ }
7317
7761
  function assertNonZeroAddress(address, label) {
7318
7762
  if (!viem.isAddress(address, { strict: false }) || address.toLowerCase() === ZERO_ADDRESS) {
7319
7763
  throw new Error(`${label} must be a non-zero address`);
@@ -7402,6 +7846,13 @@ function normalizeUint32(value, label) {
7402
7846
  }
7403
7847
  return normalized;
7404
7848
  }
7849
+ var DISABLED_REHYPE_INTEGRATOR_CONFIG = {
7850
+ integrator: ZERO_ADDRESS,
7851
+ feeShare: 0,
7852
+ assetFeesToNumeraireRatio: 0,
7853
+ numeraireFeesToAssetRatio: 0,
7854
+ automaticPayout: false
7855
+ };
7405
7856
  function encodeRehypeDopplerHookInitializerData(numeraire, config) {
7406
7857
  return viem.encodeAbiParameters(rehypeInitializerDataAbi, [
7407
7858
  {
@@ -7413,7 +7864,8 @@ function encodeRehypeDopplerHookInitializerData(numeraire, config) {
7413
7864
  startingTime: config.startingTime,
7414
7865
  feeRoutingMode: config.feeRoutingMode,
7415
7866
  feeDistributionInfo: config.feeDistributionInfo,
7416
- feeBeneficiaries: config.feeBeneficiaries ?? []
7867
+ feeBeneficiaries: config.feeBeneficiaries ?? [],
7868
+ integratorConfig: config.integratorFeeConfig ?? DISABLED_REHYPE_INTEGRATOR_CONFIG
7417
7869
  }
7418
7870
  ]);
7419
7871
  }
@@ -7422,14 +7874,21 @@ var beneficiaryComponents = [
7422
7874
  { name: "shares", type: "uint96" }
7423
7875
  ];
7424
7876
  var feeDistributionComponents = [
7425
- { name: "assetFeesToAssetBuybackWad", type: "uint256" },
7426
- { name: "assetFeesToNumeraireBuybackWad", type: "uint256" },
7427
- { name: "assetFeesToBeneficiaryWad", type: "uint256" },
7428
- { name: "assetFeesToLpWad", type: "uint256" },
7429
- { name: "numeraireFeesToAssetBuybackWad", type: "uint256" },
7430
- { name: "numeraireFeesToNumeraireBuybackWad", type: "uint256" },
7431
- { name: "numeraireFeesToBeneficiaryWad", type: "uint256" },
7432
- { name: "numeraireFeesToLpWad", type: "uint256" }
7877
+ { name: "assetFeesToAssetBuybackWad", type: "uint64" },
7878
+ { name: "assetFeesToNumeraireBuybackWad", type: "uint64" },
7879
+ { name: "assetFeesToBeneficiaryWad", type: "uint64" },
7880
+ { name: "assetFeesToLpWad", type: "uint64" },
7881
+ { name: "numeraireFeesToAssetBuybackWad", type: "uint64" },
7882
+ { name: "numeraireFeesToNumeraireBuybackWad", type: "uint64" },
7883
+ { name: "numeraireFeesToBeneficiaryWad", type: "uint64" },
7884
+ { name: "numeraireFeesToLpWad", type: "uint64" }
7885
+ ];
7886
+ var integratorConfigComponents = [
7887
+ { name: "integrator", type: "address" },
7888
+ { name: "feeShare", type: "uint24" },
7889
+ { name: "assetFeesToNumeraireRatio", type: "uint32" },
7890
+ { name: "numeraireFeesToAssetRatio", type: "uint32" },
7891
+ { name: "automaticPayout", type: "bool" }
7433
7892
  ];
7434
7893
  var rehypeInitializerDataAbi = [
7435
7894
  {
@@ -7451,120 +7910,15 @@ var rehypeInitializerDataAbi = [
7451
7910
  name: "feeBeneficiaries",
7452
7911
  type: "tuple[]",
7453
7912
  components: beneficiaryComponents
7454
- }
7455
- ]
7456
- }
7457
- ];
7458
- function normalizeRehypeFeeRoutingMode(mode) {
7459
- if (mode === void 0 || mode === 0 /* DirectBuyback */) {
7460
- return 0 /* DirectBuyback */;
7461
- }
7462
- if (mode === 1 /* RouteToBeneficiaryFees */) {
7463
- return 1 /* RouteToBeneficiaryFees */;
7464
- }
7465
- if (mode === "directBuyback") {
7466
- return 0 /* DirectBuyback */;
7467
- }
7468
- if (mode === "routeToBeneficiaryFees") {
7469
- return 1 /* RouteToBeneficiaryFees */;
7470
- }
7471
- throw new Error(
7472
- "Rehype feeRoutingMode must be DirectBuyback/directBuyback or RouteToBeneficiaryFees/routeToBeneficiaryFees"
7473
- );
7474
- }
7475
- function resolveRehypeFeeDistributionInfo2(config) {
7476
- if (config.feeDistributionInfo) {
7477
- return config.feeDistributionInfo;
7478
- }
7479
- const assetBuyback = config.assetBuybackPercentWad;
7480
- const numeraireBuyback = config.numeraireBuybackPercentWad;
7481
- const beneficiary = config.beneficiaryPercentWad;
7482
- const lp = config.lpPercentWad;
7483
- if (assetBuyback === void 0 || numeraireBuyback === void 0 || beneficiary === void 0 || lp === void 0) {
7484
- throw new Error(
7485
- "Rehype feeDistributionInfo is required, or provide all deprecated legacy percentages."
7486
- );
7487
- }
7488
- return {
7489
- assetFeesToAssetBuybackWad: assetBuyback,
7490
- assetFeesToNumeraireBuybackWad: numeraireBuyback,
7491
- assetFeesToBeneficiaryWad: beneficiary,
7492
- assetFeesToLpWad: lp,
7493
- numeraireFeesToAssetBuybackWad: assetBuyback,
7494
- numeraireFeesToNumeraireBuybackWad: numeraireBuyback,
7495
- numeraireFeesToBeneficiaryWad: beneficiary,
7496
- numeraireFeesToLpWad: lp
7497
- };
7498
- }
7499
- function validateRehypeFeeDistributionInfo(feeDistributionInfo) {
7500
- const assetRowTotal = feeDistributionInfo.assetFeesToAssetBuybackWad + feeDistributionInfo.assetFeesToNumeraireBuybackWad + feeDistributionInfo.assetFeesToBeneficiaryWad + feeDistributionInfo.assetFeesToLpWad;
7501
- if (assetRowTotal !== WAD) {
7502
- throw new Error(
7503
- `Rehype asset fee distribution must sum to ${WAD} (100%), but got ${assetRowTotal}`
7504
- );
7505
- }
7506
- const numeraireRowTotal = feeDistributionInfo.numeraireFeesToAssetBuybackWad + feeDistributionInfo.numeraireFeesToNumeraireBuybackWad + feeDistributionInfo.numeraireFeesToBeneficiaryWad + feeDistributionInfo.numeraireFeesToLpWad;
7507
- if (numeraireRowTotal !== WAD) {
7508
- throw new Error(
7509
- `Rehype numeraire fee distribution must sum to ${WAD} (100%), but got ${numeraireRowTotal}`
7510
- );
7511
- }
7512
- }
7513
- function normalizeRehypeDopplerHookMigratorConfig(config) {
7514
- if (!Number.isInteger(config.customFee) || config.customFee < 0) {
7515
- throw new Error("Rehype customFee must be a non-negative integer");
7516
- }
7517
- if (config.customFee > 1e6) {
7518
- throw new Error("Rehype customFee must be <= 1000000 (100%)");
7519
- }
7520
- const feeDistributionInfo = resolveRehypeFeeDistributionInfo2(config);
7521
- validateRehypeFeeDistributionInfo(feeDistributionInfo);
7522
- return {
7523
- buybackDestination: config.buybackDestination,
7524
- customFee: config.customFee,
7525
- feeRoutingMode: normalizeRehypeFeeRoutingMode(config.feeRoutingMode),
7526
- feeDistributionInfo
7527
- };
7528
- }
7529
- function encodeRehypeDopplerHookMigratorCalldata(params) {
7530
- const normalized = normalizeRehypeDopplerHookMigratorConfig(params.config);
7531
- return viem.encodeAbiParameters(
7532
- [
7913
+ },
7533
7914
  {
7915
+ name: "integratorConfig",
7534
7916
  type: "tuple",
7535
- components: [
7536
- { name: "numeraire", type: "address" },
7537
- { name: "buybackDst", type: "address" },
7538
- { name: "customFee", type: "uint24" },
7539
- { name: "feeRoutingMode", type: "uint8" },
7540
- {
7541
- name: "feeDistributionInfo",
7542
- type: "tuple",
7543
- components: [
7544
- { name: "assetFeesToAssetBuybackWad", type: "uint256" },
7545
- { name: "assetFeesToNumeraireBuybackWad", type: "uint256" },
7546
- { name: "assetFeesToBeneficiaryWad", type: "uint256" },
7547
- { name: "assetFeesToLpWad", type: "uint256" },
7548
- { name: "numeraireFeesToAssetBuybackWad", type: "uint256" },
7549
- { name: "numeraireFeesToNumeraireBuybackWad", type: "uint256" },
7550
- { name: "numeraireFeesToBeneficiaryWad", type: "uint256" },
7551
- { name: "numeraireFeesToLpWad", type: "uint256" }
7552
- ]
7553
- }
7554
- ]
7555
- }
7556
- ],
7557
- [
7558
- {
7559
- numeraire: params.numeraire,
7560
- buybackDst: normalized.buybackDestination,
7561
- customFee: normalized.customFee,
7562
- feeRoutingMode: normalized.feeRoutingMode,
7563
- feeDistributionInfo: normalized.feeDistributionInfo
7917
+ components: integratorConfigComponents
7564
7918
  }
7565
7919
  ]
7566
- );
7567
- }
7920
+ }
7921
+ ];
7568
7922
  var AirlockCreateReceiptError = class extends Error {
7569
7923
  code;
7570
7924
  expected;
@@ -8516,6 +8870,18 @@ var DopplerFactory = class {
8516
8870
  schedules,
8517
8871
  scheduleIds
8518
8872
  });
8873
+ if (balanceLimitEnabled && args.governance.type !== "noOp" && args.governance.type !== "launchpad") {
8874
+ const allocatedTokens = amounts.reduce(
8875
+ (total, amount) => total + amount,
8876
+ 0n
8877
+ );
8878
+ const timelockTokens = args.sale.initialSupply - args.sale.numTokensToSell - allocatedTokens;
8879
+ if (timelockTokens > maxBalanceLimit) {
8880
+ throw new Error(
8881
+ `Standard governance would transfer ${timelockTokens} tokens to the governance timelock at creation, exceeding token.maxBalanceLimit (${maxBalanceLimit}). Increase sale.numTokensToSell, add vesting allocations, increase the balance limit, or use no-op or launchpad governance.`
8882
+ );
8883
+ }
8884
+ }
8519
8885
  return {
8520
8886
  kind: "dopplerERC20V1",
8521
8887
  name: args.token.name,
@@ -8550,125 +8916,61 @@ var DopplerFactory = class {
8550
8916
  }
8551
8917
  return [];
8552
8918
  }
8553
- resolveGovernanceFactoryAddress(args) {
8554
- if (args.governance.type === "noOp") {
8555
- const resolved2 = args.modules?.governanceFactory ?? args.addresses.noOpGovernanceFactory ?? ZERO_ADDRESS;
8556
- if (!resolved2 || resolved2 === ZERO_ADDRESS) {
8557
- throw new Error(args.noOpError);
8558
- }
8559
- return resolved2;
8560
- }
8561
- if (args.governance.type === "launchpad") {
8562
- const resolved2 = args.modules?.governanceFactory ?? args.addresses.launchpadGovernanceFactory ?? ZERO_ADDRESS;
8563
- if (!resolved2 || resolved2 === ZERO_ADDRESS) {
8564
- throw new Error(args.launchpadError);
8565
- }
8566
- return resolved2;
8567
- }
8568
- const resolved = args.modules?.governanceFactory ?? args.addresses.governanceFactory;
8569
- if (!resolved || resolved === ZERO_ADDRESS) {
8570
- throw new Error(args.standardError);
8571
- }
8572
- return resolved;
8573
- }
8574
- shouldAutoExcludeGovernanceTimelock(args) {
8575
- if (args.governance.type !== "default" && args.governance.type !== "custom") {
8576
- return false;
8577
- }
8578
- if (args.modules?.governanceFactory) {
8579
- return false;
8580
- }
8581
- const noOpGovernanceFactory = args.addresses.noOpGovernanceFactory;
8582
- return !noOpGovernanceFactory || args.governanceFactory.toLowerCase() !== noOpGovernanceFactory.toLowerCase();
8583
- }
8584
- resolveMigrationLockerBalanceLimitExclusions(migration, addresses) {
8585
- if ((migration.type === "uniswapV4" || migration.type === "uniswapV4Split") && migration.streamableFees) {
8586
- return [addresses.streamableFeesLocker];
8587
- }
8588
- if (isDopplerHookMigratorConfig(migration)) {
8589
- return [
8590
- addresses.streamableFeesLockerV2 ?? addresses.streamableFeesLocker
8591
- ];
8592
- }
8593
- return [];
8594
- }
8595
- withDopplerERC20V1EncodedBalanceLimitExclusions(tokenFactoryData, exclusions) {
8596
- const decoded = viem.decodeAbiParameters(
8597
- [
8598
- { type: "string" },
8599
- { type: "string" },
8600
- {
8601
- type: "tuple[]",
8602
- components: [
8603
- { type: "uint64", name: "cliff" },
8604
- { type: "uint64", name: "duration" }
8605
- ]
8606
- },
8607
- { type: "address[]" },
8608
- { type: "uint256[]" },
8609
- { type: "uint256[]" },
8610
- { type: "string" },
8611
- { type: "uint256" },
8612
- { type: "uint48" },
8613
- { type: "address" },
8614
- { type: "address[]" }
8615
- ],
8616
- tokenFactoryData
8617
- );
8618
- if (decoded[7] === 0n && decoded[8] === 0) {
8619
- return tokenFactoryData;
8620
- }
8621
- return viem.encodeAbiParameters(
8622
- [
8623
- { type: "string" },
8624
- { type: "string" },
8625
- {
8626
- type: "tuple[]",
8627
- components: [
8628
- { type: "uint64", name: "cliff" },
8629
- { type: "uint64", name: "duration" }
8630
- ]
8631
- },
8632
- { type: "address[]" },
8633
- { type: "uint256[]" },
8634
- { type: "uint256[]" },
8635
- { type: "string" },
8636
- { type: "uint256" },
8637
- { type: "uint48" },
8638
- { type: "address" },
8639
- { type: "address[]" }
8640
- ],
8641
- [
8642
- decoded[0],
8643
- decoded[1],
8644
- decoded[2],
8645
- decoded[3],
8646
- decoded[4],
8647
- decoded[5],
8648
- decoded[6],
8649
- decoded[7],
8650
- decoded[8],
8651
- decoded[9],
8652
- this.mergeDopplerERC20V1BalanceLimitExclusions(decoded[10], exclusions)
8653
- ]
8654
- );
8919
+ governanceDuration(token, seconds) {
8920
+ if (token.type !== "standard") {
8921
+ return seconds;
8922
+ }
8923
+ switch (this.chainId) {
8924
+ case CHAIN_IDS.MAINNET:
8925
+ case CHAIN_IDS.ARBITRUM:
8926
+ return Math.ceil(seconds / 12);
8927
+ case CHAIN_IDS.BASE:
8928
+ case CHAIN_IDS.BASE_SEPOLIA:
8929
+ return Math.ceil(seconds / 2);
8930
+ case CHAIN_IDS.INK:
8931
+ case CHAIN_IDS.UNICHAIN:
8932
+ case CHAIN_IDS.UNICHAIN_SEPOLIA:
8933
+ return seconds;
8934
+ case CHAIN_IDS.MONAD_MAINNET:
8935
+ case CHAIN_IDS.MONAD_TESTNET:
8936
+ return Math.ceil(seconds * 1e3 / 400);
8937
+ default:
8938
+ throw new Error(
8939
+ "Legacy token governance clock cadence is unknown on this chain. Use custom governance with explicit token-clock voting delay and period."
8940
+ );
8941
+ }
8655
8942
  }
8656
- withSimulationGovernanceTimelockExclusion(args) {
8657
- if (!this.isDopplerERC20V1Token(args.token) || !this.usesDefaultDopplerERC20V1Integration(args.modules) || args.simResult.length < 4 || !this.shouldAutoExcludeGovernanceTimelock({
8658
- governance: args.governance,
8659
- governanceFactory: args.createParams.governanceFactory,
8660
- modules: args.modules,
8661
- addresses: args.addresses
8662
- })) {
8663
- return args.createParams;
8943
+ resolveGovernanceFactoryAddress(args) {
8944
+ if (args.governance.type === "noOp") {
8945
+ const resolved2 = args.modules?.governanceFactory ?? args.addresses.noOpGovernanceFactory ?? ZERO_ADDRESS;
8946
+ if (!resolved2 || resolved2 === ZERO_ADDRESS) {
8947
+ throw new Error(args.noOpError);
8948
+ }
8949
+ return resolved2;
8664
8950
  }
8665
- return {
8666
- ...args.createParams,
8667
- tokenFactoryData: this.withDopplerERC20V1EncodedBalanceLimitExclusions(
8668
- args.createParams.tokenFactoryData,
8669
- [args.simResult[3]]
8670
- )
8671
- };
8951
+ if (args.governance.type === "launchpad") {
8952
+ const resolved2 = args.modules?.governanceFactory ?? args.addresses.launchpadGovernanceFactory ?? ZERO_ADDRESS;
8953
+ if (!resolved2 || resolved2 === ZERO_ADDRESS) {
8954
+ throw new Error(args.launchpadError);
8955
+ }
8956
+ return resolved2;
8957
+ }
8958
+ const resolved = args.modules?.governanceFactory ?? args.addresses.governanceFactory;
8959
+ if (!resolved || resolved === ZERO_ADDRESS) {
8960
+ throw new Error(args.standardError);
8961
+ }
8962
+ return resolved;
8963
+ }
8964
+ resolveMigrationLockerBalanceLimitExclusions(migration, addresses) {
8965
+ if ((migration.type === "uniswapV4" || migration.type === "uniswapV4Split") && migration.streamableFees) {
8966
+ return [addresses.streamableFeesLocker];
8967
+ }
8968
+ if (isDopplerHookMigratorConfig(migration)) {
8969
+ return [
8970
+ addresses.streamableFeesLockerV2 ?? addresses.streamableFeesLocker
8971
+ ];
8972
+ }
8973
+ return [];
8672
8974
  }
8673
8975
  withDopplerERC20V1BalanceLimitExclusions(tokenFactoryData, exclusions) {
8674
8976
  if (!this.isDopplerERC20V1BalanceLimitActive(tokenFactoryData)) {
@@ -9106,7 +9408,6 @@ var DopplerFactory = class {
9106
9408
  );
9107
9409
  }
9108
9410
  const liquidityMigratorData = this.encodeMigrationData(params.migration, {
9109
- numeraire: params.sale.numeraire,
9110
9411
  overrides: params.modules
9111
9412
  });
9112
9413
  const resolvedTokenFactory = params.modules?.tokenFactory ?? (this.isDoppler404Token(params.token) ? addresses.doppler404Factory : this.isDopplerERC20V1Token(params.token) ? params.modules?.dopplerERC20V1Factory ?? addresses.dopplerERC20V1Factory : this.usesDerc20V2Vesting(params.vesting) ? addresses.derc20V2Factory : addresses.tokenFactory);
@@ -9165,6 +9466,7 @@ var DopplerFactory = class {
9165
9466
  sale: params.sale,
9166
9467
  vesting: params.vesting,
9167
9468
  userAddress: params.userAddress,
9469
+ governance: params.governance,
9168
9470
  addresses,
9169
9471
  modules: params.modules,
9170
9472
  protocolBalanceLimitExclusions: includeProtocolBalanceLimitExclusions ? [
@@ -9214,8 +9516,14 @@ var DopplerFactory = class {
9214
9516
  ],
9215
9517
  [
9216
9518
  params.token.name,
9217
- params.governance.type === "custom" ? params.governance.initialVotingDelay : DEFAULT_V3_INITIAL_VOTING_DELAY,
9218
- params.governance.type === "custom" ? params.governance.initialVotingPeriod : DEFAULT_V3_INITIAL_VOTING_PERIOD,
9519
+ params.governance.type === "custom" ? params.governance.initialVotingDelay : this.governanceDuration(
9520
+ params.token,
9521
+ DEFAULT_V3_INITIAL_VOTING_DELAY
9522
+ ),
9523
+ params.governance.type === "custom" ? params.governance.initialVotingPeriod : this.governanceDuration(
9524
+ params.token,
9525
+ DEFAULT_V3_INITIAL_VOTING_PERIOD
9526
+ ),
9219
9527
  params.governance.type === "custom" ? params.governance.initialProposalThreshold : DEFAULT_V3_INITIAL_PROPOSAL_THRESHOLD
9220
9528
  ]
9221
9529
  );
@@ -9473,14 +9781,7 @@ var DopplerFactory = class {
9473
9781
  const isToken0 = BigInt(tokenAddress) < numeraireBigInt;
9474
9782
  const wantToken0 = isToken0Expected(params.sale.numeraire);
9475
9783
  if (wantToken0 && isToken0 || !wantToken0 && !isToken0) {
9476
- return this.withSimulationGovernanceTimelockExclusion({
9477
- createParams,
9478
- simResult,
9479
- token: params.token,
9480
- governance: params.governance,
9481
- modules: params.modules,
9482
- addresses
9483
- });
9784
+ return createParams;
9484
9785
  }
9485
9786
  attempt += 1n;
9486
9787
  const incrementedAccount = viem.toHex(
@@ -9573,6 +9874,7 @@ var DopplerFactory = class {
9573
9874
  vesting: params.vesting,
9574
9875
  userAddress: params.userAddress,
9575
9876
  addresses,
9877
+ governance: params.governance,
9576
9878
  modules: params.modules,
9577
9879
  protocolBalanceLimitExclusions: includeProtocolBalanceLimitExclusions ? [
9578
9880
  poolInitializerAddress,
@@ -9618,7 +9920,6 @@ var DopplerFactory = class {
9618
9920
  includeProtocolBalanceLimitExclusions
9619
9921
  });
9620
9922
  const liquidityMigratorData = this.encodeMigrationData(params.migration, {
9621
- numeraire: params.sale.numeraire,
9622
9923
  overrides: params.modules
9623
9924
  });
9624
9925
  const governanceFactoryData = (() => {
@@ -9640,8 +9941,14 @@ var DopplerFactory = class {
9640
9941
  ],
9641
9942
  [
9642
9943
  params.token.name,
9643
- params.governance.type === "custom" ? params.governance.initialVotingDelay : DEFAULT_V4_INITIAL_VOTING_DELAY,
9644
- params.governance.type === "custom" ? params.governance.initialVotingPeriod : DEFAULT_V4_INITIAL_VOTING_PERIOD,
9944
+ params.governance.type === "custom" ? params.governance.initialVotingDelay : this.governanceDuration(
9945
+ params.token,
9946
+ DEFAULT_V4_INITIAL_VOTING_DELAY
9947
+ ),
9948
+ params.governance.type === "custom" ? params.governance.initialVotingPeriod : this.governanceDuration(
9949
+ params.token,
9950
+ DEFAULT_V4_INITIAL_VOTING_PERIOD
9951
+ ),
9645
9952
  params.governance.type === "custom" ? params.governance.initialProposalThreshold : DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD
9646
9953
  ]
9647
9954
  );
@@ -9779,22 +10086,14 @@ var DopplerFactory = class {
9779
10086
  tickSpacing: params.pool.tickSpacing,
9780
10087
  hooks: hookAddress
9781
10088
  });
9782
- const createParamsWithTimelock = this.withSimulationGovernanceTimelockExclusion({
9783
- createParams,
9784
- simResult,
9785
- token: params.token,
9786
- governance: params.governance,
9787
- modules: params.modules,
9788
- addresses
9789
- });
9790
10089
  return {
9791
- createParams: createParamsWithTimelock,
10090
+ createParams,
9792
10091
  hookAddress,
9793
10092
  tokenAddress,
9794
10093
  poolId: poolId2,
9795
10094
  gasEstimate,
9796
10095
  execute: () => this.createDynamicAuction(params, {
9797
- _createParams: createParamsWithTimelock
10096
+ _createParams: createParams
9798
10097
  })
9799
10098
  };
9800
10099
  }
@@ -9941,6 +10240,7 @@ var DopplerFactory = class {
9941
10240
  vesting: params.vesting,
9942
10241
  userAddress: params.userAddress,
9943
10242
  addresses,
10243
+ governance: params.governance,
9944
10244
  modules: params.modules,
9945
10245
  protocolBalanceLimitExclusions: includeProtocolBalanceLimitExclusions ? [
9946
10246
  openingAuctionInitializer,
@@ -9985,7 +10285,6 @@ var DopplerFactory = class {
9985
10285
  includeProtocolBalanceLimitExclusions
9986
10286
  });
9987
10287
  const liquidityMigratorData = this.encodeMigrationData(params.migration, {
9988
- numeraire: params.sale.numeraire,
9989
10288
  overrides: params.modules
9990
10289
  });
9991
10290
  const governanceFactoryData = (() => {
@@ -10007,8 +10306,14 @@ var DopplerFactory = class {
10007
10306
  ],
10008
10307
  [
10009
10308
  params.token.name,
10010
- params.governance.type === "custom" ? params.governance.initialVotingDelay : DEFAULT_V4_INITIAL_VOTING_DELAY,
10011
- params.governance.type === "custom" ? params.governance.initialVotingPeriod : DEFAULT_V4_INITIAL_VOTING_PERIOD,
10309
+ params.governance.type === "custom" ? params.governance.initialVotingDelay : this.governanceDuration(
10310
+ params.token,
10311
+ DEFAULT_V4_INITIAL_VOTING_DELAY
10312
+ ),
10313
+ params.governance.type === "custom" ? params.governance.initialVotingPeriod : this.governanceDuration(
10314
+ params.token,
10315
+ DEFAULT_V4_INITIAL_VOTING_PERIOD
10316
+ ),
10012
10317
  params.governance.type === "custom" ? params.governance.initialProposalThreshold : DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD
10013
10318
  ]
10014
10319
  );
@@ -10067,22 +10372,14 @@ var DopplerFactory = class {
10067
10372
  if (!simResult || !Array.isArray(simResult) || simResult.length < 2) {
10068
10373
  throw new Error("Failed to simulate opening auction create");
10069
10374
  }
10070
- const createParamsWithTimelock = this.withSimulationGovernanceTimelockExclusion({
10071
- createParams,
10072
- simResult,
10073
- token: params.token,
10074
- governance: params.governance,
10075
- modules: params.modules,
10076
- addresses
10077
- });
10078
10375
  return {
10079
- createParams: createParamsWithTimelock,
10376
+ createParams,
10080
10377
  openingAuctionHookAddress: simResult[1],
10081
10378
  tokenAddress: simResult[0],
10082
10379
  minedSalt,
10083
10380
  gasEstimate,
10084
10381
  execute: () => this.createOpeningAuction(params, {
10085
- _createParams: createParamsWithTimelock,
10382
+ _createParams: createParams,
10086
10383
  _minedSalt: minedSalt
10087
10384
  })
10088
10385
  };
@@ -10974,11 +11271,6 @@ var DopplerFactory = class {
10974
11271
  case "dopplerHook":
10975
11272
  case "dopplerHookMigrator": {
10976
11273
  const dopplerHookMigratorConfig = config;
10977
- if (dopplerHookMigratorConfig.hook && dopplerHookMigratorConfig.rehype) {
10978
- throw new Error(
10979
- "dopplerHookMigrator migration cannot set both hook and rehype config. Use exactly one hook mode."
10980
- );
10981
- }
10982
11274
  const beneficiaries = sortBeneficiaries(
10983
11275
  dopplerHookMigratorConfig.beneficiaries
10984
11276
  );
@@ -10987,24 +11279,6 @@ var DopplerFactory = class {
10987
11279
  if (dopplerHookMigratorConfig.hook) {
10988
11280
  dopplerHookAddress = dopplerHookMigratorConfig.hook.hookAddress;
10989
11281
  onInitializationCalldata = dopplerHookMigratorConfig.hook.onInitializationCalldata ?? "0x";
10990
- } else if (dopplerHookMigratorConfig.rehype) {
10991
- const addresses = getAddresses(this.chainId);
10992
- const resolvedRehypeHookAddress = dopplerHookMigratorConfig.rehype.hookAddress ?? options?.overrides?.rehypeDopplerHookMigrator ?? addresses.rehypeDopplerHookMigrator;
10993
- if (!resolvedRehypeHookAddress) {
10994
- throw new Error(
10995
- "RehypeDopplerHookMigrator address not configured on this chain. Provide migration.rehype.hookAddress or override modules.rehypeDopplerHookMigrator."
10996
- );
10997
- }
10998
- if (!options?.numeraire) {
10999
- throw new Error(
11000
- "numeraire is required to encode rehype dopplerHookMigrator migration data"
11001
- );
11002
- }
11003
- dopplerHookAddress = resolvedRehypeHookAddress;
11004
- onInitializationCalldata = encodeRehypeDopplerHookMigratorCalldata({
11005
- numeraire: options.numeraire,
11006
- config: dopplerHookMigratorConfig.rehype
11007
- });
11008
11282
  }
11009
11283
  const proceedsRecipient = dopplerHookMigratorConfig.proceedsSplit?.recipient ?? ZERO_ADDRESS;
11010
11284
  const proceedsShare = dopplerHookMigratorConfig.proceedsSplit?.share ?? 0n;
@@ -11283,7 +11557,9 @@ var DopplerFactory = class {
11283
11557
  const useDecayInitializer = initializerMode.type === "decay";
11284
11558
  const useDopplerHookInitializer = initializerMode.type === "dopplerHook";
11285
11559
  const normalizedRehypeHookConfig = initializerMode.type === "dopplerHook" && initializerMode.hookConfig ? normalizeRehypeDopplerHookInitializerConfig(
11286
- initializerMode.hookConfig
11560
+ initializerMode.hookConfig,
11561
+ void 0,
11562
+ params.integrator
11287
11563
  ) : void 0;
11288
11564
  const curveComponents = [
11289
11565
  { type: "int24", name: "tickLower" },
@@ -11505,8 +11781,14 @@ var DopplerFactory = class {
11505
11781
  ],
11506
11782
  [
11507
11783
  params.token.name,
11508
- params.governance.type === "custom" ? params.governance.initialVotingDelay : DEFAULT_V4_INITIAL_VOTING_DELAY,
11509
- params.governance.type === "custom" ? params.governance.initialVotingPeriod : DEFAULT_V4_INITIAL_VOTING_PERIOD,
11784
+ params.governance.type === "custom" ? params.governance.initialVotingDelay : this.governanceDuration(
11785
+ params.token,
11786
+ DEFAULT_V4_INITIAL_VOTING_DELAY
11787
+ ),
11788
+ params.governance.type === "custom" ? params.governance.initialVotingPeriod : this.governanceDuration(
11789
+ params.token,
11790
+ DEFAULT_V4_INITIAL_VOTING_PERIOD
11791
+ ),
11510
11792
  params.governance.type === "custom" ? params.governance.initialProposalThreshold : DEFAULT_V4_INITIAL_PROPOSAL_THRESHOLD
11511
11793
  ]
11512
11794
  );
@@ -11552,7 +11834,6 @@ var DopplerFactory = class {
11552
11834
  }
11553
11835
  } else {
11554
11836
  liquidityMigratorData = this.encodeMigrationData(params.migration, {
11555
- numeraire: params.sale.numeraire,
11556
11837
  overrides: params.modules
11557
11838
  });
11558
11839
  resolvedMigrator = this.getMigratorAddress(
@@ -11573,6 +11854,7 @@ var DopplerFactory = class {
11573
11854
  vesting: params.vesting,
11574
11855
  userAddress: params.userAddress,
11575
11856
  addresses,
11857
+ governance: params.governance,
11576
11858
  modules: params.modules,
11577
11859
  protocolBalanceLimitExclusions: includeProtocolBalanceLimitExclusions ? [
11578
11860
  resolvedInitializer,
@@ -11691,48 +11973,20 @@ var DopplerFactory = class {
11691
11973
  const { params, simulationAccount } = args;
11692
11974
  const addresses = getAddresses(this.chainId);
11693
11975
  const airlock = params.modules?.airlock ?? addresses.airlock;
11694
- const initialCreateParams = args.createParams ?? this.encodeCreateMulticurveParams(params);
11976
+ const createParams = args.createParams ?? this.encodeCreateMulticurveParams(params);
11695
11977
  if (!params.devBuy) {
11696
- const initialSimulation = await this.publicClient.simulateContract({
11978
+ const simulation2 = await this.publicClient.simulateContract({
11697
11979
  address: airlock,
11698
11980
  abi: airlockAbi,
11699
11981
  functionName: "create",
11700
- args: [{ ...initialCreateParams }],
11982
+ args: [{ ...createParams }],
11701
11983
  account: simulationAccount
11702
11984
  });
11703
- const initialResult = initialSimulation.result;
11704
- if (!initialResult || !Array.isArray(initialResult) || initialResult.length < 5) {
11985
+ const result2 = simulation2.result;
11986
+ if (!result2 || !Array.isArray(result2) || result2.length < 5) {
11705
11987
  throw new Error("Failed to simulate multicurve create");
11706
11988
  }
11707
- let createParams2 = initialCreateParams;
11708
- let request = initialSimulation.request;
11709
- let result2 = initialResult;
11710
- if (!args.createParams) {
11711
- const enrichedCreateParams = this.withSimulationGovernanceTimelockExclusion({
11712
- createParams: createParams2,
11713
- simResult: initialResult,
11714
- token: params.token,
11715
- governance: params.governance,
11716
- modules: params.modules,
11717
- addresses
11718
- });
11719
- if (enrichedCreateParams.tokenFactoryData !== createParams2.tokenFactoryData) {
11720
- createParams2 = enrichedCreateParams;
11721
- const finalSimulation = await this.publicClient.simulateContract({
11722
- address: airlock,
11723
- abi: airlockAbi,
11724
- functionName: "create",
11725
- args: [{ ...createParams2 }],
11726
- account: simulationAccount
11727
- });
11728
- const finalResult = finalSimulation.result;
11729
- if (!finalResult || !Array.isArray(finalResult) || finalResult.length < 5) {
11730
- throw new Error("Failed to simulate enriched multicurve create");
11731
- }
11732
- request = finalSimulation.request;
11733
- result2 = finalResult;
11734
- }
11735
- }
11989
+ const request = simulation2.request;
11736
11990
  const tokenAddress = result2[0];
11737
11991
  const poolIdentity = await this.computeMulticurvePoolIdentity(
11738
11992
  params,
@@ -11746,45 +12000,18 @@ var DopplerFactory = class {
11746
12000
  migrationPoolAddress: result2[4],
11747
12001
  ...poolIdentity
11748
12002
  };
11749
- return { airlock, createParams: createParams2, prediction: prediction2, request };
12003
+ return { airlock, createParams, prediction: prediction2, request };
11750
12004
  }
11751
12005
  this.validateMulticurveDevBuy(params.devBuy);
11752
12006
  const bundler = this.resolveBundlerAddress(params);
11753
12007
  await this.ensureDevBuyInitializerCompatibility({ params, bundler });
11754
- let createParams = initialCreateParams;
11755
- const initialBundleSimulation = await this.publicClient.simulateContract({
12008
+ const simulation = await this.publicClient.simulateContract({
11756
12009
  address: bundler,
11757
12010
  abi: bundlerAbi,
11758
12011
  functionName: "simulateBundle",
11759
12012
  args: [{ ...createParams }, params.devBuy.exactAmountIn]
11760
12013
  });
11761
- let result = this.parseBundleSimulation(initialBundleSimulation.result);
11762
- if (!args.createParams) {
11763
- const enrichedCreateParams = this.withSimulationGovernanceTimelockExclusion({
11764
- createParams,
11765
- simResult: [
11766
- result.asset,
11767
- result.poolKey.hooks,
11768
- result.governance,
11769
- result.timelock,
11770
- ZERO_ADDRESS
11771
- ],
11772
- token: params.token,
11773
- governance: params.governance,
11774
- modules: params.modules,
11775
- addresses
11776
- });
11777
- if (enrichedCreateParams.tokenFactoryData !== createParams.tokenFactoryData) {
11778
- createParams = enrichedCreateParams;
11779
- const finalBundleSimulation = await this.publicClient.simulateContract({
11780
- address: bundler,
11781
- abi: bundlerAbi,
11782
- functionName: "simulateBundle",
11783
- args: [{ ...createParams }, params.devBuy.exactAmountIn]
11784
- });
11785
- result = this.parseBundleSimulation(finalBundleSimulation.result);
11786
- }
11787
- }
12014
+ const result = this.parseBundleSimulation(simulation.result);
11788
12015
  const currency0 = result.poolKey.currency0.toLowerCase();
11789
12016
  const currency1 = result.poolKey.currency1.toLowerCase();
11790
12017
  const asset = result.asset.toLowerCase();
@@ -12478,14 +12705,6 @@ var DopplerFactory = class {
12478
12705
  "DopplerHook migration lockDuration must fit within uint32"
12479
12706
  );
12480
12707
  }
12481
- if (migration.hook && migration.rehype) {
12482
- throw new Error(
12483
- "dopplerHookMigrator migration cannot set both hook and rehype config. Use exactly one hook mode."
12484
- );
12485
- }
12486
- if (migration.rehype) {
12487
- normalizeRehypeDopplerHookMigratorConfig(migration.rehype);
12488
- }
12489
12708
  this.validateProceedsSplitConfig(
12490
12709
  migration.proceedsSplit,
12491
12710
  "DopplerHook migration"
@@ -13197,6 +13416,34 @@ var DopplerFactory = class {
13197
13416
  };
13198
13417
  }
13199
13418
  };
13419
+ function normalizeAirlockAssetData(rawAssetData, context = "Airlock getAssetData") {
13420
+ const addressField = (name, index) => parseAddress(
13421
+ readContractResultField(rawAssetData, [name], index, context),
13422
+ context,
13423
+ name
13424
+ );
13425
+ return {
13426
+ numeraire: addressField("numeraire", 0),
13427
+ timelock: addressField("timelock", 1),
13428
+ governance: addressField("governance", 2),
13429
+ liquidityMigrator: addressField("liquidityMigrator", 3),
13430
+ poolInitializer: addressField("poolInitializer", 4),
13431
+ poolOrHook: parseAddress(
13432
+ readContractResultField(rawAssetData, ["poolOrHook", "pool"], 5, context),
13433
+ context,
13434
+ "poolOrHook"
13435
+ ),
13436
+ migrationPool: addressField("migrationPool", 6),
13437
+ numTokensToSell: parseBigIntField(
13438
+ rawAssetData,
13439
+ "numTokensToSell",
13440
+ 7,
13441
+ context
13442
+ ),
13443
+ totalSupply: parseBigIntField(rawAssetData, "totalSupply", 8, context),
13444
+ integrator: addressField("integrator", 9)
13445
+ };
13446
+ }
13200
13447
  function parseAirlockPoolOrHook(rawAssetData, context = "Airlock getAssetData") {
13201
13448
  const rawPoolOrHook = readContractResultField(
13202
13449
  rawAssetData,
@@ -13282,6 +13529,35 @@ function normalizeRehypeFeeSchedule(rawSchedule, context = "Rehype getFeeSchedul
13282
13529
  )
13283
13530
  };
13284
13531
  }
13532
+ function normalizeRehypeIntegratorRoutingConfig(rawConfig, context = "Rehype getIntegratorRoutingConfig") {
13533
+ return {
13534
+ integrator: parseAddressField(rawConfig, "integrator", 0, context),
13535
+ assetFeesToNumeraireRatio: parseNumberField(
13536
+ rawConfig,
13537
+ "assetFeesToNumeraireRatio",
13538
+ 1,
13539
+ context
13540
+ ),
13541
+ numeraireFeesToAssetRatio: parseNumberField(
13542
+ rawConfig,
13543
+ "numeraireFeesToAssetRatio",
13544
+ 2,
13545
+ context
13546
+ ),
13547
+ automaticPayout: parseBooleanField(
13548
+ rawConfig,
13549
+ "automaticPayout",
13550
+ 3,
13551
+ context
13552
+ )
13553
+ };
13554
+ }
13555
+ function normalizeRehypeIntegratorFees(rawFees, context) {
13556
+ return {
13557
+ fees0: parseBigIntField(rawFees, "fees0", 0, context),
13558
+ fees1: parseBigIntField(rawFees, "fees1", 1, context)
13559
+ };
13560
+ }
13285
13561
  function normalizeRehypeHookFees(rawFees, context = "Rehype getHookFees") {
13286
13562
  return {
13287
13563
  fees0: parseBigIntField(rawFees, "fees0", 0, context),
@@ -13310,14 +13586,6 @@ function normalizeRehypePoolInfo(rawInfo, context = "Rehype getPoolInfo") {
13310
13586
  buybackDst: parseAddressField(rawInfo, "buybackDst", 2, context)
13311
13587
  };
13312
13588
  }
13313
- function normalizeRehypePosition(rawPosition, context = "Rehype getPosition") {
13314
- return {
13315
- tickLower: parseNumberField(rawPosition, "tickLower", 0, context),
13316
- tickUpper: parseNumberField(rawPosition, "tickUpper", 1, context),
13317
- liquidity: parseBigIntField(rawPosition, "liquidity", 2, context),
13318
- salt: parseHexField(rawPosition, "salt", 3, context)
13319
- };
13320
- }
13321
13589
  function parseAddressField(rawResult, fieldName, tupleIndex, context) {
13322
13590
  const rawField = readContractResultField(
13323
13591
  rawResult,
@@ -13362,17 +13630,17 @@ function parseNumberField(rawResult, fieldName, tupleIndex, context) {
13362
13630
  }
13363
13631
  return numericField;
13364
13632
  }
13365
- function parseHexField(rawResult, fieldName, tupleIndex, context) {
13633
+ function parseBooleanField(rawResult, fieldName, tupleIndex, context) {
13366
13634
  const rawField = readContractResultField(
13367
13635
  rawResult,
13368
13636
  [fieldName],
13369
13637
  tupleIndex,
13370
13638
  context
13371
13639
  );
13372
- if (typeof rawField === "string" && viem.isHex(rawField)) {
13373
- return rawField;
13640
+ if (typeof rawField !== "boolean") {
13641
+ throw new Error(`${context}: ${fieldName} must be a boolean`);
13374
13642
  }
13375
- throw new Error(`${context}: ${fieldName} must be hex`);
13643
+ return rawField;
13376
13644
  }
13377
13645
  function parseAddress(rawField, context, fieldName) {
13378
13646
  if (typeof rawField === "string" && viem.isAddress(rawField, { strict: false })) {
@@ -13778,9 +14046,25 @@ var ABSENT_POOL_ERROR_ABI = [
13778
14046
  async function findMulticurveInitializerForPool({
13779
14047
  client,
13780
14048
  tokenAddress,
13781
- addresses
14049
+ addresses,
14050
+ recordedInitializer
13782
14051
  }) {
13783
- const initializersToTry = getMulticurveInitializerCandidates(addresses);
14052
+ const configuredInitializers = getMulticurveInitializerCandidates(addresses);
14053
+ const initializersToTry = recordedInitializer === void 0 ? configuredInitializers : [
14054
+ {
14055
+ address: recordedInitializer,
14056
+ kind: "dopplerHook",
14057
+ probeAlternateLayout: true
14058
+ },
14059
+ {
14060
+ address: recordedInitializer,
14061
+ kind: "standard",
14062
+ probeAlternateLayout: true
14063
+ },
14064
+ ...configuredInitializers.filter(
14065
+ ({ address }) => address.toLowerCase() !== recordedInitializer.toLowerCase()
14066
+ )
14067
+ ];
13784
14068
  if (initializersToTry.length === 0) {
13785
14069
  throw new Error(
13786
14070
  "No V4 multicurve initializer addresses configured for this chain"
@@ -13800,23 +14084,33 @@ async function findMulticurveInitializerForPool({
13800
14084
  args: [tokenAddress]
13801
14085
  });
13802
14086
  } catch (error) {
13803
- if (!isAbsentPoolReadFailure(error)) {
14087
+ if (!initializer.probeAlternateLayout && !isAbsentPoolReadFailure(error)) {
13804
14088
  throw error;
13805
14089
  }
13806
14090
  const reason = error instanceof Error ? error.message : String(error);
13807
14091
  failedInitializers.push(
13808
- new Error(`${initializerAddress} getState failed: ${reason}`)
14092
+ new Error(`${initializerAddress} ${kind} getState failed: ${reason}`)
13809
14093
  );
13810
14094
  continue;
13811
14095
  }
13812
- const discoveryResult = parseMulticurveInitializerDiscoveryResult({
13813
- tokenAddress,
13814
- initializerAddress,
13815
- kind,
13816
- stateData
13817
- });
13818
- if (isInitializedMulticurvePoolKey(discoveryResult.state.poolKey)) {
13819
- return discoveryResult;
14096
+ try {
14097
+ const discoveryResult = parseMulticurveInitializerDiscoveryResult({
14098
+ tokenAddress,
14099
+ initializerAddress,
14100
+ kind,
14101
+ stateData
14102
+ });
14103
+ if (isInitializedMulticurvePoolKey(discoveryResult.state.poolKey)) {
14104
+ return discoveryResult;
14105
+ }
14106
+ } catch (error) {
14107
+ if (!initializer.probeAlternateLayout) {
14108
+ throw error;
14109
+ }
14110
+ const reason = error instanceof Error ? error.message : String(error);
14111
+ failedInitializers.push(
14112
+ new Error(`${initializerAddress} ${kind} decode failed: ${reason}`)
14113
+ );
13820
14114
  }
13821
14115
  }
13822
14116
  const notFoundError = new Error(
@@ -14323,13 +14617,15 @@ var MulticurvePool = class {
14323
14617
  client;
14324
14618
  walletClient;
14325
14619
  tokenAddress;
14620
+ recordedInitializer;
14326
14621
  get rpc() {
14327
14622
  return this.client;
14328
14623
  }
14329
- constructor(client, walletClient, tokenAddress) {
14624
+ constructor(client, walletClient, tokenAddress, recordedInitializer) {
14330
14625
  this.client = client;
14331
14626
  this.walletClient = walletClient;
14332
14627
  this.tokenAddress = tokenAddress;
14628
+ this.recordedInitializer = recordedInitializer;
14333
14629
  }
14334
14630
  /**
14335
14631
  * Get the token address for this pool
@@ -14362,7 +14658,8 @@ var MulticurvePool = class {
14362
14658
  return findMulticurveInitializerForPool({
14363
14659
  client: this.rpc,
14364
14660
  tokenAddress: this.tokenAddress,
14365
- addresses
14661
+ addresses,
14662
+ recordedInitializer: this.recordedInitializer
14366
14663
  });
14367
14664
  }
14368
14665
  /**
@@ -14615,12 +14912,11 @@ function getTokenBatchSize(tokenBatchSize) {
14615
14912
  }
14616
14913
  return tokenBatchSize;
14617
14914
  }
14618
-
14619
- // src/evm/entities/auction/RehypeDopplerHookInitializer.ts
14620
14915
  var rehypeFeesManagerAbi = [
14621
14916
  ...feesManagerAbi,
14622
14917
  { type: "error", name: "FeeBeneficiariesNotConfigured", inputs: [] }
14623
14918
  ];
14919
+ var INTEGRATOR_CONVERSION_RATIO_DENOMINATOR = 1e9;
14624
14920
  var RehypeDopplerHookInitializer = class {
14625
14921
  client;
14626
14922
  walletClient;
@@ -14782,134 +15078,138 @@ var RehypeDopplerHookInitializer = class {
14782
15078
  });
14783
15079
  return normalizeRehypeFeeSchedule(result);
14784
15080
  }
14785
- async getHookFees(poolId2) {
15081
+ async getIntegratorFeeShare(poolId2) {
14786
15082
  const result = await this.rpc.readContract({
14787
15083
  address: this.hookAddress,
14788
15084
  abi: rehypeDopplerHookInitializerAbi,
14789
- functionName: "getHookFees",
15085
+ functionName: "getIntegratorFeeShare",
14790
15086
  args: [poolId2]
14791
15087
  });
14792
- return normalizeRehypeHookFees(result);
15088
+ return Number(result);
14793
15089
  }
14794
- async getPoolInfo(poolId2) {
15090
+ async getIntegratorRoutingConfig(poolId2) {
14795
15091
  const result = await this.rpc.readContract({
14796
15092
  address: this.hookAddress,
14797
15093
  abi: rehypeDopplerHookInitializerAbi,
14798
- functionName: "getPoolInfo",
15094
+ functionName: "getIntegratorRoutingConfig",
14799
15095
  args: [poolId2]
14800
15096
  });
14801
- return normalizeRehypePoolInfo(result);
14802
- }
14803
- requireWalletClient(message) {
14804
- if (!this.walletClient) {
14805
- throw new Error(message);
14806
- }
14807
- return this.walletClient;
14808
- }
14809
- };
14810
-
14811
- // src/evm/entities/auction/RehypeDopplerHook.ts
14812
- var RehypeDopplerHook = RehypeDopplerHookInitializer;
14813
-
14814
- // src/evm/entities/auction/RehypeDopplerHookMigrator.ts
14815
- var RehypeDopplerHookMigrator = class {
14816
- client;
14817
- walletClient;
14818
- hookAddress;
14819
- get rpc() {
14820
- return this.client;
15097
+ return normalizeRehypeIntegratorRoutingConfig(result);
14821
15098
  }
14822
- constructor(client, walletClient, hookAddress) {
14823
- this.client = client;
14824
- this.walletClient = walletClient;
14825
- this.hookAddress = hookAddress;
14826
- }
14827
- getAddress() {
14828
- return this.hookAddress;
15099
+ async getPendingIntegratorFees(poolId2) {
15100
+ const result = await this.rpc.readContract({
15101
+ address: this.hookAddress,
15102
+ abi: rehypeDopplerHookInitializerAbi,
15103
+ functionName: "getPendingIntegratorFees",
15104
+ args: [poolId2]
15105
+ });
15106
+ return normalizeRehypeIntegratorFees(
15107
+ result,
15108
+ "Rehype getPendingIntegratorFees"
15109
+ );
14829
15110
  }
14830
- async collectFees(asset) {
14831
- if (!this.walletClient) {
14832
- throw new Error("Wallet client required to collect rehype fees");
14833
- }
14834
- const { request, result } = await this.rpc.simulateContract({
15111
+ async getClaimableIntegratorFees(poolId2) {
15112
+ const result = await this.rpc.readContract({
14835
15113
  address: this.hookAddress,
14836
- abi: rehypeDopplerHookMigratorAbi,
14837
- functionName: "collectFees",
14838
- args: [asset],
14839
- account: this.walletClient.account
15114
+ abi: rehypeDopplerHookInitializerAbi,
15115
+ functionName: "getClaimableIntegratorFees",
15116
+ args: [poolId2]
14840
15117
  });
14841
- const hash = await this.walletClient.writeContract(request);
14842
- await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });
14843
- const decoded = decodeBalanceDelta(result);
14844
- return {
14845
- amount0: decoded.amount0,
14846
- amount1: decoded.amount1,
14847
- transactionHash: hash
14848
- };
15118
+ return normalizeRehypeIntegratorFees(
15119
+ result,
15120
+ "Rehype getClaimableIntegratorFees"
15121
+ );
14849
15122
  }
14850
- async claimAirlockOwnerFees(asset) {
14851
- if (!this.walletClient) {
14852
- throw new Error("Wallet client required to claim rehype owner fees");
14853
- }
14854
- const { request, result } = await this.rpc.simulateContract({
15123
+ async setIntegratorConversionRatios(poolId2, assetFeesToNumeraireRatio, numeraireFeesToAssetRatio) {
15124
+ assertIntegratorConversionRatio2(
15125
+ assetFeesToNumeraireRatio,
15126
+ "assetFeesToNumeraireRatio"
15127
+ );
15128
+ assertIntegratorConversionRatio2(
15129
+ numeraireFeesToAssetRatio,
15130
+ "numeraireFeesToAssetRatio"
15131
+ );
15132
+ const walletClient = this.requireWalletClient(
15133
+ "Wallet client required to set rehype integrator conversion ratios"
15134
+ );
15135
+ const { request } = await this.rpc.simulateContract({
14855
15136
  address: this.hookAddress,
14856
- abi: rehypeDopplerHookMigratorAbi,
14857
- functionName: "claimAirlockOwnerFees",
14858
- args: [asset],
14859
- account: this.walletClient.account
15137
+ abi: rehypeDopplerHookInitializerAbi,
15138
+ functionName: "setIntegratorConversionRatios",
15139
+ args: [poolId2, assetFeesToNumeraireRatio, numeraireFeesToAssetRatio],
15140
+ account: walletClient.account
14860
15141
  });
14861
- const hash = await this.walletClient.writeContract(request);
14862
- await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });
14863
- const [fees0, fees1] = result;
14864
- return { fees0, fees1, transactionHash: hash };
15142
+ const hash = await walletClient.writeContract(request);
15143
+ await this.waitForSuccessfulReceipt(hash, "setIntegratorConversionRatios");
15144
+ return { transactionHash: hash };
14865
15145
  }
14866
- async setFeeDistribution(poolId2, feeDistributionInfo) {
14867
- if (!this.walletClient) {
14868
- throw new Error("Wallet client required to set rehype fee distribution");
14869
- }
15146
+ async setIntegratorAutomaticPayout(poolId2, automaticPayout) {
15147
+ const walletClient = this.requireWalletClient(
15148
+ "Wallet client required to set rehype integrator automatic payout"
15149
+ );
14870
15150
  const { request } = await this.rpc.simulateContract({
14871
15151
  address: this.hookAddress,
14872
- abi: rehypeDopplerHookMigratorAbi,
14873
- functionName: "setFeeDistribution",
14874
- args: [
14875
- poolId2,
14876
- feeDistributionInfo.assetFeesToAssetBuybackWad,
14877
- feeDistributionInfo.assetFeesToNumeraireBuybackWad,
14878
- feeDistributionInfo.assetFeesToBeneficiaryWad,
14879
- feeDistributionInfo.assetFeesToLpWad,
14880
- feeDistributionInfo.numeraireFeesToAssetBuybackWad,
14881
- feeDistributionInfo.numeraireFeesToNumeraireBuybackWad,
14882
- feeDistributionInfo.numeraireFeesToBeneficiaryWad,
14883
- feeDistributionInfo.numeraireFeesToLpWad
14884
- ],
14885
- account: this.walletClient.account
15152
+ abi: rehypeDopplerHookInitializerAbi,
15153
+ functionName: "setIntegratorAutomaticPayout",
15154
+ args: [poolId2, automaticPayout],
15155
+ account: walletClient.account
14886
15156
  });
14887
- const hash = await this.walletClient.writeContract(request);
14888
- await this.rpc.waitForTransactionReceipt({ hash, confirmations: 1 });
14889
- return hash;
15157
+ const hash = await walletClient.writeContract(request);
15158
+ await this.waitForSuccessfulReceipt(hash, "setIntegratorAutomaticPayout");
15159
+ return { transactionHash: hash };
14890
15160
  }
14891
- async getFeeDistributionInfo(poolId2) {
14892
- const result = await this.rpc.readContract({
15161
+ async setIntegrator(poolId2, newIntegrator) {
15162
+ assertNonZeroAddress2(newIntegrator, "Rehype integrator");
15163
+ const walletClient = this.requireWalletClient(
15164
+ "Wallet client required to rotate rehype integrator"
15165
+ );
15166
+ const { request } = await this.rpc.simulateContract({
14893
15167
  address: this.hookAddress,
14894
- abi: rehypeDopplerHookMigratorAbi,
14895
- functionName: "getFeeDistributionInfo",
14896
- args: [poolId2]
15168
+ abi: rehypeDopplerHookInitializerAbi,
15169
+ functionName: "setIntegrator",
15170
+ args: [poolId2, newIntegrator],
15171
+ account: walletClient.account
14897
15172
  });
14898
- return normalizeRehypeFeeDistributionInfo(result);
15173
+ const hash = await walletClient.writeContract(request);
15174
+ await this.waitForSuccessfulReceipt(hash, "setIntegrator");
15175
+ return { transactionHash: hash };
14899
15176
  }
14900
- async getFeeRoutingMode(poolId2) {
14901
- const mode = await this.rpc.readContract({
15177
+ async claimIntegratorFees(asset, to) {
15178
+ assertNonZeroAddress2(to, "Rehype integrator claim destination");
15179
+ const walletClient = this.requireWalletClient(
15180
+ "Wallet client required to claim rehype integrator fees"
15181
+ );
15182
+ const { request } = await this.rpc.simulateContract({
14902
15183
  address: this.hookAddress,
14903
- abi: rehypeDopplerHookMigratorAbi,
14904
- functionName: "getFeeRoutingMode",
14905
- args: [poolId2]
15184
+ abi: rehypeDopplerHookInitializerAbi,
15185
+ functionName: "claimIntegratorFees",
15186
+ args: [asset, to],
15187
+ account: walletClient.account
14906
15188
  });
14907
- return Number(mode);
15189
+ const hash = await walletClient.writeContract(request);
15190
+ const receipt = await this.waitForSuccessfulReceipt(
15191
+ hash,
15192
+ "claimIntegratorFees"
15193
+ );
15194
+ const events = viem.parseEventLogs({
15195
+ abi: rehypeDopplerHookInitializerAbi,
15196
+ eventName: "IntegratorFeesClaimed",
15197
+ logs: receipt.logs.filter(
15198
+ ({ address }) => viem.isAddressEqual(address, this.hookAddress)
15199
+ )
15200
+ });
15201
+ if (events.length !== 1) {
15202
+ throw new Error(
15203
+ `Rehype claimIntegratorFees transaction ${hash} emitted ${events.length} IntegratorFeesClaimed events; expected exactly one`
15204
+ );
15205
+ }
15206
+ const { fees0, fees1 } = events[0].args;
15207
+ return { fees0, fees1, transactionHash: hash };
14908
15208
  }
14909
15209
  async getHookFees(poolId2) {
14910
15210
  const result = await this.rpc.readContract({
14911
15211
  address: this.hookAddress,
14912
- abi: rehypeDopplerHookMigratorAbi,
15212
+ abi: rehypeDopplerHookInitializerAbi,
14913
15213
  functionName: "getHookFees",
14914
15214
  args: [poolId2]
14915
15215
  });
@@ -14918,22 +15218,46 @@ var RehypeDopplerHookMigrator = class {
14918
15218
  async getPoolInfo(poolId2) {
14919
15219
  const result = await this.rpc.readContract({
14920
15220
  address: this.hookAddress,
14921
- abi: rehypeDopplerHookMigratorAbi,
15221
+ abi: rehypeDopplerHookInitializerAbi,
14922
15222
  functionName: "getPoolInfo",
14923
15223
  args: [poolId2]
14924
15224
  });
14925
15225
  return normalizeRehypePoolInfo(result);
14926
15226
  }
14927
- async getPosition(poolId2) {
14928
- const result = await this.rpc.readContract({
14929
- address: this.hookAddress,
14930
- abi: rehypeDopplerHookMigratorAbi,
14931
- functionName: "getPosition",
14932
- args: [poolId2]
15227
+ async waitForSuccessfulReceipt(hash, operation) {
15228
+ const receipt = await this.rpc.waitForTransactionReceipt({
15229
+ hash,
15230
+ confirmations: 1
14933
15231
  });
14934
- return normalizeRehypePosition(result);
15232
+ if (receipt.status !== "success") {
15233
+ throw new Error(
15234
+ `Rehype ${operation} transaction ${hash} failed with receipt status ${receipt.status}`
15235
+ );
15236
+ }
15237
+ return receipt;
15238
+ }
15239
+ requireWalletClient(message) {
15240
+ if (!this.walletClient) {
15241
+ throw new Error(message);
15242
+ }
15243
+ return this.walletClient;
14935
15244
  }
14936
15245
  };
15246
+ function assertIntegratorConversionRatio2(value, label) {
15247
+ if (!Number.isInteger(value) || value < 0 || value > INTEGRATOR_CONVERSION_RATIO_DENOMINATOR) {
15248
+ throw new Error(
15249
+ `Rehype ${label} must be an integer between 0 and ${INTEGRATOR_CONVERSION_RATIO_DENOMINATOR}`
15250
+ );
15251
+ }
15252
+ }
15253
+ function assertNonZeroAddress2(address, label) {
15254
+ if (!viem.isAddress(address, { strict: false }) || address.toLowerCase() === ZERO_ADDRESS) {
15255
+ throw new Error(`${label} must be a non-zero address`);
15256
+ }
15257
+ }
15258
+
15259
+ // src/evm/entities/auction/RehypeDopplerHook.ts
15260
+ var RehypeDopplerHook = RehypeDopplerHookInitializer;
14937
15261
  var OpeningAuctionPositionManager = class _OpeningAuctionPositionManager {
14938
15262
  publicClient;
14939
15263
  walletClient;
@@ -18252,6 +18576,18 @@ var DopplerERC20V1 = class _DopplerERC20V1 {
18252
18576
  args: [account, timepoint]
18253
18577
  });
18254
18578
  }
18579
+ /**
18580
+ * Get historical voting-unit supply at a token clock timepoint.
18581
+ * Read CLOCK_MODE to determine whether a deployment uses timestamps or blocks.
18582
+ */
18583
+ async getPastTotalSupply(timepoint) {
18584
+ return await this.rpc.readContract({
18585
+ address: this.address,
18586
+ abi: dopplerERC20V1Abi,
18587
+ functionName: "getPastTotalSupply",
18588
+ args: [timepoint]
18589
+ });
18590
+ }
18255
18591
  async getVotesTotalSupply() {
18256
18592
  return await this.rpc.readContract({
18257
18593
  address: this.address,
@@ -18345,6 +18681,15 @@ var DopplerERC20V1 = class _DopplerERC20V1 {
18345
18681
  functionName: "vestedTotalAmount"
18346
18682
  });
18347
18683
  }
18684
+ /** Get a beneficiary's vesting allocation that has not been released. */
18685
+ async getTotalUnreleasedOf(beneficiary) {
18686
+ return await this.rpc.readContract({
18687
+ address: this.address,
18688
+ abi: dopplerERC20V1Abi,
18689
+ functionName: "totalUnreleasedOf",
18690
+ args: [beneficiary]
18691
+ });
18692
+ }
18348
18693
  async getVestingScheduleCount() {
18349
18694
  return await this.rpc.readContract({
18350
18695
  address: this.address,
@@ -18795,61 +19140,6 @@ var Eth = class {
18795
19140
  });
18796
19141
  }
18797
19142
  };
18798
- var TopUpDistributor = class {
18799
- publicClient;
18800
- walletClient;
18801
- topUpDistributorAddress;
18802
- get rpc() {
18803
- return this.publicClient;
18804
- }
18805
- constructor(publicClient, walletClient, topUpDistributorAddress) {
18806
- this.publicClient = publicClient;
18807
- this.walletClient = walletClient;
18808
- this.topUpDistributorAddress = topUpDistributorAddress;
18809
- }
18810
- getAddress() {
18811
- return this.topUpDistributorAddress;
18812
- }
18813
- buildTopUpTransaction(params) {
18814
- const tx = {
18815
- to: this.topUpDistributorAddress,
18816
- data: viem.encodeFunctionData({
18817
- abi: topUpDistributorAbi,
18818
- functionName: "topUp",
18819
- args: [params.asset, params.numeraire, params.amount]
18820
- })
18821
- };
18822
- if (params.numeraire === ZERO_ADDRESS) {
18823
- return { ...tx, value: params.amount };
18824
- }
18825
- return tx;
18826
- }
18827
- async simulateTopUp(params, account) {
18828
- const { request } = await this.rpc.simulateContract({
18829
- address: this.topUpDistributorAddress,
18830
- abi: topUpDistributorAbi,
18831
- functionName: "topUp",
18832
- args: [params.asset, params.numeraire, params.amount],
18833
- account: account ?? this.walletClient?.account,
18834
- ...params.numeraire === ZERO_ADDRESS ? { value: params.amount } : {}
18835
- });
18836
- return {
18837
- request
18838
- };
18839
- }
18840
- async topUp(params, options) {
18841
- if (!this.walletClient) {
18842
- throw new Error("Wallet client required for write operations");
18843
- }
18844
- const { request } = await this.simulateTopUp(
18845
- params,
18846
- this.walletClient.account
18847
- );
18848
- return await this.walletClient.writeContract(
18849
- options?.gas ? { ...request, gas: options.gas } : request
18850
- );
18851
- }
18852
- };
18853
19143
 
18854
19144
  // src/evm/entities/Bundler.ts
18855
19145
  var Bundler = class {
@@ -18956,6 +19246,234 @@ var Bundler = class {
18956
19246
  );
18957
19247
  }
18958
19248
  };
19249
+ var DopplerHookMigrator = class {
19250
+ client;
19251
+ walletClient;
19252
+ address;
19253
+ get rpc() {
19254
+ return this.client;
19255
+ }
19256
+ constructor(client, walletClient, address) {
19257
+ this.client = client;
19258
+ this.walletClient = walletClient;
19259
+ this.address = address;
19260
+ }
19261
+ getAddress() {
19262
+ return this.address;
19263
+ }
19264
+ async getMigrationRefund(poolId2) {
19265
+ const result = await this.rpc.readContract({
19266
+ address: this.address,
19267
+ abi: dopplerHookMigratorAbi,
19268
+ functionName: "getMigrationRefund",
19269
+ args: [poolId2]
19270
+ });
19271
+ const [recipient, currency0, currency1, amount0, amount1] = result;
19272
+ return {
19273
+ recipient: viem.getAddress(recipient),
19274
+ currency0: viem.getAddress(currency0),
19275
+ currency1: viem.getAddress(currency1),
19276
+ amount0,
19277
+ amount1,
19278
+ exists: amount0 !== 0n || amount1 !== 0n
19279
+ };
19280
+ }
19281
+ async getTotalClaimableMigrationRefund(currency) {
19282
+ return await this.rpc.readContract({
19283
+ address: this.address,
19284
+ abi: dopplerHookMigratorAbi,
19285
+ functionName: "getTotalClaimableMigrationRefund",
19286
+ args: [currency]
19287
+ });
19288
+ }
19289
+ async getLockerAddress() {
19290
+ return viem.getAddress(
19291
+ await this.rpc.readContract({
19292
+ address: this.address,
19293
+ abi: dopplerHookMigratorAbi,
19294
+ functionName: "locker"
19295
+ })
19296
+ );
19297
+ }
19298
+ async getMigrationPoolId(asset) {
19299
+ const pair = await this.rpc.readContract({
19300
+ address: this.address,
19301
+ abi: dopplerHookMigratorAbi,
19302
+ functionName: "getPair",
19303
+ args: [asset]
19304
+ });
19305
+ const [token0, token1] = pair;
19306
+ if (token0 === viem.zeroAddress && token1 === viem.zeroAddress) {
19307
+ throw new Error(`No DopplerHookMigrator pool found for asset ${asset}`);
19308
+ }
19309
+ const assetData = await this.rpc.readContract({
19310
+ address: this.address,
19311
+ abi: dopplerHookMigratorAbi,
19312
+ functionName: "getAssetData",
19313
+ args: [token0, token1]
19314
+ });
19315
+ return computePoolId(normalizePoolKey(assetData[1]));
19316
+ }
19317
+ async claimMigrationRefund(poolId2, to) {
19318
+ if (to === viem.zeroAddress) {
19319
+ throw new Error(
19320
+ "Migration refund destination must not be the zero address"
19321
+ );
19322
+ }
19323
+ const walletClient = this.walletClient;
19324
+ if (!walletClient) {
19325
+ throw new Error("Wallet client required to claim a migration refund");
19326
+ }
19327
+ const { request } = await this.rpc.simulateContract({
19328
+ address: this.address,
19329
+ abi: dopplerHookMigratorAbi,
19330
+ functionName: "claimMigrationRefund",
19331
+ args: [poolId2, to],
19332
+ account: walletClient.account
19333
+ });
19334
+ const hash = await walletClient.writeContract(request);
19335
+ const receipt = await this.rpc.waitForTransactionReceipt({
19336
+ hash,
19337
+ confirmations: 1
19338
+ });
19339
+ if (receipt.status !== "success") {
19340
+ throw new Error(
19341
+ `DopplerHookMigrator claimMigrationRefund transaction ${hash} failed with receipt status ${receipt.status}`
19342
+ );
19343
+ }
19344
+ const events = viem.parseEventLogs({
19345
+ abi: dopplerHookMigratorAbi,
19346
+ eventName: "MigrationRefundClaimed",
19347
+ logs: receipt.logs.filter(
19348
+ ({ address }) => viem.isAddressEqual(address, this.address)
19349
+ )
19350
+ }).filter(
19351
+ ({ args }) => args.poolId.toLowerCase() === poolId2.toLowerCase() && viem.isAddressEqual(args.to, to)
19352
+ );
19353
+ if (events.length !== 1) {
19354
+ throw new Error(
19355
+ `DopplerHookMigrator claimMigrationRefund transaction ${hash} emitted ${events.length} matching MigrationRefundClaimed events; expected exactly one`
19356
+ );
19357
+ }
19358
+ const { amount0, amount1 } = events[0].args;
19359
+ return { amount0, amount1, transactionHash: hash };
19360
+ }
19361
+ };
19362
+ var StreamableFeesLockerV2 = class {
19363
+ client;
19364
+ walletClient;
19365
+ address;
19366
+ get rpc() {
19367
+ return this.client;
19368
+ }
19369
+ constructor(client, walletClient, address) {
19370
+ this.client = client;
19371
+ this.walletClient = walletClient;
19372
+ this.address = address;
19373
+ }
19374
+ getAddress() {
19375
+ return this.address;
19376
+ }
19377
+ async getStream(poolId2) {
19378
+ const result = await this.rpc.readContract({
19379
+ address: this.address,
19380
+ abi: streamableFeesLockerV2Abi,
19381
+ functionName: "streams",
19382
+ args: [poolId2]
19383
+ });
19384
+ const [poolKey, recipient, startDate, lockDuration, isUnlocked] = result;
19385
+ return {
19386
+ poolKey: normalizePoolKey(poolKey),
19387
+ recipient,
19388
+ startDate,
19389
+ lockDuration,
19390
+ unlockDate: viem.isAddressEqual(recipient, DEAD_ADDRESS) ? 0 : startDate + lockDuration,
19391
+ isUnlocked
19392
+ };
19393
+ }
19394
+ async getBeneficiaryShares(poolId2, beneficiary) {
19395
+ return await this.rpc.readContract({
19396
+ address: this.address,
19397
+ abi: streamableFeesLockerV2Abi,
19398
+ functionName: "getShares",
19399
+ args: [poolId2, beneficiary]
19400
+ });
19401
+ }
19402
+ async getCumulatedFees(poolId2) {
19403
+ const [fees0, fees1] = await Promise.all([
19404
+ this.rpc.readContract({
19405
+ address: this.address,
19406
+ abi: streamableFeesLockerV2Abi,
19407
+ functionName: "getCumulatedFees0",
19408
+ args: [poolId2]
19409
+ }),
19410
+ this.rpc.readContract({
19411
+ address: this.address,
19412
+ abi: streamableFeesLockerV2Abi,
19413
+ functionName: "getCumulatedFees1",
19414
+ args: [poolId2]
19415
+ })
19416
+ ]);
19417
+ return { fees0, fees1 };
19418
+ }
19419
+ async collectFees(poolId2) {
19420
+ const walletClient = this.walletClient;
19421
+ if (!walletClient) {
19422
+ throw new Error("Wallet client required to collect streamable fees");
19423
+ }
19424
+ const { request } = await this.rpc.simulateContract({
19425
+ address: this.address,
19426
+ abi: streamableFeesLockerV2Abi,
19427
+ functionName: "collectFees",
19428
+ args: [poolId2],
19429
+ account: walletClient.account
19430
+ });
19431
+ const hash = await walletClient.writeContract(request);
19432
+ const receipt = await this.waitForSuccessfulReceipt(hash, "collectFees");
19433
+ const events = viem.parseEventLogs({
19434
+ abi: streamableFeesLockerV2Abi,
19435
+ eventName: "Collect",
19436
+ logs: receipt.logs.filter(
19437
+ ({ address }) => viem.isAddressEqual(address, this.address)
19438
+ )
19439
+ }).filter(({ args }) => args.poolId.toLowerCase() === poolId2.toLowerCase());
19440
+ if (events.length !== 1) {
19441
+ throw new Error(
19442
+ `StreamableFeesLockerV2 collectFees transaction ${hash} emitted ${events.length} matching Collect events; expected exactly one`
19443
+ );
19444
+ }
19445
+ const { fees0, fees1 } = events[0].args;
19446
+ return { fees0, fees1, transactionHash: hash };
19447
+ }
19448
+ async unlock(poolId2) {
19449
+ const walletClient = this.walletClient;
19450
+ if (!walletClient) {
19451
+ throw new Error("Wallet client required to unlock streamable liquidity");
19452
+ }
19453
+ const { request } = await this.rpc.simulateContract({
19454
+ address: this.address,
19455
+ abi: streamableFeesLockerV2Abi,
19456
+ functionName: "unlock",
19457
+ args: [poolId2],
19458
+ account: walletClient.account
19459
+ });
19460
+ const hash = await walletClient.writeContract(request);
19461
+ await this.waitForSuccessfulReceipt(hash, "unlock");
19462
+ return { transactionHash: hash };
19463
+ }
19464
+ async waitForSuccessfulReceipt(hash, operation) {
19465
+ const receipt = await this.rpc.waitForTransactionReceipt({
19466
+ hash,
19467
+ confirmations: 1
19468
+ });
19469
+ if (receipt.status !== "success") {
19470
+ throw new Error(
19471
+ `StreamableFeesLockerV2 ${operation} transaction ${hash} failed with receipt status ${receipt.status}`
19472
+ );
19473
+ }
19474
+ return receipt;
19475
+ }
19476
+ };
18959
19477
 
18960
19478
  // src/evm/builders/StaticAuctionBuilder.ts
18961
19479
  var StaticAuctionBuilder = class _StaticAuctionBuilder {
@@ -19561,9 +20079,6 @@ var DynamicAuctionBuilder = class _DynamicAuctionBuilder {
19561
20079
  withDopplerHookMigrator(address) {
19562
20080
  return this.overrideModule("dopplerHookMigrator", address);
19563
20081
  }
19564
- withRehypeDopplerHookMigrator(address) {
19565
- return this.overrideModule("rehypeDopplerHookMigrator", address);
19566
- }
19567
20082
  withNoOpMigrator(address) {
19568
20083
  return this.overrideModule("noOpMigrator", address);
19569
20084
  }
@@ -19904,15 +20419,15 @@ var MulticurveBuilder = class _MulticurveBuilder {
19904
20419
  *
19905
20420
  * When configured, the hook will be initialized with the pool and will handle:
19906
20421
  * - Custom swap fees
19907
- * - Fee distribution to beneficiaries, LPs, and buyback destinations
19908
- *
20422
+ * - Residual fee distribution to beneficiaries, LPs, and buyback destinations
20423
+ * - An optional, independently routed integrator share of gross hook fees
19909
20424
  * IMPORTANT:
19910
20425
  * - The hook address must be whitelisted in the DopplerHookInitializer
19911
20426
  * - Fee distribution percentages must sum to exactly WAD (1e18 = 100%)
19912
- *
20427
+ * - integratorFeeConfig.integrator defaults to withIntegrator(address)
19913
20428
  * @example
19914
20429
  * ```typescript
19915
- * builder.withRehypeDopplerHookInitializer({
20430
+ * builder.withIntegrator('0x...').withRehypeDopplerHookInitializer({
19916
20431
  * hookAddress: '0x...',
19917
20432
  * buybackDestination: '0x...',
19918
20433
  * startFee: 3000, // 0.3%
@@ -19928,6 +20443,11 @@ var MulticurveBuilder = class _MulticurveBuilder {
19928
20443
  * numeraireFeesToBeneficiaryWad: parseEther('0.3'),
19929
20444
  * numeraireFeesToLpWad: parseEther('0.3'),
19930
20445
  * },
20446
+ * integratorFeeConfig: {
20447
+ * feeShare: 200_000, // 20% of the Rehype hook fee
20448
+ * assetFeesToNumeraireRatio: 500_000_000, // Convert 50%
20449
+ * automaticPayout: false,
20450
+ * },
19931
20451
  * })
19932
20452
  * ```
19933
20453
  */
@@ -19943,10 +20463,13 @@ var MulticurveBuilder = class _MulticurveBuilder {
19943
20463
  "Rehype buybackDestination and withFeeDistributionController are mutually exclusive"
19944
20464
  );
19945
20465
  }
19946
- if (params.buybackDestination !== void 0 || this.feeDistributionControllerAddress !== void 0) {
20466
+ const needsInheritedIntegrator = params.integratorFeeConfig !== void 0 && params.integratorFeeConfig.integrator === void 0;
20467
+ const canResolveIntegrator = !needsInheritedIntegrator || this.integrator !== void 0;
20468
+ if ((params.buybackDestination !== void 0 || this.feeDistributionControllerAddress !== void 0) && canResolveIntegrator) {
19947
20469
  normalizeRehypeDopplerHookInitializerConfig(
19948
20470
  params,
19949
- this.feeDistributionControllerAddress
20471
+ this.feeDistributionControllerAddress,
20472
+ this.integrator
19950
20473
  );
19951
20474
  }
19952
20475
  this.dopplerHook = params;
@@ -20285,7 +20808,8 @@ var MulticurveBuilder = class _MulticurveBuilder {
20285
20808
  if (dopplerHook) {
20286
20809
  dopplerHook = normalizeRehypeDopplerHookInitializerConfig(
20287
20810
  dopplerHook,
20288
- this.feeDistributionControllerAddress
20811
+ this.feeDistributionControllerAddress,
20812
+ this.integrator
20289
20813
  );
20290
20814
  }
20291
20815
  if (dopplerHook?.graduationMarketCap !== void 0) {
@@ -20753,7 +21277,6 @@ var DopplerSDK = class {
20753
21277
  chainId;
20754
21278
  _factory;
20755
21279
  _quoter;
20756
- _topUpDistributor;
20757
21280
  _bundler;
20758
21281
  constructor(config) {
20759
21282
  this.publicClient = config.publicClient;
@@ -20782,31 +21305,6 @@ var DopplerSDK = class {
20782
21305
  }
20783
21306
  return this._quoter;
20784
21307
  }
20785
- /**
20786
- * Get the configured TopUpDistributor instance for split-migrator top-ups.
20787
- */
20788
- get topUpDistributor() {
20789
- if (!this._topUpDistributor) {
20790
- this._topUpDistributor = this.getTopUpDistributor();
20791
- }
20792
- return this._topUpDistributor;
20793
- }
20794
- /**
20795
- * Get a TopUpDistributor instance using the chain default or an explicit override.
20796
- */
20797
- getTopUpDistributor(topUpDistributorAddress) {
20798
- const resolvedTopUpDistributor = topUpDistributorAddress ?? getAddresses(this.chainId).topUpDistributor;
20799
- if (!resolvedTopUpDistributor || resolvedTopUpDistributor === ZERO_ADDRESS) {
20800
- throw new Error(
20801
- "TopUpDistributor address is not configured on this chain. Pass topUpDistributorAddress to getTopUpDistributor()."
20802
- );
20803
- }
20804
- return new TopUpDistributor(
20805
- this.publicClient,
20806
- this.walletClient,
20807
- resolvedTopUpDistributor
20808
- );
20809
- }
20810
21308
  /**
20811
21309
  * Gets the Bundler client configured for this chain.
20812
21310
  *
@@ -20864,17 +21362,40 @@ var DopplerSDK = class {
20864
21362
  async getRehypeDopplerHook(hookAddress) {
20865
21363
  return this.getRehypeDopplerHookInitializer(hookAddress);
20866
21364
  }
20867
- /**
20868
- * Get a RehypeDopplerHookMigrator instance for interacting with migrator-side rehype hook state.
20869
- * @param hookAddress The address of the RehypeDopplerHookMigrator
20870
- */
20871
- async getRehypeDopplerHookMigrator(hookAddress) {
20872
- return new RehypeDopplerHookMigrator(
21365
+ getDopplerHookMigrator(address) {
21366
+ const resolvedAddress = address ?? getAddresses(this.chainId).dopplerHookMigrator;
21367
+ if (!resolvedAddress || resolvedAddress === ZERO_ADDRESS) {
21368
+ throw new Error(
21369
+ "DopplerHookMigrator address is not configured on this chain. Pass an address to getDopplerHookMigrator()."
21370
+ );
21371
+ }
21372
+ return new DopplerHookMigrator(
20873
21373
  this.publicClient,
20874
21374
  this.walletClient,
20875
- hookAddress
21375
+ resolvedAddress
21376
+ );
21377
+ }
21378
+ async getDopplerHookMigratorForAsset(asset) {
21379
+ const assetData = await this.getAirlockAssetData(asset);
21380
+ if (assetData.liquidityMigrator === ZERO_ADDRESS) {
21381
+ throw new Error(`Asset ${asset} has no configured liquidity migrator`);
21382
+ }
21383
+ return this.getDopplerHookMigrator(assetData.liquidityMigrator);
21384
+ }
21385
+ getStreamableFeesLockerV2(address) {
21386
+ if (address === ZERO_ADDRESS) {
21387
+ throw new Error("StreamableFeesLockerV2 address must not be zero");
21388
+ }
21389
+ return new StreamableFeesLockerV2(
21390
+ this.publicClient,
21391
+ this.walletClient,
21392
+ address
20876
21393
  );
20877
21394
  }
21395
+ async getStreamableFeesLockerForAsset(asset) {
21396
+ const migrator = await this.getDopplerHookMigratorForAsset(asset);
21397
+ return this.getStreamableFeesLockerV2(await migrator.getLockerAddress());
21398
+ }
20878
21399
  /**
20879
21400
  * Get an OpeningAuction instance for interacting with an opening auction hook.
20880
21401
  * @param hookAddress The address of the opening auction hook
@@ -20943,10 +21464,12 @@ var DopplerSDK = class {
20943
21464
  * @param tokenAddress The address of the token created by the auction (called "asset" in contracts; V4 pools don't have addresses, so the token is used as the lookup key)
20944
21465
  */
20945
21466
  async getMulticurvePool(tokenAddress) {
21467
+ const { poolInitializer } = await this.getAirlockAssetData(tokenAddress);
20946
21468
  return new MulticurvePool(
20947
21469
  this.publicClient,
20948
21470
  this.walletClient,
20949
- tokenAddress
21471
+ tokenAddress,
21472
+ poolInitializer
20950
21473
  );
20951
21474
  }
20952
21475
  /**
@@ -21042,6 +21565,15 @@ var DopplerSDK = class {
21042
21565
  async getAirlockOwner() {
21043
21566
  return getAirlockOwner(this.publicClient);
21044
21567
  }
21568
+ async getAirlockAssetData(asset) {
21569
+ const result = await this.publicClient.readContract({
21570
+ address: getAddresses(this.chainId).airlock,
21571
+ abi: airlockAbi,
21572
+ functionName: "getAssetData",
21573
+ args: [asset]
21574
+ });
21575
+ return normalizeAirlockAssetData(result);
21576
+ }
21045
21577
  /**
21046
21578
  * Convenience helper for building the airlock beneficiary entry with the default 5% (0.05e18 WAD shares)
21047
21579
  */
@@ -21112,6 +21644,7 @@ exports.DopplerDN404BaseSepoliaBytecode = dopplerDN404BaseSepolia_default;
21112
21644
  exports.DopplerDN404Bytecode = dopplerDN404_default;
21113
21645
  exports.DopplerERC20V1 = DopplerERC20V1;
21114
21646
  exports.DopplerFactory = DopplerFactory;
21647
+ exports.DopplerHookMigrator = DopplerHookMigrator;
21115
21648
  exports.DopplerSDK = DopplerSDK;
21116
21649
  exports.DynamicAuction = DynamicAuction;
21117
21650
  exports.DynamicAuctionBuilder = DynamicAuctionBuilder;
@@ -21152,7 +21685,6 @@ exports.Q96 = Q96;
21152
21685
  exports.Quoter = Quoter;
21153
21686
  exports.RehypeDopplerHook = RehypeDopplerHook;
21154
21687
  exports.RehypeDopplerHookInitializer = RehypeDopplerHookInitializer;
21155
- exports.RehypeDopplerHookMigrator = RehypeDopplerHookMigrator;
21156
21688
  exports.RehypeFeeRoutingMode = RehypeFeeRoutingMode;
21157
21689
  exports.SECONDS_PER_DAY = SECONDS_PER_DAY;
21158
21690
  exports.SECONDS_PER_YEAR = SECONDS_PER_YEAR;
@@ -21160,8 +21692,8 @@ exports.SUPPORTED_CHAIN_IDS = SUPPORTED_CHAIN_IDS;
21160
21692
  exports.StateViewBytecode = stateView_default;
21161
21693
  exports.StaticAuction = StaticAuction;
21162
21694
  exports.StaticAuctionBuilder = StaticAuctionBuilder;
21695
+ exports.StreamableFeesLockerV2 = StreamableFeesLockerV2;
21163
21696
  exports.TICK_SPACINGS = TICK_SPACINGS;
21164
- exports.TopUpDistributor = TopUpDistributor;
21165
21697
  exports.V3_FEE_TIERS = V3_FEE_TIERS;
21166
21698
  exports.V4_MAX_FEE = V4_MAX_FEE;
21167
21699
  exports.VALID_FEE_TIERS = VALID_FEE_TIERS;
@@ -21187,9 +21719,9 @@ exports.dopplerDN404Abi = dopplerDN404Abi;
21187
21719
  exports.dopplerERC20V1Abi = dopplerERC20V1Abi;
21188
21720
  exports.dopplerHookAbi = dopplerHookAbi;
21189
21721
  exports.dopplerHookInitializerAbi = dopplerHookInitializerAbi;
21722
+ exports.dopplerHookMigratorAbi = dopplerHookMigratorAbi;
21190
21723
  exports.dopplerLensAbi = dopplerLensAbi;
21191
21724
  exports.encodeRehypeDopplerHookInitializerData = encodeRehypeDopplerHookInitializerData;
21192
- exports.encodeRehypeDopplerHookMigratorCalldata = encodeRehypeDopplerHookMigratorCalldata;
21193
21725
  exports.estimatePriceAtEpoch = estimatePriceAtEpoch;
21194
21726
  exports.estimateSlippage = estimateSlippage;
21195
21727
  exports.feeClaimsInitializerAbi = feeClaimsInitializerAbi;
@@ -21233,7 +21765,6 @@ exports.quoterV2Abi = quoterV2Abi;
21233
21765
  exports.ratioToTick = ratioToTick;
21234
21766
  exports.rehypeDopplerHookAbi = rehypeDopplerHookAbi;
21235
21767
  exports.rehypeDopplerHookInitializerAbi = rehypeDopplerHookInitializerAbi;
21236
- exports.rehypeDopplerHookMigratorAbi = rehypeDopplerHookMigratorAbi;
21237
21768
  exports.resolveGasEstimate = resolveGasEstimate;
21238
21769
  exports.sortBeneficiaries = sortBeneficiaries;
21239
21770
  exports.sqrtPriceX96ToPrice = sqrtPriceX96ToPrice;
@@ -21242,7 +21773,6 @@ exports.streamableFeesLockerV2Abi = streamableFeesLockerV2Abi;
21242
21773
  exports.tickToMarketCap = tickToMarketCap;
21243
21774
  exports.tickToPrice = tickToPrice;
21244
21775
  exports.tokenPriceToRatio = tokenPriceToRatio;
21245
- exports.topUpDistributorAbi = topUpDistributorAbi;
21246
21776
  exports.uniswapV2Router02Abi = uniswapV2Router02Abi;
21247
21777
  exports.uniswapV3InitializerAbi = uniswapV3InitializerAbi;
21248
21778
  exports.uniswapV3PoolAbi = uniswapV3PoolAbi;