From a0656d93e9fe11e08e20d2e30ec0b079ed8bde94 Mon Sep 17 00:00:00 2001 From: Cody Born Date: Fri, 21 Nov 2025 21:27:43 -0300 Subject: [PATCH] UniswapX Quoter --- .../Deploy-all.s.sol/1/run-1763770696.json | 46 ++ broadcast/Deploy-all.s.sol/1/run-latest.json | 112 +--- .../Deploy-all.s.sol/10/run-1763770897.json | 52 ++ broadcast/Deploy-all.s.sol/10/run-latest.json | 42 +- .../Deploy-all.s.sol/130/run-1763767180.json | 52 ++ .../Deploy-all.s.sol/130/run-1763768519.json | 52 ++ .../Deploy-all.s.sol/130/run-latest.json | 40 +- .../42161/run-1763770994.json | 49 ++ .../Deploy-all.s.sol/42161/run-latest.json | 38 +- .../Deploy-all.s.sol/8453/run-1763769180.json | 52 ++ .../Deploy-all.s.sol/8453/run-latest.json | 40 +- deployments/1.md | 58 +- deployments/10.md | 62 +- deployments/130.md | 50 +- deployments/42161.md | 62 +- deployments/8453.md | 64 ++- deployments/json/1.json | 31 +- deployments/json/10.json | 31 +- deployments/json/130.json | 31 +- deployments/json/42161.json | 31 +- deployments/json/8453.json | 31 +- lib/v4-core | 1 - script/deploy/Deploy-all.s.sol | 14 + script/deploy/tasks/1/task-1763770655.json | 535 ++++++++++++++++++ script/deploy/tasks/10/task-1763770879.json | 535 ++++++++++++++++++ script/deploy/tasks/130/task-1763767166.json | 535 ++++++++++++++++++ script/deploy/tasks/130/task-1763768505.json | 535 ++++++++++++++++++ .../deploy/tasks/42161/task-1763770978.json | 535 ++++++++++++++++++ script/deploy/tasks/8453/task-1763769165.json | 535 ++++++++++++++++++ script/deploy/tasks/task_template.json | 10 + .../calibur/CaliburEntryDeployer.sol | 3 +- .../MixedRouteQuoterV2Deployer.sol | 3 +- .../deployers/permit2/Permit2Deployer.sol | 3 +- .../SwapRouter02Deployer.sol | 3 +- .../uniswapx/OrderQuoterDeployer.sol | 26 + .../UniversalRouterDeployer.sol | 3 +- .../ERC7914DetectorDeployer.sol | 3 +- .../util-contracts/FeeCollectorDeployer.sol | 3 +- .../FeeOnTransferDetectorDeployer.sol | 3 +- .../v2-core/UniswapV2FactoryDeployer.sol | 6 +- .../UniswapV2Router01Deployer.sol | 3 +- .../UniswapV2Router02Deployer.sol | 3 +- .../v3-core/UniswapV3FactoryDeployer.sol | 3 +- .../v3-periphery/NFTDescriptorDeployer.sol | 3 +- .../NonfungiblePositionManagerDeployer.sol | 3 +- ...ungibleTokenPositionDescriptorDeployer.sol | 5 +- .../v3-periphery/QuoterV2Deployer.sol | 3 +- .../v3-periphery/SwapRouterDeployer.sol | 3 +- .../v3-periphery/TickLensDeployer.sol | 3 +- .../UniswapInterfaceMulticallDeployer.sol | 3 +- .../v3-periphery/V3MigratorDeployer.sol | 3 +- .../deployers/v4-core/PoolManagerDeployer.sol | 3 +- .../PositionDescriptorDeployer.sol | 3 +- .../v4-periphery/PositionManagerDeployer.sol | 3 +- .../v4-periphery/StateViewDeployer.sol | 3 +- .../v4-periphery/V4QuoterDeployer.sol | 3 +- .../v4-periphery/WETHHookDeployer.sol | 3 +- .../v4-periphery/WstETHHookDeployer.sol | 3 +- .../WstETHRoutingHookDeployer.sol | 3 +- .../view-quoter-v3/QuoterDeployer.sol | 3 +- .../calibur/libraries/CalldataDecoder.sol | 6 +- .../calibur/libraries/ERC7739Utils.sol | 7 +- .../protocols/calibur/libraries/KeyLib.sol | 1 + .../libraries/TransientNativeAllowance.sol | 6 +- .../calibur/libraries/WrappedSignatureLib.sol | 4 +- .../protocols/lib-external/base64/base64.sol | 4 +- .../contracts/utils/Base64.sol | 4 +- .../contracts/utils/Panic.sol | 2 +- .../utils/cryptography/MessageHashUtils.sol | 4 +- .../contracts/utils/cryptography/P256.sol | 24 +- .../contracts/utils/math/Math.sol | 5 +- .../contracts/utils/math/SafeCast.sol | 2 +- .../solady/src/utils/LibString.sol | 38 +- .../solidity/src/FCL_elliptic.sol | 78 +-- .../contracts/utils/Base64.sol | 4 +- .../webauthn-sol/src/WebAuthn.sol | 5 +- .../protocols/mixed-quoter/libraries/Path.sol | 12 +- .../protocols/permit2/interfaces/IPermit2.sol | 5 +- .../permit2/libraries/Permit2Lib.sol | 40 +- .../permit2/libraries/PermitHash.sol | 5 +- .../interfaces/IApproveAndCall.sol | 5 +- .../interfaces/IMixedRouteQuoterV1.sol | 4 +- .../universal-router/libraries/Locker.sol | 4 +- .../libraries/MaxInputAmount.sol | 4 +- .../util-contracts/external/IPermit2.sol | 5 +- .../interfaces/IUniswapV2Migrator.sol | 3 +- .../interfaces/IUniswapV2Router01.sol | 10 +- .../interfaces/pool/IUniswapV3PoolActions.sol | 4 +- .../protocols/v3-core/libraries/Oracle.sol | 15 +- .../v3-core/libraries/SqrtPriceMath.sol | 16 +- .../v3-periphery/interfaces/IERC721Permit.sol | 4 +- .../v3-periphery/interfaces/ISelfPermit.sol | 4 +- .../v3-periphery/libraries/BytesLib.sol | 4 +- .../libraries/LiquidityAmounts.sol | 8 +- .../v3-periphery/libraries/NFTSVG.sol | 16 +- .../v3-periphery/libraries/PositionValue.sol | 25 +- .../protocols/v4-core/libraries/BitMath.sol | 4 +- .../v4-core/libraries/CurrencyDelta.sol | 8 +- .../v4-core/libraries/CurrencyReserves.sol | 8 +- .../v4-core/libraries/CustomRevert.sol | 16 +- .../protocols/v4-core/libraries/FullMath.sol | 14 +- .../protocols/v4-core/libraries/Hooks.sol | 17 +- .../v4-core/libraries/LiquidityMath.sol | 2 +- .../protocols/v4-core/libraries/Lock.sol | 6 +- .../v4-core/libraries/NonzeroDeltaCount.sol | 6 +- .../v4-core/libraries/ParseBytes.sol | 6 +- .../protocols/v4-core/libraries/Pool.sol | 23 +- .../protocols/v4-core/libraries/Position.sol | 2 +- .../v4-core/libraries/ProtocolFeeLibrary.sol | 4 +- .../v4-core/libraries/SqrtPriceMath.sol | 35 +- .../v4-core/libraries/StateLibrary.sol | 18 +- .../protocols/v4-core/libraries/SwapMath.sol | 4 +- .../v4-core/libraries/TickBitmap.sol | 17 +- .../protocols/v4-core/libraries/TickMath.sol | 34 +- .../libraries/TransientStateLibrary.sol | 3 +- .../v4-core/libraries/UnsafeMath.sol | 4 +- .../protocols/v4-core/types/BalanceDelta.sol | 10 +- .../v4-core/types/BeforeSwapDelta.sol | 6 +- .../protocols/v4-core/types/Currency.sol | 25 +- .../protocols/v4-core/types/PoolId.sol | 2 +- .../protocols/v4-core/types/Slot0.sol | 31 +- .../v4-periphery/interfaces/IV4Quoter.sol | 8 +- .../libraries/CalldataDecoder.sol | 44 +- .../libraries/ERC721PermitHash.sol | 4 +- .../v4-periphery/libraries/PositionConfig.sol | 2 +- .../libraries/PositionConfigId.sol | 2 +- .../libraries/PositionInfoLibrary.sol | 21 +- .../v4-periphery/libraries/QuoterRevert.sol | 4 +- .../protocols/v4-periphery/libraries/SVG.sol | 6 +- .../libraries/SafeCurrencyMetadata.sol | 5 +- .../view-quoter-v3/libraries/QuoterMath.sol | 10 +- 131 files changed, 4489 insertions(+), 688 deletions(-) create mode 100644 broadcast/Deploy-all.s.sol/1/run-1763770696.json create mode 100644 broadcast/Deploy-all.s.sol/10/run-1763770897.json create mode 100644 broadcast/Deploy-all.s.sol/130/run-1763767180.json create mode 100644 broadcast/Deploy-all.s.sol/130/run-1763768519.json create mode 100644 broadcast/Deploy-all.s.sol/42161/run-1763770994.json create mode 100644 broadcast/Deploy-all.s.sol/8453/run-1763769180.json delete mode 160000 lib/v4-core create mode 100644 script/deploy/tasks/1/task-1763770655.json create mode 100644 script/deploy/tasks/10/task-1763770879.json create mode 100644 script/deploy/tasks/130/task-1763767166.json create mode 100644 script/deploy/tasks/130/task-1763768505.json create mode 100644 script/deploy/tasks/42161/task-1763770978.json create mode 100644 script/deploy/tasks/8453/task-1763769165.json create mode 100644 src/briefcase/deployers/uniswapx/OrderQuoterDeployer.sol diff --git a/broadcast/Deploy-all.s.sol/1/run-1763770696.json b/broadcast/Deploy-all.s.sol/1/run-1763770696.json new file mode 100644 index 00000000..b7ec587c --- /dev/null +++ b/broadcast/Deploy-all.s.sol/1/run-1763770696.json @@ -0,0 +1,46 @@ +{ + "transactions": [ + { + "hash": "0x1d8dc0fa85e7d0a6ad41ea8d1bbce7f655625075b1c438e054559f32707fc90a", + "transactionType": "CREATE2", + "contractName": "OrderQuoter", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "function": null, + "arguments": null, + "transaction": { + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a", + "nonce": "0x85", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x13f3106", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x1d8dc0fa85e7d0a6ad41ea8d1bbce7f655625075b1c438e054559f32707fc90a", + "transactionIndex": "0xc3", + "blockHash": "0xf1749cb38b076d8cfa68da8f2119967741ecc36aafc095589ec44e75480f56a8", + "blockNumber": "0x16bef84", + "gasUsed": "0xb0794", + "effectiveGasPrice": "0x16ce13ce", + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1763770696, + "chain": 1, + "commit": "185b4fc" +} \ No newline at end of file diff --git a/broadcast/Deploy-all.s.sol/1/run-latest.json b/broadcast/Deploy-all.s.sol/1/run-latest.json index 14d109ca..b7ec587c 100644 --- a/broadcast/Deploy-all.s.sol/1/run-latest.json +++ b/broadcast/Deploy-all.s.sol/1/run-latest.json @@ -1,42 +1,18 @@ { "transactions": [ { - "hash": "0x8c5526a3239bd3994144bae9d762efa945485ac9da9c51f53734a02ff9c62da2", + "hash": "0x1d8dc0fa85e7d0a6ad41ea8d1bbce7f655625075b1c438e054559f32707fc90a", "transactionType": "CREATE2", - "contractName": "WstETHHook", - "contractAddress": "0xcdde8f9c3414a00f804e5c565eed9949ad17e888", + "contractName": "OrderQuoter", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "function": null, - "arguments": [ - "0x000000000004444c5dc75cB358380D2e3dE08A90", - "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0" - ], + "arguments": null, "transaction": { - "from": "0x2179a60856e37dfeaaca0ab043b931fe224b27b6", + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", "value": "0x0", - "input": "0x0000000000000000000000000000000000000000000000000000000000002172610120806040523461041457604081611f468038038091610020828561045b565b833981010312610414578051906001600160a01b038216820361041457602001516001600160a01b038116918282036104145760405163183fc7c960e31b8152602081600481875afa908115610420575f916103da575b5060018060a01b0316906080525f6101a06040516100948161042b565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06040516100f68161042b565b60018152826020820152600160408201528260608201528260808201528260a0820152600160c08201528260e08201528261010082015282610120820152600161014082015282610160820152826101808201520152612000301615156001148015906103cd575b80156103bc575b80156103af575b80156103a2575b8015610395575b8015610385575b8015610379575b801561036d575b8015610361575b8015610351575b8015610345575b8015610339575b801561032d575b61031a57825f604492819460209660a0528160c05283821060e052610100526040519263095ea7b360e01b84526004840152811960248401525af13d15601f3d1160015f5114161716156102e457604051611ac7908161047f823960805181818160f7015281816101f301528181610440015281816107200152818161079a01528181610877015281816109e60152818161122b015281816112a3015281816117760152611836015260a05181818161033c01528181610384015281816104ae01528181610b7b0152610de9015260c05181818161025f015281816103ce01528181610a8d01528181610e8a0152611339015260e05181818161021b015281816108fa0152610a3b015261010051818181610b4301528181610d0e01528181610e57015281816110cb01526111dd0152f35b60405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606490fd5b630732d7b560e51b5f523060045260245ffd5b506001301615156101b2565b506002301615156101ab565b506004301615156101a4565b506008301615156001141561019d565b50601030161515610196565b5060203016151561018f565b50604030161515610188565b5060803016151560011415610181565b506101003016151561017a565b5061020030161515610173565b506104003016151561016c565b506108003016151560011415610165565b506110003016151561015e565b90506020813d602011610418575b816103f56020938361045b565b8101031261041457516001600160a01b0381168103610414575f610077565b5f80fd5b3d91506103e8565b6040513d5f823e3d90fd5b6101c081019081106001600160401b0382111761044757604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176104475760405256fe6080806040526004361015610012575f80fd5b5f3560e01c9081630bc6bffc146112f15750806321d0ee7014611279578063259982e5146112015780634aa07e6414611193578063575e24b41461091f5780635d5711a5146108c55780636c2bbe7e1461076e5780636fe7e6eb146107e85780639f063efc1461076e578063b47b2fb114610659578063b6a8b0fa146100cc578063c4e833ce146104d2578063d52f63cf14610464578063dc4c90d3146103f6578063dc98354e146101715763e1b4af69146100cc575f80fd5b3461016d576100da3661156d565b50505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b3461016d5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d576101a861135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d576101db61154a565b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f000000000000000000000000000000000000000000000000000000000000000015610364576102476116f4565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116148061031b575b156102f35760643562ffffff811680910361016d576102cb5760206040517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b7f1213a0ab000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdcdedda9000000000000000000000000000000000000000000000000000000005f5260045ffd5b50610324611717565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b61036c6116f4565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614801561028857506103b6611717565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d575f6101a06040516105108161160e565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c060206040516105738161160e565b60018152818101905f82526040810160018152606082015f8152608083015f815260a084015f815260c085016001815260e08601905f82526101008701925f84526101208801945f8652610140890196600188526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461016d576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5761069161135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101443567ffffffffffffffff811161016d57610707903690600401611380565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d5761077c36611479565b5050505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5761082061135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5761085361154a565b5060e4358060020b0361016d5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b3461016d576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5761095761135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101243567ffffffffffffffff811161016d576109cd903690600401611380565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168033036101455760e4355f81129182809361118c575b6111645782158061115c575b6111345760c43580151580910361016d577f0000000000000000000000000000000000000000000000000000000000000000151503610dd057508115610ccb5773ffffffffffffffffffffffffffffffffffffffff6020610a8883611699565b610ab47f0000000000000000000000000000000000000000000000000000000000000000913083611757565b6024604051809481937f70a08231000000000000000000000000000000000000000000000000000000008352306004840152165afa908115610c8e575f91610c99575b50604051927fea598cb00000000000000000000000000000000000000000000000000000000084528160048501526020846024815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1938415610c8e575f94610c5a575b50610b9f84307f0000000000000000000000000000000000000000000000000000000000000000611816565b15610c4057505f8212610c1857610bcb610bc0610bc5610bc0606095611749565b6116c5565b92611749565b906fffffffffffffffffffffffffffffffff169060801b175b604051907f575e24b400000000000000000000000000000000000000000000000000000000825260208201525f6040820152f35b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b91505f8212610c1857610bcb610bc0610bc5606094611749565b9093506020813d602011610c86575b81610c7660209383611658565b8101031261016d57519284610b73565b3d9150610c69565b6040513d5f823e3d90fd5b90506020813d602011610cc3575b81610cb460209383611658565b8101031261016d575183610af7565b3d9150610ca7565b6040517f9576a0c800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c8e575f91610d9e575b507812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218211670de0b6b3a7640000021581021561016d57602073ffffffffffffffffffffffffffffffffffffffff91670de0b6b3a76400008402908082049106151501610a88565b90506020813d602011610dc8575b81610db960209383611658565b8101031261016d575183610d3e565b3d9150610dac565b91801561108257610de082611699565b905b610e0d82307f0000000000000000000000000000000000000000000000000000000000000000611757565b6040517fde0e9a3e0000000000000000000000000000000000000000000000000000000081528260048201526020816024815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610c8e575f91611050575b507f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff821695604051917f70a082310000000000000000000000000000000000000000000000000000000083528160048401526020836024818b5afa928315610c8e575f9361101a575b50610f1690602093943090611816565b6024604051809881937f70a0823100000000000000000000000000000000000000000000000000000000835260048301525afa948515610c8e575f95610fe6575b508403938411610fb95715610f9f57505f8212610c1857610f82610bc0610bc5610bc0606095611749565b906fffffffffffffffffffffffffffffffff169060801b17610be4565b91505f8212610c1857610f82610bc0610bc5606094611749565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9094506020813d602011611012575b8161100260209383611658565b8101031261016d57519385610f57565b3d9150610ff5565b9092506020813d602011611048575b8161103660209383611658565b8101031261016d575191610f16610f06565b3d9150611029565b90506020813d60201161107a575b8161106b60209383611658565b8101031261016d575185610e87565b3d915061105e565b6040517fb0e3890000000000000000000000000000000000000000000000000000000000815282600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c8e575f91611102575b5090610de2565b90506020813d60201161112c575b8161111d60209383611658565b8101031261016d5751846110fb565b3d9150611110565b7f21b865b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001610a28565b7f0ace433b000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f610a1c565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d5761120f366113ae565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f78895c13000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d57611287366113ae565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b9181601f8401121561016d5782359167ffffffffffffffff831161016d576020838186019501011161016d57565b906101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c491610144359067ffffffffffffffff821161016d5761147591600401611380565b9091565b906101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c49161014435916101643591610184359067ffffffffffffffff821161016d5761147591600401611380565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83011261016d5760249160c4359160e43591610104359067ffffffffffffffff821161016d5761147591600401611380565b6101c0810190811067ffffffffffffffff82111761162b57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761162b57604052565b7f80000000000000000000000000000000000000000000000000000000000000008114610fb9575f0390565b600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008114610fb9575f0390565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b60443573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b9081602091031261016d575190565b9081600f0b918203610c1857565b909180156118115773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561016d575f928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610c8e576118055750565b5f61180f91611658565b565b505050565b5f915082156118115773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b1561016d57604051907fa584119400000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff8116918260048201525f8160248183885af18015610c8e57611aa5575b50816119365750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561192a57506118ff5750565b6119209060203d602011611923575b6119188183611658565b81019061173a565b50565b503d61190e565b604051903d90823e3d90fd5b9091926040602082604481988285519788927fa9059cbb0000000000000000000000000000000000000000000000000000000084528b600485015260248401525af13d15601f3d116001855114161716928281528260208201520152156119d95750602082916004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561192a57506118ff5750565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011690604051927f90bfb86500000000000000000000000000000000000000000000000000000000845260048401527fa9059cbb000000000000000000000000000000000000000000000000000000006024840152608060448401528160a00160648401523d60848401523d9060a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b611ab29194505f90611658565b5f925f6118b756fea164736f6c634300081a000a000000000000000000000000000000000004444c5dc75cb358380d2e3de08a900000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0", - "nonce": "0x28", - "chainId": "0x1" - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": "0xbe0998cacc36d9689aaa6ada9975df5bf480b486cdd568a50b8140007f8fca81", - "transactionType": "CREATE2", - "contractName": "WstETHRoutingHook", - "contractAddress": "0x3ac6e14a142251eb3fe739399e0a8da81ed06888", - "function": null, - "arguments": [ - "0x000000000004444c5dc75cB358380D2e3dE08A90", - "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0" - ], - "transaction": { - "from": "0x2179a60856e37dfeaaca0ab043b931fe224b27b6", - "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "value": "0x0", - "input": "0x00000000000000000000000000000000000000000000000000000000000055cf610120806040523461040d57604081611f6780380380916100208285610454565b83398101031261040d578051906001600160a01b038216820361040d57602001516001600160a01b0381169182820361040d5760405163183fc7c960e31b8152602081600481875afa908115610419575f916103d3575b5060018060a01b0316906080525f6101a060405161009481610424565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06040516100f681610424565b60018152826020820152600160408201528260608201528260808201528260a0820152600160c08201528260e08201528261010082015282610120820152600161014082015282610160820152826101808201520152612000301615156001148015906103c6575b80156103b5575b80156103a8575b801561039b575b801561038e575b801561037e575b8015610372575b8015610366575b801561035a575b801561034a575b801561033e575b8015610332575b8015610326575b61031357825f604492819460209660a0528160c05283821060e052610100526040519263095ea7b360e01b84526004840152811960248401525af13d15601f3d1160015f5114161716156102dd57604051611aef9081610478823960805181818160f7015281816101f301528181610440015281816107200152818161079a01528181610877015281816109e601528181611253015281816112cb0152818161179e015261185e015260a05181818161033c01528181610384015281816104ae0152610e11015260c05181818161025f015281816103ce01528181610a8801528181610eb20152611361015260e05181818161021b015281816108fa0152610a3b015261010051818181610b7b01528181610d4e01528181610e7f015281816110f301526112050152f35b60405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606490fd5b630732d7b560e51b5f523060045260245ffd5b506001301615156101b2565b506002301615156101ab565b506004301615156101a4565b506008301615156001141561019d565b50601030161515610196565b5060203016151561018f565b50604030161515610188565b5060803016151560011415610181565b506101003016151561017a565b5061020030161515610173565b506104003016151561016c565b506108003016151560011415610165565b506110003016151561015e565b90506020813d602011610411575b816103ee60209383610454565b8101031261040d57516001600160a01b038116810361040d575f610077565b5f80fd5b3d91506103e1565b6040513d5f823e3d90fd5b6101c081019081106001600160401b0382111761044057604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176104405760405256fe6080806040526004361015610012575f80fd5b5f3560e01c9081630bc6bffc146113195750806321d0ee70146112a1578063259982e5146112295780634aa07e64146111bb578063575e24b41461091f5780635d5711a5146108c55780636c2bbe7e1461076e5780636fe7e6eb146107e85780639f063efc1461076e578063b47b2fb114610659578063b6a8b0fa146100cc578063c4e833ce146104d2578063d52f63cf14610464578063dc4c90d3146103f6578063dc98354e146101715763e1b4af69146100cc575f80fd5b3461016d576100da36611595565b50505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b3461016d5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d576101a8611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d576101db611572565b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0000000000000000000000000000000000000000000000000000000000000000156103645761024761171c565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116148061031b575b156102f35760643562ffffff811680910361016d576102cb5760206040517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b7f1213a0ab000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdcdedda9000000000000000000000000000000000000000000000000000000005f5260045ffd5b5061032461173f565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b61036c61171c565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614801561028857506103b661173f565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d575f6101a060405161051081611636565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c0602060405161057381611636565b60018152818101905f82526040810160018152606082015f8152608083015f815260a084015f815260c085016001815260e08601905f82526101008701925f84526101208801945f8652610140890196600188526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461016d576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57610691611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101443567ffffffffffffffff811161016d576107079036906004016113a8565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d5761077c366114a1565b5050505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57610820611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d57610853611572565b5060e4358060020b0361016d5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b3461016d576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57610957611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101243567ffffffffffffffff811161016d576109cd9036906004016113a8565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168033036101455760e4355f8112918280936111b4575b61118c57821580611184575b61115c5760c43580151580910361016d577f0000000000000000000000000000000000000000000000000000000000000000151503610df857508115610d0b57610a71816116c1565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690604051907f192084510000000000000000000000000000000000000000000000000000000082526004820152602081602481855afa8015610c9b575f90610cd8575b602091506024604051809481937f7a28fb8800000000000000000000000000000000000000000000000000000000835260048301525afa908115610c9b575f91610ca6575b50604051927fb0e3890000000000000000000000000000000000000000000000000000000000845281600485015260208460248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610c9b575f94610c67575b5015610c4d57505f8212610c2557610bd8610bcd610bd2610bcd606095611771565b6116ed565b92611771565b906fffffffffffffffffffffffffffffffff169060801b175b604051907f575e24b400000000000000000000000000000000000000000000000000000000825260208201525f6040820152f35b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b91505f8212610c2557610bd8610bcd610bd2606094611771565b9093506020813d602011610c93575b81610c8360209383611680565b8101031261016d57519284610bab565b3d9150610c76565b6040513d5f823e3d90fd5b90506020813d602011610cd0575b81610cc160209383611680565b8101031261016d575183610b30565b3d9150610cb4565b506020813d602011610d03575b81610cf260209383611680565b8101031261016d5760209051610aeb565b3d9150610ce5565b6040517f9576a0c800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c9b575f91610dc6575b507812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218211670de0b6b3a7640000021581021561016d57670de0b6b3a76400008202908082049106151501610a71565b90506020813d602011610df0575b81610de160209383611680565b8101031261016d575183610d7e565b3d9150610dd4565b9180156110aa57610e08826116c1565b905b610e3582307f000000000000000000000000000000000000000000000000000000000000000061177f565b6040517fde0e9a3e0000000000000000000000000000000000000000000000000000000081528260048201526020816024815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610c9b575f91611078575b507f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff821695604051917f70a082310000000000000000000000000000000000000000000000000000000083528160048401526020836024818b5afa928315610c9b575f93611042575b50610f3e9060209394309061183e565b6024604051809881937f70a0823100000000000000000000000000000000000000000000000000000000835260048301525afa948515610c9b575f9561100e575b508403938411610fe15715610fc757505f8212610c2557610faa610bcd610bd2610bcd606095611771565b906fffffffffffffffffffffffffffffffff169060801b17610bf1565b91505f8212610c2557610faa610bcd610bd2606094611771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9094506020813d60201161103a575b8161102a60209383611680565b8101031261016d57519385610f7f565b3d915061101d565b9092506020813d602011611070575b8161105e60209383611680565b8101031261016d575191610f3e610f2e565b3d9150611051565b90506020813d6020116110a2575b8161109360209383611680565b8101031261016d575185610eaf565b3d9150611086565b6040517fb0e3890000000000000000000000000000000000000000000000000000000000815282600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c9b575f9161112a575b5090610e0a565b90506020813d602011611154575b8161114560209383611680565b8101031261016d575184611123565b3d9150611138565b7f21b865b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001610a28565b7f0ace433b000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f610a1c565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d57611237366113d6565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f78895c13000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d576112af366113d6565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b9181601f8401121561016d5782359167ffffffffffffffff831161016d576020838186019501011161016d57565b906101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c491610144359067ffffffffffffffff821161016d5761149d916004016113a8565b9091565b906101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c49161014435916101643591610184359067ffffffffffffffff821161016d5761149d916004016113a8565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83011261016d5760249160c4359160e43591610104359067ffffffffffffffff821161016d5761149d916004016113a8565b6101c0810190811067ffffffffffffffff82111761165357604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761165357604052565b7f80000000000000000000000000000000000000000000000000000000000000008114610fe1575f0390565b600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008114610fe1575f0390565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b60443573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b9081602091031261016d575190565b9081600f0b918203610c2557565b909180156118395773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561016d575f928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610c9b5761182d5750565b5f61183791611680565b565b505050565b5f915082156118395773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b1561016d57604051907fa584119400000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff8116918260048201525f8160248183885af18015610c9b57611acd575b508161195e5750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561195257506119275750565b6119489060203d60201161194b575b6119408183611680565b810190611762565b50565b503d611936565b604051903d90823e3d90fd5b9091926040602082604481988285519788927fa9059cbb0000000000000000000000000000000000000000000000000000000084528b600485015260248401525af13d15601f3d11600185511416171692828152826020820152015215611a015750602082916004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561195257506119275750565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011690604051927f90bfb86500000000000000000000000000000000000000000000000000000000845260048401527fa9059cbb000000000000000000000000000000000000000000000000000000006024840152608060448401528160a00160648401523d60848401523d9060a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b611ada9194505f90611680565b5f925f6118df56fea164736f6c634300081a000a000000000000000000000000000000000004444c5dc75cb358380d2e3de08a900000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0", - "nonce": "0x29", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a", + "nonce": "0x85", "chainId": "0x1" }, "additionalContracts": [], @@ -46,73 +22,25 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0xa920cc", - "logs": [ - { - "address": "0xae7ab96520de3a18e5e111b5eaab095312d7fe84", - "topics": [ - "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "0x000000000000000000000000cdde8f9c3414a00f804e5c565eed9949ad17e888", - "0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0" - ], - "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "blockHash": "0xe59d87e984c9ba9b6909681282db6fd15d767b43a6edacaec8516af7dd9bb636", - "blockNumber": "0x15f5d07", - "transactionHash": "0x8c5526a3239bd3994144bae9d762efa945485ac9da9c51f53734a02ff9c62da2", - "transactionIndex": "0x3e", - "logIndex": "0xfa", - "removed": false - } - ], - "logsBloom": "0x00000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000020000000000000000000000000200000000000000000000000000000400000000000000000000000000000000000080000000000000000000000000000000000010000000000000000000000000000000000000044000000000000000000000", - "type": "0x2", - "transactionHash": "0x8c5526a3239bd3994144bae9d762efa945485ac9da9c51f53734a02ff9c62da2", - "transactionIndex": "0x3e", - "blockHash": "0xe59d87e984c9ba9b6909681282db6fd15d767b43a6edacaec8516af7dd9bb636", - "blockNumber": "0x15f5d07", - "gasUsed": "0x184121", - "effectiveGasPrice": "0x78bb29cd", - "from": "0x2179a60856e37dfeaaca0ab043b931fe224b27b6", - "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": "0xcdde8f9c3414a00f804e5c565eed9949ad17e888" - }, - { - "status": "0x1", - "cumulativeGasUsed": "0x7129d1", - "logs": [ - { - "address": "0xae7ab96520de3a18e5e111b5eaab095312d7fe84", - "topics": [ - "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "0x0000000000000000000000003ac6e14a142251eb3fe739399e0a8da81ed06888", - "0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0" - ], - "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "blockHash": "0x373c7757790d46e89dac19fe4330cce416b377c29b3f669e610fb2dc29774dee", - "blockNumber": "0x15f5d08", - "transactionHash": "0xbe0998cacc36d9689aaa6ada9975df5bf480b486cdd568a50b8140007f8fca81", - "transactionIndex": "0x2d", - "logIndex": "0xa8", - "removed": false - } - ], - "logsBloom": "0x00080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000020000000000000000000000000200000000000000000000000000000000040000000000000000000000000000000080000000000000000000000000000000000010000000000000000000000000000000000000004000000000000000000000", + "cumulativeGasUsed": "0x13f3106", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0xbe0998cacc36d9689aaa6ada9975df5bf480b486cdd568a50b8140007f8fca81", - "transactionIndex": "0x2d", - "blockHash": "0x373c7757790d46e89dac19fe4330cce416b377c29b3f669e610fb2dc29774dee", - "blockNumber": "0x15f5d08", - "gasUsed": "0x18629c", - "effectiveGasPrice": "0x748bd1df", - "from": "0x2179a60856e37dfeaaca0ab043b931fe224b27b6", + "transactionHash": "0x1d8dc0fa85e7d0a6ad41ea8d1bbce7f655625075b1c438e054559f32707fc90a", + "transactionIndex": "0xc3", + "blockHash": "0xf1749cb38b076d8cfa68da8f2119967741ecc36aafc095589ec44e75480f56a8", + "blockNumber": "0x16bef84", + "gasUsed": "0xb0794", + "effectiveGasPrice": "0x16ce13ce", + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": "0x3ac6e14a142251eb3fe739399e0a8da81ed06888" + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1753818223, + "timestamp": 1763770696, "chain": 1, - "commit": "320811c" + "commit": "185b4fc" } \ No newline at end of file diff --git a/broadcast/Deploy-all.s.sol/10/run-1763770897.json b/broadcast/Deploy-all.s.sol/10/run-1763770897.json new file mode 100644 index 00000000..253bc519 --- /dev/null +++ b/broadcast/Deploy-all.s.sol/10/run-1763770897.json @@ -0,0 +1,52 @@ +{ + "transactions": [ + { + "hash": "0x0a24c489a9bffe44e2fe971cd2e753625971913bcf03029895ea97b361099401", + "transactionType": "CREATE2", + "contractName": "OrderQuoter", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "function": null, + "arguments": null, + "transaction": { + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a", + "nonce": "0x1", + "chainId": "0xa" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1c161c", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0a24c489a9bffe44e2fe971cd2e753625971913bcf03029895ea97b361099401", + "transactionIndex": "0x6", + "blockHash": "0xc28e7f31ecdb22b5799f48850e16cbcfd0117a171b236241be72e377b69a7854", + "blockNumber": "0x896942b", + "gasUsed": "0xb0794", + "effectiveGasPrice": "0x1a1", + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "l1BaseFeeScalar": "0x146b", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xf79c5", + "l1Fee": "0xea3123448", + "l1GasPrice": "0x188bc681", + "l1GasUsed": "0x7215" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1763770897, + "chain": 10, + "commit": "185b4fc" +} \ No newline at end of file diff --git a/broadcast/Deploy-all.s.sol/10/run-latest.json b/broadcast/Deploy-all.s.sol/10/run-latest.json index 1242c402..253bc519 100644 --- a/broadcast/Deploy-all.s.sol/10/run-latest.json +++ b/broadcast/Deploy-all.s.sol/10/run-latest.json @@ -1,20 +1,18 @@ { "transactions": [ { - "hash": "0x029e91802d7ff5802ee09179c89f6f8ad98c1204405bd51e84fa1185b7239af0", + "hash": "0x0a24c489a9bffe44e2fe971cd2e753625971913bcf03029895ea97b361099401", "transactionType": "CREATE2", - "contractName": "ERC7914Detector", - "contractAddress": "0xc470458fc6a7e43471b31e6a2eb2612215a7102e", + "contractName": "OrderQuoter", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "function": null, - "arguments": [ - "0x000000009B1D0aF20D8C6d0A44e162d11F9b8f00" - ], + "arguments": null, "transaction": { "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", "value": "0x0", - "input": "0x000000000000000000000000000000000000000000000000000000000000000060a060405234801561001057600080fd5b506040516103c53803806103c583398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610335610090600039600081816068015260d301526103356000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806337e276381461003b57806385bb2fa814610063575b600080fd5b61004e6100493660046102b7565b6100a2565b60405190151581526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6000813b8082036100b65750600092915050565b6100bf83610135565b156101255760006100cf84610172565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610114575060019392505050565b61011d81610191565b949350505050565b61012e83610191565b9392505050565b60006017826001600160a01b03163b101561015257506000919050565b61ef0160f01b610161836102a6565b6001600160e81b0319161492915050565b60008061017e836102a6565b60481c6001600160a01b03169392505050565b6040805160006024820181905260448201819052606480830182905283518084039091018152608490920183526020820180516001600160e01b031663789ff70160e01b9081179091529251909291839182916001600160a01b038716916101f991906102e0565b600060405180830381855afa9150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b509150915081801561024c575080516020145b1561027f57600081806020019051810190610267919061030f565b90506001811161027d5750600195945050505050565b505b81801561028b57508051155b1561029b57506000949350505050565b506000949350505050565b60006017600080843c505060005190565b6000602082840312156102c957600080fd5b81356001600160a01b038116811461012e57600080fd5b6000825160005b8181101561030157602081860181015185830152016102e7565b506000920191825250919050565b60006020828403121561032157600080fd5b505191905056fea164736f6c6343000813000a000000000000000000000000000000009b1d0af20d8c6d0a44e162d11f9b8f00", - "nonce": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a", + "nonce": "0x1", "chainId": "0xa" }, "additionalContracts": [], @@ -24,33 +22,31 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x1d616a2", + "cumulativeGasUsed": "0x1c161c", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x029e91802d7ff5802ee09179c89f6f8ad98c1204405bd51e84fa1185b7239af0", - "transactionIndex": "0x15", - "blockHash": "0xbe48c7417e6ebbba21616ceef4af28385370ec06e2c6097f3e7acec994796ada", - "blockNumber": "0x85dca8c", - "gasUsed": "0x38cb0", - "effectiveGasPrice": "0x14d0", + "transactionHash": "0x0a24c489a9bffe44e2fe971cd2e753625971913bcf03029895ea97b361099401", + "transactionIndex": "0x6", + "blockHash": "0xc28e7f31ecdb22b5799f48850e16cbcfd0117a171b236241be72e377b69a7854", + "blockNumber": "0x896942b", + "gasUsed": "0xb0794", + "effectiveGasPrice": "0x1a1", "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": null, + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "l1BaseFeeScalar": "0x146b", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xf79c5", - "l1Fee": "0xe1d6a9596", - "l1GasPrice": "0x3c677bc8", - "l1GasUsed": "0x2cb4", - "operatorFeeConstant": "0x0", - "operatorFeeScalar": "0x0" + "l1Fee": "0xea3123448", + "l1GasPrice": "0x188bc681", + "l1GasUsed": "0x7215" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1756327634, + "timestamp": 1763770897, "chain": 10, - "commit": "320811c" + "commit": "185b4fc" } \ No newline at end of file diff --git a/broadcast/Deploy-all.s.sol/130/run-1763767180.json b/broadcast/Deploy-all.s.sol/130/run-1763767180.json new file mode 100644 index 00000000..f21c1bd6 --- /dev/null +++ b/broadcast/Deploy-all.s.sol/130/run-1763767180.json @@ -0,0 +1,52 @@ +{ + "transactions": [ + { + "hash": "0xfb02af7b9bf52d62bb4f6e23fd6479d99563be25603b24d7b0f84ace37631c83", + "transactionType": "CREATE2", + "contractName": null, + "contractAddress": "0x280cc1fc57a68d437a55f80201735cfd9a9ae40a", + "function": null, + "arguments": null, + "transaction": { + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xd2", + "chainId": "0x82" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x3cac1b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xfb02af7b9bf52d62bb4f6e23fd6479d99563be25603b24d7b0f84ace37631c83", + "transactionIndex": "0x3", + "blockHash": "0x060b119be2080867593118a868ba84ddd58b2e03f21106b97428f20a33cb5a98", + "blockNumber": "0x1f7d3c5", + "gasUsed": "0xcfdc", + "effectiveGasPrice": "0xf15", + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x280cc1fc57a68d437a55f80201735cfd9a9ae40a", + "l1BaseFeeScalar": "0x7d0", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xdbba0", + "l1Fee": "0x310aaa53", + "l1GasPrice": "0xf53551e", + "l1GasUsed": "0x640" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1763767180, + "chain": 130, + "commit": "185b4fc" +} \ No newline at end of file diff --git a/broadcast/Deploy-all.s.sol/130/run-1763768519.json b/broadcast/Deploy-all.s.sol/130/run-1763768519.json new file mode 100644 index 00000000..0cbc70e9 --- /dev/null +++ b/broadcast/Deploy-all.s.sol/130/run-1763768519.json @@ -0,0 +1,52 @@ +{ + "transactions": [ + { + "hash": "0xee16724a00d23c8b16974d008d18762ea653d16aa54147490888540961074d72", + "transactionType": "CREATE2", + "contractName": "OrderQuoter", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "function": null, + "arguments": null, + "transaction": { + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a", + "nonce": "0xd3", + "chainId": "0x82" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2ddbaa", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xee16724a00d23c8b16974d008d18762ea653d16aa54147490888540961074d72", + "transactionIndex": "0xb", + "blockHash": "0x7824b424e65284f841c6ad268afcf05f5e7c83871310991cf6b94db53d5ea0f8", + "blockNumber": "0x1f7d8ff", + "gasUsed": "0xb0794", + "effectiveGasPrice": "0xf09", + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "l1BaseFeeScalar": "0x7d0", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xdbba0", + "l1Fee": "0x3165297a", + "l1GasPrice": "0xf6f9cda", + "l1GasUsed": "0x724a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1763768519, + "chain": 130, + "commit": "185b4fc" +} \ No newline at end of file diff --git a/broadcast/Deploy-all.s.sol/130/run-latest.json b/broadcast/Deploy-all.s.sol/130/run-latest.json index 4544ecf2..0cbc70e9 100644 --- a/broadcast/Deploy-all.s.sol/130/run-latest.json +++ b/broadcast/Deploy-all.s.sol/130/run-latest.json @@ -1,20 +1,18 @@ { "transactions": [ { - "hash": "0xbec3c59bc540a2816c38d59072d375bb94ab3eb64d3377f6194e19928e5055b4", + "hash": "0xee16724a00d23c8b16974d008d18762ea653d16aa54147490888540961074d72", "transactionType": "CREATE2", - "contractName": "ERC7914Detector", - "contractAddress": "0xc470458fc6a7e43471b31e6a2eb2612215a7102e", + "contractName": "OrderQuoter", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "function": null, - "arguments": [ - "0x000000009B1D0aF20D8C6d0A44e162d11F9b8f00" - ], + "arguments": null, "transaction": { "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", "value": "0x0", - "input": "0x000000000000000000000000000000000000000000000000000000000000000060a060405234801561001057600080fd5b506040516103c53803806103c583398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610335610090600039600081816068015260d301526103356000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806337e276381461003b57806385bb2fa814610063575b600080fd5b61004e6100493660046102b7565b6100a2565b60405190151581526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6000813b8082036100b65750600092915050565b6100bf83610135565b156101255760006100cf84610172565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610114575060019392505050565b61011d81610191565b949350505050565b61012e83610191565b9392505050565b60006017826001600160a01b03163b101561015257506000919050565b61ef0160f01b610161836102a6565b6001600160e81b0319161492915050565b60008061017e836102a6565b60481c6001600160a01b03169392505050565b6040805160006024820181905260448201819052606480830182905283518084039091018152608490920183526020820180516001600160e01b031663789ff70160e01b9081179091529251909291839182916001600160a01b038716916101f991906102e0565b600060405180830381855afa9150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b509150915081801561024c575080516020145b1561027f57600081806020019051810190610267919061030f565b90506001811161027d5750600195945050505050565b505b81801561028b57508051155b1561029b57506000949350505050565b506000949350505050565b60006017600080843c505060005190565b6000602082840312156102c957600080fd5b81356001600160a01b038116811461012e57600080fd5b6000825160005b8181101561030157602081860181015185830152016102e7565b506000920191825250919050565b60006020828403121561032157600080fd5b505191905056fea164736f6c6343000813000a000000000000000000000000000000009b1d0af20d8c6d0a44e162d11f9b8f00", - "nonce": "0x73", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a", + "nonce": "0xd3", "chainId": "0x82" }, "additionalContracts": [], @@ -24,31 +22,31 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x4965c", + "cumulativeGasUsed": "0x2ddbaa", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0xbec3c59bc540a2816c38d59072d375bb94ab3eb64d3377f6194e19928e5055b4", - "transactionIndex": "0x2", - "blockHash": "0x16b62d18bf9a146ad8d0bb6e0578168fca62315bc0ea90dede5c5f6f2e6bd09d", - "blockNumber": "0x1864ab0", - "gasUsed": "0x38cb0", - "effectiveGasPrice": "0x182e", + "transactionHash": "0xee16724a00d23c8b16974d008d18762ea653d16aa54147490888540961074d72", + "transactionIndex": "0xb", + "blockHash": "0x7824b424e65284f841c6ad268afcf05f5e7c83871310991cf6b94db53d5ea0f8", + "blockNumber": "0x1f7d8ff", + "gasUsed": "0xb0794", + "effectiveGasPrice": "0xf09", "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": null, + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "l1BaseFeeScalar": "0x7d0", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xdbba0", - "l1Fee": "0xd8a83d0a3", - "l1GasPrice": "0x97458656", - "l1GasUsed": "0x2cc1" + "l1Fee": "0x3165297a", + "l1GasPrice": "0xf6f9cda", + "l1GasUsed": "0x724a" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1756326519, + "timestamp": 1763768519, "chain": 130, - "commit": "320811c" + "commit": "185b4fc" } \ No newline at end of file diff --git a/broadcast/Deploy-all.s.sol/42161/run-1763770994.json b/broadcast/Deploy-all.s.sol/42161/run-1763770994.json new file mode 100644 index 00000000..38079269 --- /dev/null +++ b/broadcast/Deploy-all.s.sol/42161/run-1763770994.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x623a6b68de99a854170c613ef7575d0b69752f9ac2c58255593a71e58f3feeef", + "transactionType": "CREATE2", + "contractName": "OrderQuoter", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "function": null, + "arguments": null, + "transaction": { + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a", + "nonce": "0x7a", + "chainId": "0xa4b1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xec9c8", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x623a6b68de99a854170c613ef7575d0b69752f9ac2c58255593a71e58f3feeef", + "transactionIndex": "0x4", + "blockHash": "0x13df6d4daa9b20b3956b9d54a3dc7651f7064e95a0de0396c219380bec249e1c", + "blockNumber": "0x18019a91", + "gasUsed": "0xb42f7", + "effectiveGasPrice": "0x989680", + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "gasUsedForL1": "0x3b63", + "l1BlockNumber": "0x16bef99", + "timeboosted": false + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1763770994, + "chain": 42161, + "commit": "185b4fc" +} \ No newline at end of file diff --git a/broadcast/Deploy-all.s.sol/42161/run-latest.json b/broadcast/Deploy-all.s.sol/42161/run-latest.json index d9b08815..38079269 100644 --- a/broadcast/Deploy-all.s.sol/42161/run-latest.json +++ b/broadcast/Deploy-all.s.sol/42161/run-latest.json @@ -1,20 +1,18 @@ { "transactions": [ { - "hash": "0x6da2799ec55636467d4eb25b495ba970a105150a478be5c1299acb2707803b7a", + "hash": "0x623a6b68de99a854170c613ef7575d0b69752f9ac2c58255593a71e58f3feeef", "transactionType": "CREATE2", - "contractName": "ERC7914Detector", - "contractAddress": "0xc470458fc6a7e43471b31e6a2eb2612215a7102e", + "contractName": "OrderQuoter", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "function": null, - "arguments": [ - "0x000000009B1D0aF20D8C6d0A44e162d11F9b8f00" - ], + "arguments": null, "transaction": { "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", "value": "0x0", - "input": "0x000000000000000000000000000000000000000000000000000000000000000060a060405234801561001057600080fd5b506040516103c53803806103c583398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610335610090600039600081816068015260d301526103356000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806337e276381461003b57806385bb2fa814610063575b600080fd5b61004e6100493660046102b7565b6100a2565b60405190151581526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6000813b8082036100b65750600092915050565b6100bf83610135565b156101255760006100cf84610172565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610114575060019392505050565b61011d81610191565b949350505050565b61012e83610191565b9392505050565b60006017826001600160a01b03163b101561015257506000919050565b61ef0160f01b610161836102a6565b6001600160e81b0319161492915050565b60008061017e836102a6565b60481c6001600160a01b03169392505050565b6040805160006024820181905260448201819052606480830182905283518084039091018152608490920183526020820180516001600160e01b031663789ff70160e01b9081179091529251909291839182916001600160a01b038716916101f991906102e0565b600060405180830381855afa9150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b509150915081801561024c575080516020145b1561027f57600081806020019051810190610267919061030f565b90506001811161027d5750600195945050505050565b505b81801561028b57508051155b1561029b57506000949350505050565b506000949350505050565b60006017600080843c505060005190565b6000602082840312156102c957600080fd5b81356001600160a01b038116811461012e57600080fd5b6000825160005b8181101561030157602081860181015185830152016102e7565b506000920191825250919050565b60006020828403121561032157600080fd5b505191905056fea164736f6c6343000813000a000000000000000000000000000000009b1d0af20d8c6d0a44e162d11f9b8f00", - "nonce": "0x79", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a", + "nonce": "0x7a", "chainId": "0xa4b1" }, "additionalContracts": [], @@ -24,28 +22,28 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0xfd669", + "cumulativeGasUsed": "0xec9c8", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x6da2799ec55636467d4eb25b495ba970a105150a478be5c1299acb2707803b7a", - "transactionIndex": "0x3", - "blockHash": "0x35abf46bfc242e6bab88d713e0c391d168d1be19fc28c38728b373385bfaf91a", - "blockNumber": "0x17b5bf0f", - "gasUsed": "0x39773", - "effectiveGasPrice": "0x60d9b38", + "transactionHash": "0x623a6b68de99a854170c613ef7575d0b69752f9ac2c58255593a71e58f3feeef", + "transactionIndex": "0x4", + "blockHash": "0x13df6d4daa9b20b3956b9d54a3dc7651f7064e95a0de0396c219380bec249e1c", + "blockNumber": "0x18019a91", + "gasUsed": "0xb42f7", + "effectiveGasPrice": "0x989680", "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": null, - "gasUsedForL1": "0xac3", - "l1BlockNumber": "0x16a5ea5", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "gasUsedForL1": "0x3b63", + "l1BlockNumber": "0x16bef99", "timeboosted": false } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1762529020, + "timestamp": 1763770994, "chain": 42161, - "commit": "952bce9" + "commit": "185b4fc" } \ No newline at end of file diff --git a/broadcast/Deploy-all.s.sol/8453/run-1763769180.json b/broadcast/Deploy-all.s.sol/8453/run-1763769180.json new file mode 100644 index 00000000..6b5d3cdc --- /dev/null +++ b/broadcast/Deploy-all.s.sol/8453/run-1763769180.json @@ -0,0 +1,52 @@ +{ + "transactions": [ + { + "hash": "0x5e67f48cdbdbac14f7fbb0f5d6fd6ff6df61fbb5b99a6ec57a2a77dc17628e83", + "transactionType": "CREATE2", + "contractName": "OrderQuoter", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "function": null, + "arguments": null, + "transaction": { + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a", + "nonce": "0x14c8", + "chainId": "0x2105" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xac67f1", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x5e67f48cdbdbac14f7fbb0f5d6fd6ff6df61fbb5b99a6ec57a2a77dc17628e83", + "transactionIndex": "0x56", + "blockHash": "0x04ba969380586c52459df4506c4949d7de5f2bcc5323001df16b54600355c45e", + "blockNumber": "0x24b4f3d", + "gasUsed": "0xb0794", + "effectiveGasPrice": "0x47ec18", + "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "l1BaseFeeScalar": "0x8dd", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0x101c12", + "l1Fee": "0x4e839590", + "l1GasPrice": "0xcebcd85", + "l1GasUsed": "0x7280" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1763769180, + "chain": 8453, + "commit": "185b4fc" +} \ No newline at end of file diff --git a/broadcast/Deploy-all.s.sol/8453/run-latest.json b/broadcast/Deploy-all.s.sol/8453/run-latest.json index cf6f9cb2..6b5d3cdc 100644 --- a/broadcast/Deploy-all.s.sol/8453/run-latest.json +++ b/broadcast/Deploy-all.s.sol/8453/run-latest.json @@ -1,20 +1,18 @@ { "transactions": [ { - "hash": "0x18eaf38c7be1c336bea3fde5638af076232c9d3c537203b8c9671e0962e3baac", + "hash": "0x5e67f48cdbdbac14f7fbb0f5d6fd6ff6df61fbb5b99a6ec57a2a77dc17628e83", "transactionType": "CREATE2", - "contractName": "ERC7914Detector", - "contractAddress": "0xc470458fc6a7e43471b31e6a2eb2612215a7102e", + "contractName": "OrderQuoter", + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "function": null, - "arguments": [ - "0x000000009B1D0aF20D8C6d0A44e162d11F9b8f00" - ], + "arguments": null, "transaction": { "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", "value": "0x0", - "input": "0x000000000000000000000000000000000000000000000000000000000000000060a060405234801561001057600080fd5b506040516103c53803806103c583398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610335610090600039600081816068015260d301526103356000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806337e276381461003b57806385bb2fa814610063575b600080fd5b61004e6100493660046102b7565b6100a2565b60405190151581526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6000813b8082036100b65750600092915050565b6100bf83610135565b156101255760006100cf84610172565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610114575060019392505050565b61011d81610191565b949350505050565b61012e83610191565b9392505050565b60006017826001600160a01b03163b101561015257506000919050565b61ef0160f01b610161836102a6565b6001600160e81b0319161492915050565b60008061017e836102a6565b60481c6001600160a01b03169392505050565b6040805160006024820181905260448201819052606480830182905283518084039091018152608490920183526020820180516001600160e01b031663789ff70160e01b9081179091529251909291839182916001600160a01b038716916101f991906102e0565b600060405180830381855afa9150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b509150915081801561024c575080516020145b1561027f57600081806020019051810190610267919061030f565b90506001811161027d5750600195945050505050565b505b81801561028b57508051155b1561029b57506000949350505050565b506000949350505050565b60006017600080843c505060005190565b6000602082840312156102c957600080fd5b81356001600160a01b038116811461012e57600080fd5b6000825160005b8181101561030157602081860181015185830152016102e7565b506000920191825250919050565b60006020828403121561032157600080fd5b505191905056fea164736f6c6343000813000a000000000000000000000000000000009b1d0af20d8c6d0a44e162d11f9b8f00", - "nonce": "0x143a", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a", + "nonce": "0x14c8", "chainId": "0x2105" }, "additionalContracts": [], @@ -24,31 +22,31 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x187fa83", + "cumulativeGasUsed": "0xac67f1", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x18eaf38c7be1c336bea3fde5638af076232c9d3c537203b8c9671e0962e3baac", - "transactionIndex": "0x87", - "blockHash": "0xd5acdc381a080a333b49412b5e0e5691e976104877af0a4b14f81fd6dff9f7ff", - "blockNumber": "0x212878c", - "gasUsed": "0x38cb0", - "effectiveGasPrice": "0x14e74c1", + "transactionHash": "0x5e67f48cdbdbac14f7fbb0f5d6fd6ff6df61fbb5b99a6ec57a2a77dc17628e83", + "transactionIndex": "0x56", + "blockHash": "0x04ba969380586c52459df4506c4949d7de5f2bcc5323001df16b54600355c45e", + "blockNumber": "0x24b4f3d", + "gasUsed": "0xb0794", + "effectiveGasPrice": "0x47ec18", "from": "0x250a94c03b9b57c93cc5549760d59d6eacfb136d", "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "contractAddress": null, + "contractAddress": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "l1BaseFeeScalar": "0x8dd", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0x101c12", - "l1Fee": "0xff117d105", - "l1GasPrice": "0x9be27239", - "l1GasUsed": "0x2d12" + "l1Fee": "0x4e839590", + "l1GasPrice": "0xcebcd85", + "l1GasUsed": "0x7280" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1756326906, + "timestamp": 1763769180, "chain": 8453, - "commit": "320811c" + "commit": "185b4fc" } \ No newline at end of file diff --git a/deployments/1.md b/deployments/1.md index a0122645..ac27594c 100644 --- a/deployments/1.md +++ b/deployments/1.md @@ -36,23 +36,24 @@ - [Uniswap V2 Factory](#uniswap-v2-factory) - [Calibur Entry](#calibur-entry) - [Deployment History](#deployment-history) - - [Fri May 23 2025](#fri-may-23-2025) + - [Fri Nov 21 2025](#fri-nov-21-2025) - [Wed Aug 27 2025](#wed-aug-27-2025) + - [Fri May 23 2025](#fri-may-23-2025) - [Fri May 02 2025](#fri-may-02-2025) - - [Thu Jan 30 2025](#thu-jan-30-2025) + - [Wed Jan 29 2025](#wed-jan-29-2025) - [Thu Jan 23 2025](#thu-jan-23-2025) - [Tue Jul 09 2024](#tue-jul-09-2024) - - [Fri May 10 2024](#fri-may-10-2024) - - [Tue May 07 2024](#tue-may-07-2024) + - [Thu May 09 2024](#thu-may-09-2024) + - [Mon May 06 2024](#mon-may-06-2024) - [Mon Apr 15 2024](#mon-apr-15-2024) - [Fri Jan 26 2024](#fri-jan-26-2024) - [Wed Jul 26 2023](#wed-jul-26-2023) - [Fri Apr 28 2023](#fri-apr-28-2023) - [Tue Nov 29 2022](#tue-nov-29-2022) - - [Thu Nov 17 2022](#thu-nov-17-2022) + - [Wed Nov 16 2022](#wed-nov-16-2022) - [Fri Jul 22 2022](#fri-jul-22-2022) - [Tue Dec 14 2021](#tue-dec-14-2021) - - [Thu Dec 02 2021](#thu-dec-02-2021) + - [Wed Dec 01 2021](#wed-dec-01-2021) - [Tue May 04 2021](#tue-may-04-2021) - [Fri Jun 05 2020](#fri-jun-05-2020) - [Mon May 04 2020](#mon-may-04-2020) @@ -140,7 +141,7 @@ OrderQuoter - 0x54539967a06Fc0E3C3ED0ee320Eb67362D13C5fF + 0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4 N/A @@ -492,15 +493,15 @@ Mon, 15 Apr 2024 18:21:35 UTC ### Order Quoter -Address: [0x54539967a06Fc0E3C3ED0ee320Eb67362D13C5fF](https://etherscan.io/address/0x54539967a06Fc0E3C3ED0ee320Eb67362D13C5fF) +Address: [0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4](https://etherscan.io/address/0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4) -Deployment Transaction: [0x7743c23afeca03c875e3664159eb71381d981a0e689ed7e8adceea6db769f107](https://etherscan.io/tx/0x7743c23afeca03c875e3664159eb71381d981a0e689ed7e8adceea6db769f107) +Deployment Transaction: [0x1d8dc0fa85e7d0a6ad41ea8d1bbce7f655625075b1c438e054559f32707fc90a](https://etherscan.io/tx/0x1d8dc0fa85e7d0a6ad41ea8d1bbce7f655625075b1c438e054559f32707fc90a) +Commit Hash: [185b4fc](https://github.com/Uniswap/contracts/commit/185b4fc) - -Wed, 26 Jul 2023 14:56:35 UTC +Sat, 22 Nov 2025 00:18:16 UTC @@ -780,7 +781,7 @@ Fri, 23 May 2025 19:33:25 UTC ## Deployment History -### Fri May 23 2025 +### Fri Nov 21 2025 @@ -788,11 +789,11 @@ Deployed contracts:
- Calibur Entry + Order Quoter - +
Commit hash: 0a52cd5Commit hash: 185b4fc
@@ -888,6 +889,25 @@ Deployed contracts: +### Fri May 23 2025 + + + +Deployed contracts: + +
+ + Calibur Entry + + + + + +
Commit hash: 0a52cd5
+
+ + + ### Fri May 02 2025 @@ -941,7 +961,7 @@ Deployed contracts: -### Thu Jan 30 2025 +### Wed Jan 29 2025 @@ -1138,7 +1158,7 @@ Deployed contracts: -### Fri May 10 2024 +### Thu May 09 2024 @@ -1175,7 +1195,7 @@ Deployed contracts: -### Tue May 07 2024 +### Mon May 06 2024 @@ -1341,7 +1361,7 @@ Deployed contracts: -### Thu Nov 17 2022 +### Wed Nov 16 2022 @@ -1428,7 +1448,7 @@ Deployed contracts: -### Thu Dec 02 2021 +### Wed Dec 01 2021 diff --git a/deployments/10.md b/deployments/10.md index a0d5abff..97b55a73 100644 --- a/deployments/10.md +++ b/deployments/10.md @@ -25,21 +25,23 @@ - [Calibur Entry](#calibur-entry) - [W E T H Hook](#w-e-t-h-hook) - [E R C7914 Detector](#e-r-c7914-detector) + - [Order Quoter](#order-quoter) - [Deployment History](#deployment-history) - - [Fri May 23 2025](#fri-may-23-2025) + - [Fri Nov 21 2025](#fri-nov-21-2025) - [Wed Aug 27 2025](#wed-aug-27-2025) + - [Fri May 23 2025](#fri-may-23-2025) - [Fri May 02 2025](#fri-may-02-2025) - [Tue Jan 21 2025](#tue-jan-21-2025) - [Tue Jul 09 2024](#tue-jul-09-2024) - - [Fri May 10 2024](#fri-may-10-2024) + - [Thu May 09 2024](#thu-may-09-2024) - [Thu Feb 08 2024](#thu-feb-08-2024) - [Thu Jan 11 2024](#thu-jan-11-2024) - [Tue Nov 14 2023](#tue-nov-14-2023) - [Mon Aug 28 2023](#mon-aug-28-2023) - [Tue Nov 29 2022](#tue-nov-29-2022) - - [Thu Nov 17 2022](#thu-nov-17-2022) + - [Wed Nov 16 2022](#wed-nov-16-2022) - [Tue Dec 14 2021](#tue-dec-14-2021) - - [Thu Dec 02 2021](#thu-dec-02-2021) + - [Wed Dec 01 2021](#wed-dec-01-2021) - [Thu Nov 11 2021](#thu-nov-11-2021) ## Summary @@ -152,6 +154,11 @@ ERC7914Detector 0xc470458fc6a7e43471b31e6a2eb2612215a7102e N/A + + + OrderQuoter + 0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4 + N/A ## Contracts @@ -552,10 +559,26 @@ Wed, 27 Aug 2025 20:47:14 UTC +--- + +### Order Quoter + +Address: [0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4](https://optimistic.etherscan.io/address/0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4) + +Deployment Transaction: [0x0a24c489a9bffe44e2fe971cd2e753625971913bcf03029895ea97b361099401](https://optimistic.etherscan.io/tx/0x0a24c489a9bffe44e2fe971cd2e753625971913bcf03029895ea97b361099401) + + + +Commit Hash: [185b4fc](https://github.com/Uniswap/contracts/commit/185b4fc) + +Sat, 22 Nov 2025 00:21:37 UTC + + + ## Deployment History -### Fri May 23 2025 +### Fri Nov 21 2025 @@ -563,11 +586,11 @@ Deployed contracts:
- Calibur Entry + Order Quoter - +
Commit hash: 0a52cd5Commit hash: 185b4fc
@@ -601,6 +624,25 @@ Deployed contracts: +### Fri May 23 2025 + + + +Deployed contracts: + +
+ + Calibur Entry + + + + + +
Commit hash: 0a52cd5
+
+ + + ### Fri May 02 2025 @@ -798,7 +840,7 @@ Deployed contracts: -### Fri May 10 2024 +### Thu May 09 2024 @@ -964,7 +1006,7 @@ Deployed contracts: -### Thu Nov 17 2022 +### Wed Nov 16 2022 @@ -1018,7 +1060,7 @@ Deployed contracts: -### Thu Dec 02 2021 +### Wed Dec 01 2021 diff --git a/deployments/130.md b/deployments/130.md index 8f16f27a..137bf023 100644 --- a/deployments/130.md +++ b/deployments/130.md @@ -23,9 +23,11 @@ - [Calibur Entry](#calibur-entry) - [W E T H Hook](#w-e-t-h-hook) - [E R C7914 Detector](#e-r-c7914-detector) + - [Order Quoter](#order-quoter) - [Deployment History](#deployment-history) - - [Fri May 23 2025](#fri-may-23-2025) + - [Fri Nov 21 2025](#fri-nov-21-2025) - [Wed Aug 27 2025](#wed-aug-27-2025) + - [Fri May 23 2025](#fri-may-23-2025) - [Fri May 02 2025](#fri-may-02-2025) - [Wed Jan 22 2025](#wed-jan-22-2025) - [Fri Nov 08 2024](#fri-nov-08-2024) @@ -130,6 +132,11 @@ ERC7914Detector 0xc470458fc6a7e43471b31e6a2eb2612215a7102e N/A + + + OrderQuoter + 0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4 + N/A ## Contracts @@ -498,10 +505,26 @@ Wed, 27 Aug 2025 20:28:39 UTC +--- + +### Order Quoter + +Address: [0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4](https://uniscan.xyz/address/0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4) + +Deployment Transaction: [0xee16724a00d23c8b16974d008d18762ea653d16aa54147490888540961074d72](https://uniscan.xyz/tx/0xee16724a00d23c8b16974d008d18762ea653d16aa54147490888540961074d72) + + + +Commit Hash: [185b4fc](https://github.com/Uniswap/contracts/commit/185b4fc) + +Fri, 21 Nov 2025 23:41:59 UTC + + + ## Deployment History -### Fri May 23 2025 +### Fri Nov 21 2025 @@ -509,11 +532,11 @@ Deployed contracts:
- Calibur Entry + Order Quoter - +
Commit hash: 0a52cd5Commit hash: 185b4fc
@@ -565,6 +588,25 @@ Deployed contracts: +### Fri May 23 2025 + + + +Deployed contracts: + +
+ + Calibur Entry + + + + + +
Commit hash: 0a52cd5
+
+ + + ### Fri May 02 2025 diff --git a/deployments/42161.md b/deployments/42161.md index 36903ece..534c99a4 100644 --- a/deployments/42161.md +++ b/deployments/42161.md @@ -28,23 +28,25 @@ - [Swap Router](#swap-router) - [Uniswap V3 Factory](#uniswap-v3-factory) - [Calibur Entry](#calibur-entry) + - [Order Quoter](#order-quoter) - [Deployment History](#deployment-history) - - [Tue Aug 19 2025](#tue-aug-19-2025) + - [Fri Nov 21 2025](#fri-nov-21-2025) - [Fri Nov 07 2025](#fri-nov-07-2025) + - [Tue Aug 19 2025](#tue-aug-19-2025) - [Fri May 02 2025](#fri-may-02-2025) - [Thu Feb 13 2025](#thu-feb-13-2025) - [Tue Jan 21 2025](#tue-jan-21-2025) - [Tue Jul 09 2024](#tue-jul-09-2024) - [Wed May 15 2024](#wed-may-15-2024) - - [Fri May 10 2024](#fri-may-10-2024) + - [Thu May 09 2024](#thu-may-09-2024) - [Wed Jan 31 2024](#wed-jan-31-2024) - [Thu Jan 11 2024](#thu-jan-11-2024) - [Tue Nov 14 2023](#tue-nov-14-2023) - [Mon Aug 28 2023](#mon-aug-28-2023) - [Tue Nov 29 2022](#tue-nov-29-2022) - - [Thu Nov 17 2022](#thu-nov-17-2022) + - [Wed Nov 16 2022](#wed-nov-16-2022) - [Tue Dec 14 2021](#tue-dec-14-2021) - - [Thu Dec 02 2021](#thu-dec-02-2021) + - [Wed Dec 01 2021](#wed-dec-01-2021) - [Tue Jun 01 2021](#tue-jun-01-2021) ## Summary @@ -172,6 +174,11 @@ CaliburEntry 0x000000009b1d0af20d8c6d0a44e162d11f9b8f00 N/A + + + OrderQuoter + 0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4 + N/A ## Contracts @@ -587,10 +594,26 @@ Tue, 19 Aug 2025 20:15:18 UTC +--- + +### Order Quoter + +Address: [0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4](https://arbiscan.io/address/0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4) + +Deployment Transaction: [0x623a6b68de99a854170c613ef7575d0b69752f9ac2c58255593a71e58f3feeef](https://arbiscan.io/tx/0x623a6b68de99a854170c613ef7575d0b69752f9ac2c58255593a71e58f3feeef) + + + +Commit Hash: [185b4fc](https://github.com/Uniswap/contracts/commit/185b4fc) + +Sat, 22 Nov 2025 00:23:14 UTC + + + ## Deployment History -### Tue Aug 19 2025 +### Fri Nov 21 2025 @@ -598,11 +621,11 @@ Deployed contracts:
- Calibur Entry + Order Quoter - +
Commit hash: 0a52cd5Commit hash: 185b4fc
@@ -636,6 +659,25 @@ Deployed contracts: +### Tue Aug 19 2025 + + + +Deployed contracts: + +
+ + Calibur Entry + + + + + +
Commit hash: 0a52cd5
+
+ + + ### Fri May 02 2025 @@ -895,7 +937,7 @@ Deployed contracts: -### Fri May 10 2024 +### Thu May 09 2024 @@ -1061,7 +1103,7 @@ Deployed contracts: -### Thu Nov 17 2022 +### Wed Nov 16 2022 @@ -1115,7 +1157,7 @@ Deployed contracts: -### Thu Dec 02 2021 +### Wed Dec 01 2021 diff --git a/deployments/8453.md b/deployments/8453.md index 537dc96f..07c7c866 100644 --- a/deployments/8453.md +++ b/deployments/8453.md @@ -29,14 +29,16 @@ - [Calibur Entry](#calibur-entry) - [W E T H Hook](#w-e-t-h-hook) - [E R C7914 Detector](#e-r-c7914-detector) + - [Order Quoter](#order-quoter) - [Deployment History](#deployment-history) - - [Fri May 23 2025](#fri-may-23-2025) + - [Fri Nov 21 2025](#fri-nov-21-2025) - [Wed Aug 27 2025](#wed-aug-27-2025) + - [Fri May 23 2025](#fri-may-23-2025) - [Fri May 02 2025](#fri-may-02-2025) - [Tue Jan 21 2025](#tue-jan-21-2025) - [Mon Aug 05 2024](#mon-aug-05-2024) - [Tue Jul 09 2024](#tue-jul-09-2024) - - [Fri May 10 2024](#fri-may-10-2024) + - [Thu May 09 2024](#thu-may-09-2024) - [Fri Apr 19 2024](#fri-apr-19-2024) - [Tue Apr 09 2024](#tue-apr-09-2024) - [Thu Feb 08 2024](#thu-feb-08-2024) @@ -44,6 +46,7 @@ - [Tue Nov 14 2023](#tue-nov-14-2023) - [Mon Aug 28 2023](#mon-aug-28-2023) - [Tue Jul 18 2023](#tue-jul-18-2023) + - [Mon Jul 17 2023](#mon-jul-17-2023) - [Sun Jul 16 2023](#sun-jul-16-2023) ## Summary @@ -176,6 +179,11 @@ ERC7914Detector 0xc470458fc6a7e43471b31e6a2eb2612215a7102e N/A + + + OrderQuoter + 0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4 + N/A ## Contracts @@ -607,10 +615,26 @@ Wed, 27 Aug 2025 20:35:06 UTC +--- + +### Order Quoter + +Address: [0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4](https://basescan.org/address/0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4) + +Deployment Transaction: [0x5e67f48cdbdbac14f7fbb0f5d6fd6ff6df61fbb5b99a6ec57a2a77dc17628e83](https://basescan.org/tx/0x5e67f48cdbdbac14f7fbb0f5d6fd6ff6df61fbb5b99a6ec57a2a77dc17628e83) + + + +Commit Hash: [185b4fc](https://github.com/Uniswap/contracts/commit/185b4fc) + +Fri, 21 Nov 2025 23:53:00 UTC + + + ## Deployment History -### Fri May 23 2025 +### Fri Nov 21 2025 @@ -618,11 +642,11 @@ Deployed contracts:
- Calibur Entry + Order Quoter - +
Commit hash: 0a52cd5Commit hash: 185b4fc
@@ -656,6 +680,25 @@ Deployed contracts: +### Fri May 23 2025 + + + +Deployed contracts: + +
+ + Calibur Entry + + + + + +
Commit hash: 0a52cd5
+
+ + + ### Fri May 02 2025 @@ -882,7 +925,7 @@ Deployed contracts: -### Fri May 10 2024 +### Thu May 09 2024 @@ -1103,6 +1146,15 @@ Deployed contracts: + + + +### Mon Jul 17 2023 + + + +Deployed contracts: +
Permit2 diff --git a/deployments/json/1.json b/deployments/json/1.json index 9dd42770..98a4e6a2 100644 --- a/deployments/json/1.json +++ b/deployments/json/1.json @@ -104,10 +104,11 @@ "timestamp": 1713205295 }, "OrderQuoter": { - "address": "0x54539967a06Fc0E3C3ED0ee320Eb67362D13C5fF", + "address": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "proxy": false, - "deploymentTxn": "0x7743c23afeca03c875e3664159eb71381d981a0e689ed7e8adceea6db769f107", - "timestamp": 1690383395 + "deploymentTxn": "0x1d8dc0fa85e7d0a6ad41ea8d1bbce7f655625075b1c438e054559f32707fc90a", + "timestamp": 1763770696, + "commitHash": "185b4fc" }, "ExclusiveDutchOrderReactor": { "address": "0x6000da47483062A0D734Ba3dc7576Ce6A0B645C4", @@ -207,17 +208,17 @@ "history": [ { "contracts": { - "CaliburEntry": { - "address": "0x000000009b1d0af20d8c6d0a44e162d11f9b8f00", + "OrderQuoter": { + "address": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "proxy": false, - "deploymentTxn": "0xf7d094c82512c971d821190e914eada76eec34da638736f09fa2fe1a9456d894", + "deploymentTxn": "0x1d8dc0fa85e7d0a6ad41ea8d1bbce7f655625075b1c438e054559f32707fc90a", "input": { "constructor": {} } } }, - "timestamp": 1748028805, - "commitHash": "0a52cd5" + "timestamp": 1763770696, + "commitHash": "185b4fc" }, { "contracts": { @@ -273,6 +274,20 @@ "timestamp": 1756325186, "commitHash": "320811c" }, + { + "contracts": { + "CaliburEntry": { + "address": "0x000000009b1d0af20d8c6d0a44e162d11f9b8f00", + "proxy": false, + "deploymentTxn": "0xf7d094c82512c971d821190e914eada76eec34da638736f09fa2fe1a9456d894", + "input": { + "constructor": {} + } + } + }, + "timestamp": 1748028805, + "commitHash": "0a52cd5" + }, { "contracts": { "WETHHook": { diff --git a/deployments/json/10.json b/deployments/json/10.json index 49b38fb4..6fdcae74 100644 --- a/deployments/json/10.json +++ b/deployments/json/10.json @@ -140,22 +140,29 @@ "deploymentTxn": "0x029e91802d7ff5802ee09179c89f6f8ad98c1204405bd51e84fa1185b7239af0", "timestamp": 1756327634, "commitHash": "320811c" + }, + "OrderQuoter": { + "address": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "proxy": false, + "deploymentTxn": "0x0a24c489a9bffe44e2fe971cd2e753625971913bcf03029895ea97b361099401", + "timestamp": 1763770897, + "commitHash": "185b4fc" } }, "history": [ { "contracts": { - "CaliburEntry": { - "address": "0x000000009b1d0af20d8c6d0a44e162d11f9b8f00", + "OrderQuoter": { + "address": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "proxy": false, - "deploymentTxn": "0x4cdc692812bf930011f4226d2d02496535ccaa77eb9168ced831efa52a00c3a5", + "deploymentTxn": "0x0a24c489a9bffe44e2fe971cd2e753625971913bcf03029895ea97b361099401", "input": { "constructor": {} } } }, - "timestamp": 1748029032, - "commitHash": "0a52cd5" + "timestamp": 1763770897, + "commitHash": "185b4fc" }, { "contracts": { @@ -173,6 +180,20 @@ "timestamp": 1756327634, "commitHash": "320811c" }, + { + "contracts": { + "CaliburEntry": { + "address": "0x000000009b1d0af20d8c6d0a44e162d11f9b8f00", + "proxy": false, + "deploymentTxn": "0x4cdc692812bf930011f4226d2d02496535ccaa77eb9168ced831efa52a00c3a5", + "input": { + "constructor": {} + } + } + }, + "timestamp": 1748029032, + "commitHash": "0a52cd5" + }, { "contracts": { "WETHHook": { diff --git a/deployments/json/130.json b/deployments/json/130.json index 177de1ff..5dba1024 100644 --- a/deployments/json/130.json +++ b/deployments/json/130.json @@ -138,22 +138,29 @@ "deploymentTxn": "0xbec3c59bc540a2816c38d59072d375bb94ab3eb64d3377f6194e19928e5055b4", "timestamp": 1756326519, "commitHash": "320811c" + }, + "OrderQuoter": { + "address": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "proxy": false, + "deploymentTxn": "0xee16724a00d23c8b16974d008d18762ea653d16aa54147490888540961074d72", + "timestamp": 1763768519, + "commitHash": "185b4fc" } }, "history": [ { "contracts": { - "CaliburEntry": { - "address": "0x000000009b1d0af20d8c6d0a44e162d11f9b8f00", + "OrderQuoter": { + "address": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "proxy": false, - "deploymentTxn": "0x3c7fe24fc0319f1597d783bfd792aa4a4051847234eb26ba5f3bb1d6f14fdbf7", + "deploymentTxn": "0xee16724a00d23c8b16974d008d18762ea653d16aa54147490888540961074d72", "input": { "constructor": {} } } }, - "timestamp": 1748028920, - "commitHash": "0a52cd5" + "timestamp": 1763768519, + "commitHash": "185b4fc" }, { "contracts": { @@ -187,6 +194,20 @@ "timestamp": 1756325966, "commitHash": "320811c" }, + { + "contracts": { + "CaliburEntry": { + "address": "0x000000009b1d0af20d8c6d0a44e162d11f9b8f00", + "proxy": false, + "deploymentTxn": "0x3c7fe24fc0319f1597d783bfd792aa4a4051847234eb26ba5f3bb1d6f14fdbf7", + "input": { + "constructor": {} + } + } + }, + "timestamp": 1748028920, + "commitHash": "0a52cd5" + }, { "contracts": { "WETHHook": { diff --git a/deployments/json/42161.json b/deployments/json/42161.json index a1350b85..dd7b9d98 100644 --- a/deployments/json/42161.json +++ b/deployments/json/42161.json @@ -156,22 +156,29 @@ "deploymentTxn": "0x7b50a77ad5545257fa9f21ac84185039fb1941d7915ec9b004d8de65fd7d22fd", "timestamp": 1755634518, "commitHash": "0a52cd5" + }, + "OrderQuoter": { + "address": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "proxy": false, + "deploymentTxn": "0x623a6b68de99a854170c613ef7575d0b69752f9ac2c58255593a71e58f3feeef", + "timestamp": 1763770994, + "commitHash": "185b4fc" } }, "history": [ { "contracts": { - "CaliburEntry": { - "address": "0x000000009b1d0af20d8c6d0a44e162d11f9b8f00", + "OrderQuoter": { + "address": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "proxy": false, - "deploymentTxn": "0x7b50a77ad5545257fa9f21ac84185039fb1941d7915ec9b004d8de65fd7d22fd", + "deploymentTxn": "0x623a6b68de99a854170c613ef7575d0b69752f9ac2c58255593a71e58f3feeef", "input": { "constructor": {} } } }, - "timestamp": 1755634518, - "commitHash": "0a52cd5" + "timestamp": 1763770994, + "commitHash": "185b4fc" }, { "contracts": { @@ -189,6 +196,20 @@ "timestamp": 1762529020, "commitHash": "952bce9" }, + { + "contracts": { + "CaliburEntry": { + "address": "0x000000009b1d0af20d8c6d0a44e162d11f9b8f00", + "proxy": false, + "deploymentTxn": "0x7b50a77ad5545257fa9f21ac84185039fb1941d7915ec9b004d8de65fd7d22fd", + "input": { + "constructor": {} + } + } + }, + "timestamp": 1755634518, + "commitHash": "0a52cd5" + }, { "contracts": { "WETHHook": { diff --git a/deployments/json/8453.json b/deployments/json/8453.json index 1b64bb72..ede83099 100644 --- a/deployments/json/8453.json +++ b/deployments/json/8453.json @@ -161,22 +161,29 @@ "deploymentTxn": "0x18eaf38c7be1c336bea3fde5638af076232c9d3c537203b8c9671e0962e3baac", "timestamp": 1756326906, "commitHash": "320811c" + }, + "OrderQuoter": { + "address": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", + "proxy": false, + "deploymentTxn": "0x5e67f48cdbdbac14f7fbb0f5d6fd6ff6df61fbb5b99a6ec57a2a77dc17628e83", + "timestamp": 1763769180, + "commitHash": "185b4fc" } }, "history": [ { "contracts": { - "CaliburEntry": { - "address": "0x000000009b1d0af20d8c6d0a44e162d11f9b8f00", + "OrderQuoter": { + "address": "0xc6ef4c96ee89e48eff1c35545dbeed4ad8dac9d4", "proxy": false, - "deploymentTxn": "0xc0e0f110d8ead21412392a136fa7d88063fee0e195063a8a4c5901a5fed8a523", + "deploymentTxn": "0x5e67f48cdbdbac14f7fbb0f5d6fd6ff6df61fbb5b99a6ec57a2a77dc17628e83", "input": { "constructor": {} } } }, - "timestamp": 1748028984, - "commitHash": "0a52cd5" + "timestamp": 1763769180, + "commitHash": "185b4fc" }, { "contracts": { @@ -194,6 +201,20 @@ "timestamp": 1756326906, "commitHash": "320811c" }, + { + "contracts": { + "CaliburEntry": { + "address": "0x000000009b1d0af20d8c6d0a44e162d11f9b8f00", + "proxy": false, + "deploymentTxn": "0xc0e0f110d8ead21412392a136fa7d88063fee0e195063a8a4c5901a5fed8a523", + "input": { + "constructor": {} + } + } + }, + "timestamp": 1748028984, + "commitHash": "0a52cd5" + }, { "contracts": { "WETHHook": { diff --git a/lib/v4-core b/lib/v4-core deleted file mode 160000 index e50237c4..00000000 --- a/lib/v4-core +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e50237c43811bd9b526eff40f26772152a42daba diff --git a/script/deploy/Deploy-all.s.sol b/script/deploy/Deploy-all.s.sol index f752cd69..0ded6e80 100644 --- a/script/deploy/Deploy-all.s.sol +++ b/script/deploy/Deploy-all.s.sol @@ -48,6 +48,7 @@ import {V4QuoterDeployer} from '../../src/briefcase/deployers/v4-periphery/V4Quo import {WETHHookDeployer} from '../../src/briefcase/deployers/v4-periphery/WETHHookDeployer.sol'; import {WstETHHookDeployer} from '../../src/briefcase/deployers/v4-periphery/WstETHHookDeployer.sol'; import {WstETHRoutingHookDeployer} from '../../src/briefcase/deployers/v4-periphery/WstETHRoutingHookDeployer.sol'; +import {OrderQuoterDeployer} from '../../src/briefcase/deployers/uniswapx/OrderQuoterDeployer.sol'; import {Script, console2 as console, stdJson} from 'forge-std/Script.sol'; import {VmSafe} from 'forge-std/Vm.sol'; @@ -94,6 +95,8 @@ contract Deploy is Script { deployCalibur(); + deployUniswapX(); + vm.stopBroadcast(); if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast) && config.readBool('.rename')) { @@ -488,6 +491,17 @@ contract Deploy is Script { calibur = address(CaliburEntryDeployer.deploy(salt)); } + function deployUniswapX() private { + if (!config.readBoolOr('.protocols.uniswapx.deploy', false)) return; + + bool deployOrderQuoter = config.readBoolOr('.protocols.uniswapx.contracts.OrderQuoter.deploy', false); + + if (deployOrderQuoter) { + console.log('deploying OrderQuoter'); + OrderQuoterDeployer.deploy(); + } + } + function weth() internal returns (address) { if (_weth == address(0)) { _weth = config.readAddress('.dependencies.weth.value'); diff --git a/script/deploy/tasks/1/task-1763770655.json b/script/deploy/tasks/1/task-1763770655.json new file mode 100644 index 00000000..6dba3354 --- /dev/null +++ b/script/deploy/tasks/1/task-1763770655.json @@ -0,0 +1,535 @@ +{ + "protocols": { + "permit2": { + "name": "Permit 2", + "deploy": false, + "contracts": { + "Permit2": { + "deploy": false, + "address": null, + "lookup": { + "latest": "Permit2", + "history": [ + "UniversalRouter.input.constructor.params.permit2" + ] + }, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000d3af2663da51c10215000000" + } + } + } + } + }, + "v2": { + "name": "Uniswap v2", + "deploy": false, + "contracts": { + "UniswapV2Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV2Factory", + "history": [ + "UniversalRouter.input.constructor.params.v2Factory" + ] + }, + "params": { + "feeToSetter": { + "type": "address" + } + } + }, + "UniswapV2Router02": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v3": { + "name": "Uniswap v3", + "deploy": false, + "contracts": { + "UniswapV3Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV3Factory", + "history": [ + "UniversalRouter.input.constructor.params.v3Factory" + ] + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "UniswapInterfaceMulticall": { + "deploy": false + }, + "QuoterV2": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + }, + "TickLens": { + "deploy": false + }, + "NonfungibleTokenPositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungibleTokenPositionDescriptor" + }, + "params": { + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "NonfungiblePositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungiblePositionManager" + }, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "tokenDescriptor": { + "name": "NFT Position Descriptor address", + "pointer": "protocols.v3.contracts.NonfungibleTokenPositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V3Migrator": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "nonfungiblePositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + }, + "SwapRouter": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v4": { + "name": "Uniswap v4", + "deploy": false, + "contracts": { + "PoolManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PoolManager" + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "PositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionDescriptor" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "PositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionManager" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "unsubscribeGasLimit": { + "name": "Unsubscribe gas limit", + "type": "uint256" + }, + "positionDescriptor": { + "name": "Position Descriptor address", + "pointer": "protocols.v4.contracts.PositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V4Quoter": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + }, + "StateView": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + } + } + }, + "hooks": { + "name": "v4 Hooks", + "deploy": false, + "contracts": { + "WETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "salt": { + "type": "bytes32" + } + }, + "dependencies": [ + "weth" + ] + }, + "WstETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + }, + "WstETHRoutingHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + } + } + }, + "view-quoter-v3": { + "name": "View Quoter v3", + "deploy": false, + "contracts": { + "Quoter": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + } + } + } + }, + "mixed-quoter": { + "name": "Mixed Quoter", + "deploy": false, + "contracts": { + "MixedRouteQuoterV2": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + } + } + }, + "swap-router-contracts": { + "name": "Swap Router Contracts", + "deploy": false, + "contracts": { + "SwapRouter02": { + "deploy": false, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "factoryV3": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "positionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "universal-router": { + "name": "Universal Router", + "deploy": false, + "contracts": { + "UniversalRouter": { + "deploy": false, + "params": { + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2PairInitCodeHash": { + "name": "Uniswap v2 pair init code hash", + "type": "bytes32", + "value": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.pairInitCodeHash" + ] + } + }, + "v3PoolInitCodeHash": { + "name": "Uniswap v3 pool init code hash", + "type": "bytes32", + "value": "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.poolInitCodeHash" + ] + } + }, + "v4PoolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3NFTPositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + }, + "v4PositionManager": { + "name": "Uniswap v4 position manager address", + "pointer": "protocols.v4.contracts.PositionManager" + }, + "acrossSpokePool": { + "name": "Across Spoke Pool address", + "type": "address" + } + }, + "dependencies": [ + "weth" + ], + "lookup": { + "latest": "UniversalRouter" + } + } + } + }, + "util-contracts": { + "name": "Utils", + "deploy": false, + "contracts": { + "FeeOnTransferDetector": { + "deploy": false, + "address": null, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + }, + "FeeCollector": { + "deploy": false, + "address": null, + "params": { + "owner": { + "type": "address" + }, + "universalRouter": { + "name": "Universal Router address", + "pointer": "protocols.universal-router.contracts.UniversalRouter" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "feeToken": { + "name": "Fee token address (usually USDC)", + "type": "address" + } + } + }, + "ERC7914Detector": { + "deploy": false, + "address": "0x000000009B1D0aF20D8C6d0A44e162d11F9b8f00", + "params": { + "caliburAddress": { + "name": "Calibur address for ERC7914 detection", + "type": "address" + } + } + } + } + }, + "calibur": { + "name": "Calibur", + "deploy": false, + "contracts": { + "Calibur": { + "deploy": false, + "address": null, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000eca2ad36bee3874a279d0010" + } + } + } + } + }, + "uniswapx": { + "name": "UniswapX", + "deploy": true, + "contracts": { + "OrderQuoter": { + "deploy": true, + "address": null + } + } + } + }, + "dependencies": { + "weth": { + "type": "address", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.weth9", + "QuoterV2.input.constructor._WETH9", + "V3Migrator.input.constructor._WETH9", + "NonfungiblePositionManager.input.constructor._WETH9", + "NonFungibleTokenPositionDescriptor.input.constructor._WETH9", + "SwapRouter.input.constructor._WETH9", + "SwapRouter02.input.constructor._WETH9", + "Quoter.input.constructor._WETH9", + "QuoterV2.input.constructor._WETH9", + "UniswapV2Router02.input.constructor._WETH" + ] + } + } + }, + "rename": true +} \ No newline at end of file diff --git a/script/deploy/tasks/10/task-1763770879.json b/script/deploy/tasks/10/task-1763770879.json new file mode 100644 index 00000000..6dba3354 --- /dev/null +++ b/script/deploy/tasks/10/task-1763770879.json @@ -0,0 +1,535 @@ +{ + "protocols": { + "permit2": { + "name": "Permit 2", + "deploy": false, + "contracts": { + "Permit2": { + "deploy": false, + "address": null, + "lookup": { + "latest": "Permit2", + "history": [ + "UniversalRouter.input.constructor.params.permit2" + ] + }, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000d3af2663da51c10215000000" + } + } + } + } + }, + "v2": { + "name": "Uniswap v2", + "deploy": false, + "contracts": { + "UniswapV2Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV2Factory", + "history": [ + "UniversalRouter.input.constructor.params.v2Factory" + ] + }, + "params": { + "feeToSetter": { + "type": "address" + } + } + }, + "UniswapV2Router02": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v3": { + "name": "Uniswap v3", + "deploy": false, + "contracts": { + "UniswapV3Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV3Factory", + "history": [ + "UniversalRouter.input.constructor.params.v3Factory" + ] + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "UniswapInterfaceMulticall": { + "deploy": false + }, + "QuoterV2": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + }, + "TickLens": { + "deploy": false + }, + "NonfungibleTokenPositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungibleTokenPositionDescriptor" + }, + "params": { + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "NonfungiblePositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungiblePositionManager" + }, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "tokenDescriptor": { + "name": "NFT Position Descriptor address", + "pointer": "protocols.v3.contracts.NonfungibleTokenPositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V3Migrator": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "nonfungiblePositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + }, + "SwapRouter": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v4": { + "name": "Uniswap v4", + "deploy": false, + "contracts": { + "PoolManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PoolManager" + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "PositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionDescriptor" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "PositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionManager" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "unsubscribeGasLimit": { + "name": "Unsubscribe gas limit", + "type": "uint256" + }, + "positionDescriptor": { + "name": "Position Descriptor address", + "pointer": "protocols.v4.contracts.PositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V4Quoter": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + }, + "StateView": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + } + } + }, + "hooks": { + "name": "v4 Hooks", + "deploy": false, + "contracts": { + "WETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "salt": { + "type": "bytes32" + } + }, + "dependencies": [ + "weth" + ] + }, + "WstETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + }, + "WstETHRoutingHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + } + } + }, + "view-quoter-v3": { + "name": "View Quoter v3", + "deploy": false, + "contracts": { + "Quoter": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + } + } + } + }, + "mixed-quoter": { + "name": "Mixed Quoter", + "deploy": false, + "contracts": { + "MixedRouteQuoterV2": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + } + } + }, + "swap-router-contracts": { + "name": "Swap Router Contracts", + "deploy": false, + "contracts": { + "SwapRouter02": { + "deploy": false, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "factoryV3": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "positionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "universal-router": { + "name": "Universal Router", + "deploy": false, + "contracts": { + "UniversalRouter": { + "deploy": false, + "params": { + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2PairInitCodeHash": { + "name": "Uniswap v2 pair init code hash", + "type": "bytes32", + "value": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.pairInitCodeHash" + ] + } + }, + "v3PoolInitCodeHash": { + "name": "Uniswap v3 pool init code hash", + "type": "bytes32", + "value": "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.poolInitCodeHash" + ] + } + }, + "v4PoolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3NFTPositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + }, + "v4PositionManager": { + "name": "Uniswap v4 position manager address", + "pointer": "protocols.v4.contracts.PositionManager" + }, + "acrossSpokePool": { + "name": "Across Spoke Pool address", + "type": "address" + } + }, + "dependencies": [ + "weth" + ], + "lookup": { + "latest": "UniversalRouter" + } + } + } + }, + "util-contracts": { + "name": "Utils", + "deploy": false, + "contracts": { + "FeeOnTransferDetector": { + "deploy": false, + "address": null, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + }, + "FeeCollector": { + "deploy": false, + "address": null, + "params": { + "owner": { + "type": "address" + }, + "universalRouter": { + "name": "Universal Router address", + "pointer": "protocols.universal-router.contracts.UniversalRouter" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "feeToken": { + "name": "Fee token address (usually USDC)", + "type": "address" + } + } + }, + "ERC7914Detector": { + "deploy": false, + "address": "0x000000009B1D0aF20D8C6d0A44e162d11F9b8f00", + "params": { + "caliburAddress": { + "name": "Calibur address for ERC7914 detection", + "type": "address" + } + } + } + } + }, + "calibur": { + "name": "Calibur", + "deploy": false, + "contracts": { + "Calibur": { + "deploy": false, + "address": null, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000eca2ad36bee3874a279d0010" + } + } + } + } + }, + "uniswapx": { + "name": "UniswapX", + "deploy": true, + "contracts": { + "OrderQuoter": { + "deploy": true, + "address": null + } + } + } + }, + "dependencies": { + "weth": { + "type": "address", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.weth9", + "QuoterV2.input.constructor._WETH9", + "V3Migrator.input.constructor._WETH9", + "NonfungiblePositionManager.input.constructor._WETH9", + "NonFungibleTokenPositionDescriptor.input.constructor._WETH9", + "SwapRouter.input.constructor._WETH9", + "SwapRouter02.input.constructor._WETH9", + "Quoter.input.constructor._WETH9", + "QuoterV2.input.constructor._WETH9", + "UniswapV2Router02.input.constructor._WETH" + ] + } + } + }, + "rename": true +} \ No newline at end of file diff --git a/script/deploy/tasks/130/task-1763767166.json b/script/deploy/tasks/130/task-1763767166.json new file mode 100644 index 00000000..6dba3354 --- /dev/null +++ b/script/deploy/tasks/130/task-1763767166.json @@ -0,0 +1,535 @@ +{ + "protocols": { + "permit2": { + "name": "Permit 2", + "deploy": false, + "contracts": { + "Permit2": { + "deploy": false, + "address": null, + "lookup": { + "latest": "Permit2", + "history": [ + "UniversalRouter.input.constructor.params.permit2" + ] + }, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000d3af2663da51c10215000000" + } + } + } + } + }, + "v2": { + "name": "Uniswap v2", + "deploy": false, + "contracts": { + "UniswapV2Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV2Factory", + "history": [ + "UniversalRouter.input.constructor.params.v2Factory" + ] + }, + "params": { + "feeToSetter": { + "type": "address" + } + } + }, + "UniswapV2Router02": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v3": { + "name": "Uniswap v3", + "deploy": false, + "contracts": { + "UniswapV3Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV3Factory", + "history": [ + "UniversalRouter.input.constructor.params.v3Factory" + ] + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "UniswapInterfaceMulticall": { + "deploy": false + }, + "QuoterV2": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + }, + "TickLens": { + "deploy": false + }, + "NonfungibleTokenPositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungibleTokenPositionDescriptor" + }, + "params": { + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "NonfungiblePositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungiblePositionManager" + }, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "tokenDescriptor": { + "name": "NFT Position Descriptor address", + "pointer": "protocols.v3.contracts.NonfungibleTokenPositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V3Migrator": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "nonfungiblePositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + }, + "SwapRouter": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v4": { + "name": "Uniswap v4", + "deploy": false, + "contracts": { + "PoolManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PoolManager" + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "PositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionDescriptor" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "PositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionManager" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "unsubscribeGasLimit": { + "name": "Unsubscribe gas limit", + "type": "uint256" + }, + "positionDescriptor": { + "name": "Position Descriptor address", + "pointer": "protocols.v4.contracts.PositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V4Quoter": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + }, + "StateView": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + } + } + }, + "hooks": { + "name": "v4 Hooks", + "deploy": false, + "contracts": { + "WETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "salt": { + "type": "bytes32" + } + }, + "dependencies": [ + "weth" + ] + }, + "WstETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + }, + "WstETHRoutingHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + } + } + }, + "view-quoter-v3": { + "name": "View Quoter v3", + "deploy": false, + "contracts": { + "Quoter": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + } + } + } + }, + "mixed-quoter": { + "name": "Mixed Quoter", + "deploy": false, + "contracts": { + "MixedRouteQuoterV2": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + } + } + }, + "swap-router-contracts": { + "name": "Swap Router Contracts", + "deploy": false, + "contracts": { + "SwapRouter02": { + "deploy": false, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "factoryV3": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "positionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "universal-router": { + "name": "Universal Router", + "deploy": false, + "contracts": { + "UniversalRouter": { + "deploy": false, + "params": { + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2PairInitCodeHash": { + "name": "Uniswap v2 pair init code hash", + "type": "bytes32", + "value": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.pairInitCodeHash" + ] + } + }, + "v3PoolInitCodeHash": { + "name": "Uniswap v3 pool init code hash", + "type": "bytes32", + "value": "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.poolInitCodeHash" + ] + } + }, + "v4PoolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3NFTPositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + }, + "v4PositionManager": { + "name": "Uniswap v4 position manager address", + "pointer": "protocols.v4.contracts.PositionManager" + }, + "acrossSpokePool": { + "name": "Across Spoke Pool address", + "type": "address" + } + }, + "dependencies": [ + "weth" + ], + "lookup": { + "latest": "UniversalRouter" + } + } + } + }, + "util-contracts": { + "name": "Utils", + "deploy": false, + "contracts": { + "FeeOnTransferDetector": { + "deploy": false, + "address": null, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + }, + "FeeCollector": { + "deploy": false, + "address": null, + "params": { + "owner": { + "type": "address" + }, + "universalRouter": { + "name": "Universal Router address", + "pointer": "protocols.universal-router.contracts.UniversalRouter" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "feeToken": { + "name": "Fee token address (usually USDC)", + "type": "address" + } + } + }, + "ERC7914Detector": { + "deploy": false, + "address": "0x000000009B1D0aF20D8C6d0A44e162d11F9b8f00", + "params": { + "caliburAddress": { + "name": "Calibur address for ERC7914 detection", + "type": "address" + } + } + } + } + }, + "calibur": { + "name": "Calibur", + "deploy": false, + "contracts": { + "Calibur": { + "deploy": false, + "address": null, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000eca2ad36bee3874a279d0010" + } + } + } + } + }, + "uniswapx": { + "name": "UniswapX", + "deploy": true, + "contracts": { + "OrderQuoter": { + "deploy": true, + "address": null + } + } + } + }, + "dependencies": { + "weth": { + "type": "address", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.weth9", + "QuoterV2.input.constructor._WETH9", + "V3Migrator.input.constructor._WETH9", + "NonfungiblePositionManager.input.constructor._WETH9", + "NonFungibleTokenPositionDescriptor.input.constructor._WETH9", + "SwapRouter.input.constructor._WETH9", + "SwapRouter02.input.constructor._WETH9", + "Quoter.input.constructor._WETH9", + "QuoterV2.input.constructor._WETH9", + "UniswapV2Router02.input.constructor._WETH" + ] + } + } + }, + "rename": true +} \ No newline at end of file diff --git a/script/deploy/tasks/130/task-1763768505.json b/script/deploy/tasks/130/task-1763768505.json new file mode 100644 index 00000000..6dba3354 --- /dev/null +++ b/script/deploy/tasks/130/task-1763768505.json @@ -0,0 +1,535 @@ +{ + "protocols": { + "permit2": { + "name": "Permit 2", + "deploy": false, + "contracts": { + "Permit2": { + "deploy": false, + "address": null, + "lookup": { + "latest": "Permit2", + "history": [ + "UniversalRouter.input.constructor.params.permit2" + ] + }, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000d3af2663da51c10215000000" + } + } + } + } + }, + "v2": { + "name": "Uniswap v2", + "deploy": false, + "contracts": { + "UniswapV2Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV2Factory", + "history": [ + "UniversalRouter.input.constructor.params.v2Factory" + ] + }, + "params": { + "feeToSetter": { + "type": "address" + } + } + }, + "UniswapV2Router02": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v3": { + "name": "Uniswap v3", + "deploy": false, + "contracts": { + "UniswapV3Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV3Factory", + "history": [ + "UniversalRouter.input.constructor.params.v3Factory" + ] + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "UniswapInterfaceMulticall": { + "deploy": false + }, + "QuoterV2": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + }, + "TickLens": { + "deploy": false + }, + "NonfungibleTokenPositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungibleTokenPositionDescriptor" + }, + "params": { + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "NonfungiblePositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungiblePositionManager" + }, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "tokenDescriptor": { + "name": "NFT Position Descriptor address", + "pointer": "protocols.v3.contracts.NonfungibleTokenPositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V3Migrator": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "nonfungiblePositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + }, + "SwapRouter": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v4": { + "name": "Uniswap v4", + "deploy": false, + "contracts": { + "PoolManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PoolManager" + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "PositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionDescriptor" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "PositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionManager" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "unsubscribeGasLimit": { + "name": "Unsubscribe gas limit", + "type": "uint256" + }, + "positionDescriptor": { + "name": "Position Descriptor address", + "pointer": "protocols.v4.contracts.PositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V4Quoter": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + }, + "StateView": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + } + } + }, + "hooks": { + "name": "v4 Hooks", + "deploy": false, + "contracts": { + "WETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "salt": { + "type": "bytes32" + } + }, + "dependencies": [ + "weth" + ] + }, + "WstETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + }, + "WstETHRoutingHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + } + } + }, + "view-quoter-v3": { + "name": "View Quoter v3", + "deploy": false, + "contracts": { + "Quoter": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + } + } + } + }, + "mixed-quoter": { + "name": "Mixed Quoter", + "deploy": false, + "contracts": { + "MixedRouteQuoterV2": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + } + } + }, + "swap-router-contracts": { + "name": "Swap Router Contracts", + "deploy": false, + "contracts": { + "SwapRouter02": { + "deploy": false, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "factoryV3": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "positionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "universal-router": { + "name": "Universal Router", + "deploy": false, + "contracts": { + "UniversalRouter": { + "deploy": false, + "params": { + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2PairInitCodeHash": { + "name": "Uniswap v2 pair init code hash", + "type": "bytes32", + "value": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.pairInitCodeHash" + ] + } + }, + "v3PoolInitCodeHash": { + "name": "Uniswap v3 pool init code hash", + "type": "bytes32", + "value": "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.poolInitCodeHash" + ] + } + }, + "v4PoolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3NFTPositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + }, + "v4PositionManager": { + "name": "Uniswap v4 position manager address", + "pointer": "protocols.v4.contracts.PositionManager" + }, + "acrossSpokePool": { + "name": "Across Spoke Pool address", + "type": "address" + } + }, + "dependencies": [ + "weth" + ], + "lookup": { + "latest": "UniversalRouter" + } + } + } + }, + "util-contracts": { + "name": "Utils", + "deploy": false, + "contracts": { + "FeeOnTransferDetector": { + "deploy": false, + "address": null, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + }, + "FeeCollector": { + "deploy": false, + "address": null, + "params": { + "owner": { + "type": "address" + }, + "universalRouter": { + "name": "Universal Router address", + "pointer": "protocols.universal-router.contracts.UniversalRouter" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "feeToken": { + "name": "Fee token address (usually USDC)", + "type": "address" + } + } + }, + "ERC7914Detector": { + "deploy": false, + "address": "0x000000009B1D0aF20D8C6d0A44e162d11F9b8f00", + "params": { + "caliburAddress": { + "name": "Calibur address for ERC7914 detection", + "type": "address" + } + } + } + } + }, + "calibur": { + "name": "Calibur", + "deploy": false, + "contracts": { + "Calibur": { + "deploy": false, + "address": null, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000eca2ad36bee3874a279d0010" + } + } + } + } + }, + "uniswapx": { + "name": "UniswapX", + "deploy": true, + "contracts": { + "OrderQuoter": { + "deploy": true, + "address": null + } + } + } + }, + "dependencies": { + "weth": { + "type": "address", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.weth9", + "QuoterV2.input.constructor._WETH9", + "V3Migrator.input.constructor._WETH9", + "NonfungiblePositionManager.input.constructor._WETH9", + "NonFungibleTokenPositionDescriptor.input.constructor._WETH9", + "SwapRouter.input.constructor._WETH9", + "SwapRouter02.input.constructor._WETH9", + "Quoter.input.constructor._WETH9", + "QuoterV2.input.constructor._WETH9", + "UniswapV2Router02.input.constructor._WETH" + ] + } + } + }, + "rename": true +} \ No newline at end of file diff --git a/script/deploy/tasks/42161/task-1763770978.json b/script/deploy/tasks/42161/task-1763770978.json new file mode 100644 index 00000000..6dba3354 --- /dev/null +++ b/script/deploy/tasks/42161/task-1763770978.json @@ -0,0 +1,535 @@ +{ + "protocols": { + "permit2": { + "name": "Permit 2", + "deploy": false, + "contracts": { + "Permit2": { + "deploy": false, + "address": null, + "lookup": { + "latest": "Permit2", + "history": [ + "UniversalRouter.input.constructor.params.permit2" + ] + }, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000d3af2663da51c10215000000" + } + } + } + } + }, + "v2": { + "name": "Uniswap v2", + "deploy": false, + "contracts": { + "UniswapV2Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV2Factory", + "history": [ + "UniversalRouter.input.constructor.params.v2Factory" + ] + }, + "params": { + "feeToSetter": { + "type": "address" + } + } + }, + "UniswapV2Router02": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v3": { + "name": "Uniswap v3", + "deploy": false, + "contracts": { + "UniswapV3Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV3Factory", + "history": [ + "UniversalRouter.input.constructor.params.v3Factory" + ] + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "UniswapInterfaceMulticall": { + "deploy": false + }, + "QuoterV2": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + }, + "TickLens": { + "deploy": false + }, + "NonfungibleTokenPositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungibleTokenPositionDescriptor" + }, + "params": { + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "NonfungiblePositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungiblePositionManager" + }, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "tokenDescriptor": { + "name": "NFT Position Descriptor address", + "pointer": "protocols.v3.contracts.NonfungibleTokenPositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V3Migrator": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "nonfungiblePositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + }, + "SwapRouter": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v4": { + "name": "Uniswap v4", + "deploy": false, + "contracts": { + "PoolManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PoolManager" + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "PositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionDescriptor" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "PositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionManager" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "unsubscribeGasLimit": { + "name": "Unsubscribe gas limit", + "type": "uint256" + }, + "positionDescriptor": { + "name": "Position Descriptor address", + "pointer": "protocols.v4.contracts.PositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V4Quoter": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + }, + "StateView": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + } + } + }, + "hooks": { + "name": "v4 Hooks", + "deploy": false, + "contracts": { + "WETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "salt": { + "type": "bytes32" + } + }, + "dependencies": [ + "weth" + ] + }, + "WstETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + }, + "WstETHRoutingHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + } + } + }, + "view-quoter-v3": { + "name": "View Quoter v3", + "deploy": false, + "contracts": { + "Quoter": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + } + } + } + }, + "mixed-quoter": { + "name": "Mixed Quoter", + "deploy": false, + "contracts": { + "MixedRouteQuoterV2": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + } + } + }, + "swap-router-contracts": { + "name": "Swap Router Contracts", + "deploy": false, + "contracts": { + "SwapRouter02": { + "deploy": false, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "factoryV3": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "positionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "universal-router": { + "name": "Universal Router", + "deploy": false, + "contracts": { + "UniversalRouter": { + "deploy": false, + "params": { + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2PairInitCodeHash": { + "name": "Uniswap v2 pair init code hash", + "type": "bytes32", + "value": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.pairInitCodeHash" + ] + } + }, + "v3PoolInitCodeHash": { + "name": "Uniswap v3 pool init code hash", + "type": "bytes32", + "value": "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.poolInitCodeHash" + ] + } + }, + "v4PoolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3NFTPositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + }, + "v4PositionManager": { + "name": "Uniswap v4 position manager address", + "pointer": "protocols.v4.contracts.PositionManager" + }, + "acrossSpokePool": { + "name": "Across Spoke Pool address", + "type": "address" + } + }, + "dependencies": [ + "weth" + ], + "lookup": { + "latest": "UniversalRouter" + } + } + } + }, + "util-contracts": { + "name": "Utils", + "deploy": false, + "contracts": { + "FeeOnTransferDetector": { + "deploy": false, + "address": null, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + }, + "FeeCollector": { + "deploy": false, + "address": null, + "params": { + "owner": { + "type": "address" + }, + "universalRouter": { + "name": "Universal Router address", + "pointer": "protocols.universal-router.contracts.UniversalRouter" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "feeToken": { + "name": "Fee token address (usually USDC)", + "type": "address" + } + } + }, + "ERC7914Detector": { + "deploy": false, + "address": "0x000000009B1D0aF20D8C6d0A44e162d11F9b8f00", + "params": { + "caliburAddress": { + "name": "Calibur address for ERC7914 detection", + "type": "address" + } + } + } + } + }, + "calibur": { + "name": "Calibur", + "deploy": false, + "contracts": { + "Calibur": { + "deploy": false, + "address": null, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000eca2ad36bee3874a279d0010" + } + } + } + } + }, + "uniswapx": { + "name": "UniswapX", + "deploy": true, + "contracts": { + "OrderQuoter": { + "deploy": true, + "address": null + } + } + } + }, + "dependencies": { + "weth": { + "type": "address", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.weth9", + "QuoterV2.input.constructor._WETH9", + "V3Migrator.input.constructor._WETH9", + "NonfungiblePositionManager.input.constructor._WETH9", + "NonFungibleTokenPositionDescriptor.input.constructor._WETH9", + "SwapRouter.input.constructor._WETH9", + "SwapRouter02.input.constructor._WETH9", + "Quoter.input.constructor._WETH9", + "QuoterV2.input.constructor._WETH9", + "UniswapV2Router02.input.constructor._WETH" + ] + } + } + }, + "rename": true +} \ No newline at end of file diff --git a/script/deploy/tasks/8453/task-1763769165.json b/script/deploy/tasks/8453/task-1763769165.json new file mode 100644 index 00000000..6dba3354 --- /dev/null +++ b/script/deploy/tasks/8453/task-1763769165.json @@ -0,0 +1,535 @@ +{ + "protocols": { + "permit2": { + "name": "Permit 2", + "deploy": false, + "contracts": { + "Permit2": { + "deploy": false, + "address": null, + "lookup": { + "latest": "Permit2", + "history": [ + "UniversalRouter.input.constructor.params.permit2" + ] + }, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000d3af2663da51c10215000000" + } + } + } + } + }, + "v2": { + "name": "Uniswap v2", + "deploy": false, + "contracts": { + "UniswapV2Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV2Factory", + "history": [ + "UniversalRouter.input.constructor.params.v2Factory" + ] + }, + "params": { + "feeToSetter": { + "type": "address" + } + } + }, + "UniswapV2Router02": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v3": { + "name": "Uniswap v3", + "deploy": false, + "contracts": { + "UniswapV3Factory": { + "deploy": false, + "address": null, + "lookup": { + "latest": "UniswapV3Factory", + "history": [ + "UniversalRouter.input.constructor.params.v3Factory" + ] + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "UniswapInterfaceMulticall": { + "deploy": false + }, + "QuoterV2": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + }, + "TickLens": { + "deploy": false + }, + "NonfungibleTokenPositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungibleTokenPositionDescriptor" + }, + "params": { + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "NonfungiblePositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "NonfungiblePositionManager" + }, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "tokenDescriptor": { + "name": "NFT Position Descriptor address", + "pointer": "protocols.v3.contracts.NonfungibleTokenPositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V3Migrator": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "nonfungiblePositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + }, + "SwapRouter": { + "deploy": false, + "address": null, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "v4": { + "name": "Uniswap v4", + "deploy": false, + "contracts": { + "PoolManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PoolManager" + }, + "params": { + "initialOwner": { + "type": "address" + } + } + }, + "PositionDescriptor": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionDescriptor" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "nativeCurrencyLabel": { + "name": "Native token symbol", + "type": "string", + "value": "ETH" + }, + "proxyAdminOwner": { + "type": "address" + } + }, + "dependencies": [ + "weth" + ] + }, + "PositionManager": { + "deploy": false, + "address": null, + "lookup": { + "latest": "PositionManager" + }, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "unsubscribeGasLimit": { + "name": "Unsubscribe gas limit", + "type": "uint256" + }, + "positionDescriptor": { + "name": "Position Descriptor address", + "pointer": "protocols.v4.contracts.PositionDescriptor" + } + }, + "dependencies": [ + "weth" + ] + }, + "V4Quoter": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + }, + "StateView": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + } + } + } + } + }, + "hooks": { + "name": "v4 Hooks", + "deploy": false, + "contracts": { + "WETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "salt": { + "type": "bytes32" + } + }, + "dependencies": [ + "weth" + ] + }, + "WstETHHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + }, + "WstETHRoutingHook": { + "deploy": false, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "wstETH": { + "name": "WstETH address", + "type": "address" + }, + "salt": { + "type": "bytes32" + } + } + } + } + }, + "view-quoter-v3": { + "name": "View Quoter v3", + "deploy": false, + "contracts": { + "Quoter": { + "deploy": false, + "params": { + "factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + } + } + } + } + }, + "mixed-quoter": { + "name": "Mixed Quoter", + "deploy": false, + "contracts": { + "MixedRouteQuoterV2": { + "deploy": false, + "address": null, + "params": { + "poolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + } + } + }, + "swap-router-contracts": { + "name": "Swap Router Contracts", + "deploy": false, + "contracts": { + "SwapRouter02": { + "deploy": false, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "factoryV3": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "positionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + } + }, + "dependencies": [ + "weth" + ] + } + } + }, + "universal-router": { + "name": "Universal Router", + "deploy": false, + "contracts": { + "UniversalRouter": { + "deploy": false, + "params": { + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "v2Factory": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + }, + "v3Factory": { + "name": "Uniswap v3 factory address", + "pointer": "protocols.v3.contracts.UniswapV3Factory" + }, + "v2PairInitCodeHash": { + "name": "Uniswap v2 pair init code hash", + "type": "bytes32", + "value": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.pairInitCodeHash" + ] + } + }, + "v3PoolInitCodeHash": { + "name": "Uniswap v3 pool init code hash", + "type": "bytes32", + "value": "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.poolInitCodeHash" + ] + } + }, + "v4PoolManager": { + "name": "Pool Manager", + "pointer": "protocols.v4.contracts.PoolManager" + }, + "v3NFTPositionManager": { + "name": "Uniswap v3 position manager address", + "pointer": "protocols.v3.contracts.NonfungiblePositionManager" + }, + "v4PositionManager": { + "name": "Uniswap v4 position manager address", + "pointer": "protocols.v4.contracts.PositionManager" + }, + "acrossSpokePool": { + "name": "Across Spoke Pool address", + "type": "address" + } + }, + "dependencies": [ + "weth" + ], + "lookup": { + "latest": "UniversalRouter" + } + } + } + }, + "util-contracts": { + "name": "Utils", + "deploy": false, + "contracts": { + "FeeOnTransferDetector": { + "deploy": false, + "address": null, + "params": { + "factoryV2": { + "name": "Uniswap v2 factory address", + "pointer": "protocols.v2.contracts.UniswapV2Factory" + } + } + }, + "FeeCollector": { + "deploy": false, + "address": null, + "params": { + "owner": { + "type": "address" + }, + "universalRouter": { + "name": "Universal Router address", + "pointer": "protocols.universal-router.contracts.UniversalRouter" + }, + "permit2": { + "name": "Permit 2 address", + "pointer": "protocols.permit2.contracts.Permit2" + }, + "feeToken": { + "name": "Fee token address (usually USDC)", + "type": "address" + } + } + }, + "ERC7914Detector": { + "deploy": false, + "address": "0x000000009B1D0aF20D8C6d0A44e162d11F9b8f00", + "params": { + "caliburAddress": { + "name": "Calibur address for ERC7914 detection", + "type": "address" + } + } + } + } + }, + "calibur": { + "name": "Calibur", + "deploy": false, + "contracts": { + "Calibur": { + "deploy": false, + "address": null, + "params": { + "salt": { + "type": "bytes32", + "value": "0x0000000000000000000000000000000000000000eca2ad36bee3874a279d0010" + } + } + } + } + }, + "uniswapx": { + "name": "UniswapX", + "deploy": true, + "contracts": { + "OrderQuoter": { + "deploy": true, + "address": null + } + } + } + }, + "dependencies": { + "weth": { + "type": "address", + "lookup": { + "history": [ + "UniversalRouter.input.constructor.params.weth9", + "QuoterV2.input.constructor._WETH9", + "V3Migrator.input.constructor._WETH9", + "NonfungiblePositionManager.input.constructor._WETH9", + "NonFungibleTokenPositionDescriptor.input.constructor._WETH9", + "SwapRouter.input.constructor._WETH9", + "SwapRouter02.input.constructor._WETH9", + "Quoter.input.constructor._WETH9", + "QuoterV2.input.constructor._WETH9", + "UniswapV2Router02.input.constructor._WETH" + ] + } + } + }, + "rename": true +} \ No newline at end of file diff --git a/script/deploy/tasks/task_template.json b/script/deploy/tasks/task_template.json index 2f20b6ab..076efe86 100644 --- a/script/deploy/tasks/task_template.json +++ b/script/deploy/tasks/task_template.json @@ -468,6 +468,16 @@ } } } + }, + "uniswapx": { + "name": "UniswapX", + "deploy": false, + "contracts": { + "OrderQuoter": { + "deploy": false, + "address": null + } + } } }, "dependencies": { diff --git a/src/briefcase/deployers/calibur/CaliburEntryDeployer.sol b/src/briefcase/deployers/calibur/CaliburEntryDeployer.sol index 200c5be1..b7321f5b 100644 --- a/src/briefcase/deployers/calibur/CaliburEntryDeployer.sol +++ b/src/briefcase/deployers/calibur/CaliburEntryDeployer.sol @@ -21,6 +21,7 @@ library CaliburEntryDeployer { * - evm_version: prague */ function initcode() internal pure returns (bytes memory) { - return hex'60e0604052346100ce57604080519081016001600160401b038111828210176100ba576040908152600782526621b0b634b13ab960c91b6020830190815281519182016001600160401b038111838210176100ba57604052600582526020820192640312e302e360dc1b845251902060805251902060a0523060c052604051615fb890816100d382396080518181816120dc0152612811015260a0518181816121020152612837015260c05181818161250101526127c30152f35b634e487b7160e01b5f52604160045260245ffd5b5f80fdfe60806040526004361015610015575b3661288157005b5f3560e01c80630f3ebf6e1461024457806312aaac701461023f5780631626ba7e1461023a57806319822f7c146102355780631b71bb6e14610230578063219a260d1461022b57806323d578861461022657806325e5c2431461022157806327258b221461021c57806328495877146102175780632abbf4691461021257806330b1fa3b1461020d5780634223b5c2146102085780636575f6aa146102035780636750aa5f146101fe5780636a1ea88d146101f95780637613e7ba146101f4578063786902f2146101ef578063789ff701146101ea57806384b0196e146101e55780638dd7712f146101e057806394430fa5146101db57806399e1d016146101d6578063a58bb84a146101d1578063ac9650d8146101cc578063b70e36f0146101c7578063b75c7dc6146101c2578063b923614f146101bd578063bf7c5be9146101b8578063c3c16ee4146101b3578063d03c7914146101ae578063e41dae2f146101a9578063e9ae5c53146101a4578063f698da251461019f5763fac750e00361000e5761196a565b611950565b6118a5565b61183d565b61181f565b611678565b611635565b6115f9565b6113fd565b611278565b611174565b61101c565b610fe8565b610e46565b610d9e565b610cc8565b610caf565b610c96565b610c30565b610bcd565b610b9e565b610b34565b610a8e565b610a0e565b610817565b6107b8565b610790565b61070e565b61066a565b610621565b610554565b6103e5565b610393565b610302565b3461026a57602060031936011261026a576020610262600435611984565b604051908152f35b5f80fd5b6003111561027857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9060038210156102785752565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b606060206102ff938184526102ef82850182516102a5565b01519160408082015201906102b2565b90565b3461026a57602060031936011261026a5761032d610321600435611b23565b604051918291826102d7565b0390f35b9181601f8401121561026a5782359167ffffffffffffffff831161026a576020838186019501011161026a57565b90604060031983011261026a57600435916024359067ffffffffffffffff821161026a5761038f91600401610331565b9091565b3461026a5760206103ac6103a63661035f565b91611c5f565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b908161012091031261026a5790565b3461026a57606060031936011261026a5760043567ffffffffffffffff811161026a576104169036906004016103d6565b60443560243573ffffffffffffffffffffffffffffffffffffffff61043961253c565b1633036105015761032d926104836104d792846104d0956104f1575b5061046d610467610100850185611df0565b90612b26565b9693928561047e8598949398611b23565b6129e9565b9461048d82611984565b95156104e75778ffffffffff000000000000000000000000000000000000000086169788955b73ffffffffffffffffffffffffffffffffffffffff9236916109bd565b951661316d565b6040519081529081906020820190565b60019788956104b3565b5f9081803892335af1505f610455565b7fd663742a000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff81160361026a57565b359061055282610529565b565b3461026a57602060031936011261026a5760043561057181610529565b3033036105f95773ffffffffffffffffffffffffffffffffffffffff167f800000000000000000000000000000000000000000000000000000000000000081177f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368600557fea942933e7fb7cb728727281a81e352a20dda96dbc4ee97633a3fa25da48e4ab5f80a2005b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461026a57602060031936011261026a576004355f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368604602052602060405f2054604051908152f35b3461026a57604060031936011261026a5760043561068781610529565b602435903033036105f95773ffffffffffffffffffffffffffffffffffffffff1690815f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686056020528060405f20556040519081527f30346eac03b1c5913bb026e6d8d0f42783a0c706bb2a86916410dc385cc2723660203092a360405160018152602090f35b3461026a57604060031936011261026a5760043561072b81610529565b602435903033036105f957806107568373ffffffffffffffffffffffffffffffffffffffff9361325c565b60405192835216907ff8c1385bb618a432aebbaae5bfab911559154982a64e1750b17b50f5782dc98860203092a360405160018152602090f35b3461026a57602060031936011261026a5760206107ae60043561327b565b6040519015158152f35b3461026a575f60031936011261026a5761032d6040516107d9604082610956565b601581527f556e69737761702e43616c696275722e312e302e30000000000000000000000060208201526040519182916020835260208301906102b2565b3461026a57602060031936011261026a576004356bffffffffffffffffffffffff811680910361026a573033036105f9577f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368606546bffffffffffffffffffffffff8116820361088157005b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368606557f0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d315f80a1005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761093557604052565b6108ec565b6060810190811067ffffffffffffffff82111761093557604052565b90601f601f19910116810190811067ffffffffffffffff82111761093557604052565b6040519061055260c083610956565b60405190610552606083610956565b6003111561026a57565b67ffffffffffffffff811161093557601f01601f191660200190565b9291926109c9826109a1565b916109d76040519384610956565b82948184528183011161026a578281602093845f960137010152565b9080601f8301121561026a578160206102ff933591016109bd565b3461026a57602060031936011261026a5760043567ffffffffffffffff811161026a576040600319823603011261026a57604051610a4b81610919565b8160040135610a5981610997565b8152602482013567ffffffffffffffff811161026a57610a8c926004610a8292369201016109f3565b6020820152611e55565b005b3461026a57602060031936011261026a57600435610aaa611a0c565b5080610ae16318fb58646004527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686015f5260245f2090565b015490610aec61375e565b1115610b0c576103218168fbb67fda52d4bfb8bf61032d93141502611b23565b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461026a57602060031936011261026a576020610262600435610b55612765565b604291604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9060206102ff9281815201906102b2565b3461026a575f60031936011261026a5761032d610bb96120b1565b6040519182916020835260208301906102b2565b3461026a57602060031936011261026a5777ffffffffffffffffffffffffffffffffffffffffffffffff600435165f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368604602052602060405f2054604051908152f35b3461026a575f60031936011261026a5760206040517f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686008152f35b600319606091011261026a57600435610c8281610529565b90602435610c8f81610529565b9060443590565b3461026a5760206107ae610ca936610c6a565b91612145565b3461026a5760206107ae610cc236610c6a565b91612277565b3461026a575f60031936011261026a577fff00000000000000000000000000000000000000000000000000000000000000610d4f73ffffffffffffffffffffffffffffffffffffffff610d41610d1c612408565b97946040999397919699949294519a8b9a168a5260e060208b015260e08a01906102b2565b9088820360408a01526102b2565b93606087015216608085015260a084015282810360c0840152602080835192838152019201905f5b818110610d85575050500390f35b8251845285945060209384019390920191600101610d77565b3461026a57604060031936011261026a5760043567ffffffffffffffff811161026a57610dcf9036906004016103d6565b73ffffffffffffffffffffffffffffffffffffffff610dec61253c565b16330361050157610e16610e07610467610100840184611df0565b50505050916060810190611df0565b60048193929310610e3957826004610e3492610a8c95019101610fc2565b613489565b633b99b53d5f526004601cfd5b3461026a575f60031936011261026a576020610e6061253c565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b67ffffffffffffffff81116109355760051b60200190565b9080601f8301121561026a57813591610eae83610e7e565b92610ebc6040519485610956565b80845260208085019160051b8301019183831161026a5760208101915b838310610ee857505050505090565b823567ffffffffffffffff811161026a578201906060601f19838803011261026a5760405190610f178261093a565b6020830135610f2581610529565b82526040830135602083015260608301359167ffffffffffffffff831161026a57610f58886020809695819601016109f3565b6040820152815201920191610ed9565b8015150361026a57565b91909160408184031261026a5760405190610f8c82610919565b819381359167ffffffffffffffff831161026a57610fb06020939284938301610e96565b8452013591610fbe83610f68565b0152565b9060208282031261026a57813567ffffffffffffffff811161026a576102ff9201610f72565b602060031936011261026a5760043567ffffffffffffffff811161026a57611017610a8c913690600401610f72565b6125b8565b3461026a57604060031936011261026a576004356024353033036105f95781156110cf576110498261327b565b156110a75760207f55194732cd17a56216773dcef66731844f1900f9b878633e3be2b6cce1e542c991835f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860382528060405f2055604051908152a2005b7fe57b6304000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fb37b2fa0000000000000000000000000000000000000000000000000000000005f5260045ffd5b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061112957505050505090565b9091929394602080611165837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516102b2565b9701930193019193929061111a565b602060031936011261026a5760043567ffffffffffffffff811161026a573660238201121561026a5780600401359067ffffffffffffffff821161026a576024810190602436918460051b01011161026a576111cf82610e7e565b916111dd6040519384610956565b808352601f196111ec82610e7e565b015f5b8181106112675750505f5b81811061120f576040518061032d86826110f7565b5f8061121c838587612605565b9061122c60405180938193612621565b0390305af461123961262e565b901561125f579060019161124d828761265d565b52611258818661265d565b50016111fa565b602081519101fd5b8060606020809388010152016111ef565b3461026a57602060031936011261026a576004353033036105f9578060401c6112f36112e58277ffffffffffffffffffffffffffffffffffffffffffffffff165f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860460205260405f2090565b5467ffffffffffffffff1690565b9167ffffffffffffffff81169267ffffffffffffffff81168411156113d55767ffffffffffffffff61ffff91850316116113ad577f4d9dbebf1d909894d9c26fe228c27cec643b2cb490124e5b658f4edd203c20c1926113976113a89377ffffffffffffffffffffffffffffffffffffffffffffffff165f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860460205260405f2090565b556040519081529081906020820190565b0390a1005b7f24d35a26000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f756688fe000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461026a57602060031936011261026a576004353033036105f957805f906114506318fb58646004527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686015f5260245f2090565b9068fbb67fda52d4bfb8bf84146115ec5783156115dc575b811980549182159260011c5f19810191600183811b179461157057856020525f5260405f20948554928315611561575f97505f19840103611543575b50505055556114b360015b1590565b6110a7576114f06114eb825f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860260205260405f2090565b6126d3565b5f8181527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860360205260408120557fe5af7daed5ab2a2dc5f98d53619f05089c0c14d11a6621f6b906a2366c9a7ab35f80a2005b5f1980849383010154928392010155855260408520555f80806114a4565b505050505050506114b3901590565b955050505050600190828154146115c057818101838154146115ac5750600201918254146115a25750600190506114b3565b5f6114b392551590565b6114b3935060025f92019081549055551590565b6114b39250806002835f93019182548155019081549055551590565b5068fbb67fda52d4bfb8bf611468565b63f5a267f15f526004601cfd5b3461026a575f60031936011261026a5760207f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860154604051908152f35b3461026a57602060031936011261026a5773ffffffffffffffffffffffffffffffffffffffff60043561166781610529565b165f526020805f205c604051908152f35b604060031936011261026a5760043567ffffffffffffffff811161026a57806004019060a0600319823603011261026a5760243567ffffffffffffffff811161026a576116c9903690600401610331565b91909273ffffffffffffffffffffffffffffffffffffffff60648301356116ef81610529565b168015908115611815575b50156105f9576084820135801515908161180b575b506117e3576117316114af936117619561172c6024860135613e8f565b613ee0565b9691604461175361174e61174999949699368961368a565b613f20565b6120a5565b960135968661047e89611b23565b6117bb57610a8c94610e34938573ffffffffffffffffffffffffffffffffffffffff6117a46117ab9561179384611984565b9561179d87612dc2565b36916109bd565b93166140d1565b6117b6369180612732565b610f72565b7f8baa579f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f0819bdcd000000000000000000000000000000000000000000000000000000005f5260045ffd5b905042115f61170f565b905033145f6116fa565b3461026a57602060031936011261026a5760206107ae600435613709565b3461026a57602060031936011261026a5773ffffffffffffffffffffffffffffffffffffffff60043561186f81610529565b165f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368605602052602060405f2054604051908152f35b6118ae3661035f565b6118b9839293613709565b156119285782019160208184031261026a5780359067ffffffffffffffff821161026a57610a8c937eff0000000000000000000000000000000000000000000000000000000000009261190c9201610e96565b916040519261191a84610919565b8352161560208201526125b8565b7f7f181275000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461026a575f60031936011261026a576020610262612765565b3461026a575f60031936011261026a57602061026261375e565b80156119ed576119938161327b565b6119bf577fe57b6304000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860360205260405f205490565b5079010000000000000000000000000000000000000000000000000090565b60405190611a1982610919565b60606020835f81520152565b90600182811c92168015611a6c575b6020831014611a3f57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611a34565b81601f8201121561026a57805190611a8d826109a1565b92611a9b6040519485610956565b8284526020838301011161026a57815f9260208093018386015e8301015290565b60208183031261026a5780519067ffffffffffffffff821161026a570160408183031261026a5760405191611af083610919565b8151611afb81610997565b8352602082015167ffffffffffffffff811161026a57611b1b9201611a76565b602082015290565b611b2b611a0c565b508015611c5657611b3b8161327b565b611b67577fe57b6304000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860260205260405f206040515f825492611ba184611a25565b9081845260208401946001811690815f14611c1b5750600114611bde575b505081611bd46102ff94936020930382610956565b8051010190611abc565b5f908152602081209092505b818310611c01575050810160200181611bd4611bbf565b600181602092949394548385880101520191019190611bea565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686525050151560051b8201602001905081611bd4611bbf565b506102ff6128b7565b9180611d7e5761773961ffff821904028314611d5757611c7e91612b26565b9391611c8d8396949296611b23565b91611ca28282611c9b6120b1565b8887612b79565b928315611d3b575b50505015611d1357611ce9611cef94611cc283611984565b611ccb81612dc2565b73ffffffffffffffffffffffffffffffffffffffff169436916109bd565b92612e6e565b7f1626ba7e0000000000000000000000000000000000000000000000000000000090565b505050507fffffffff0000000000000000000000000000000000000000000000000000000090565b611d4f935085611d49612765565b91612d60565b5f8080611caa565b5050507f773900010000000000000000000000000000000000000000000000000000000090565b90611d8982826128f1565b611d975790611c7e91612b26565b611da39261047e6128b7565b15611dcc577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b7fffffffff0000000000000000000000000000000000000000000000000000000090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561026a570180359067ffffffffffffffff821161026a5760200191813603831361026a57565b60405190611e50602083610956565b5f8252565b3033036105f957805160038110156102785780611e7360029261026e565b1480611f4a575b611f22577f8df00f8e3bbfb2c3024a60b74e1d4e520f7cbe1da3476726241146ecf6328832611f1d611eab83613318565b92611f07604051611ed181611ec385602083016102d7565b03601f198101835282610956565b611f02865f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860260205260405f2090565b611fda565b611f1084613355565b50604051918291826102d7565b0390a2565b7f41e2e8f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b50602081015173ffffffffffffffffffffffffffffffffffffffff611f7a825192602080309583010191016129d4565b1614611e7a565b818110611f8c575050565b5f8155600101611f81565b9190601f8111611fa657505050565b610552925f5260205f20906020601f840160051c83019310611fd0575b601f0160051c0190611f81565b9091508190611fc3565b919091825167ffffffffffffffff81116109355761200281611ffc8454611a25565b84611f97565b6020601f82116001146120405781906120319394955f92612035575b50505f198260011b9260031b1c19161790565b9055565b015190505f8061201e565b601f19821690612053845f5260205f2090565b915f5b81811061208d57509583600195969710612075575b505050811b019055565b01515f1960f88460031b161c191690555f808061206b565b9192602060018192868b015181550194019201612056565b6102ff90610b55612765565b73ffffffffffffffffffffffffffffffffffffffff6120ce612408565b5094509150939150604051937f000000000000000000000000000000000000000000000000000000000000000060208601527f00000000000000000000000000000000000000000000000000000000000000006040860152606085015216608083015260a082015260a081526102ff60c082610956565b821561226f5773ffffffffffffffffffffffffffffffffffffffff3091160361224757335f908152602090205c9082821061221f5781835f1973ffffffffffffffffffffffffffffffffffffffff941061220d575b505016905f80808084865af16121ae61262e565b50156121e5576040519081527f3f1beca043a9fe9118bbaeca0035e81e02d6d7cf184bf32fa9dfbd73fdd027c060203092a3600190565b7fb06a467a000000000000000000000000000000000000000000000000000000005f5260045ffd5b61221891033361325c565b5f8361219a565b7fc45cb513000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f7d1c29f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b505050600190565b91905f9282156123ff5773ffffffffffffffffffffffffffffffffffffffff3091160361224757335f9081527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368605602052604090205482811061221f575f198110612364575b5073ffffffffffffffffffffffffffffffffffffffff16918080808085875af161230461262e565b501561233c57506040519081527fed1cf8378e55f85e35be72eebdbef1b7347825916e51aa538d1855113f8c259d60203092a3600190565b807fb06a467a0000000000000000000000000000000000000000000000000000000060049252fd5b73ffffffffffffffffffffffffffffffffffffffff919350829003925f93806123ca3373ffffffffffffffffffffffffffffffffffffffff165f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860560205260405f2090565b5560405190815233907f85b16643b7d42712d1470a1ed9822d6e8cadad23eb1141cabefa28da0944c5b790602090a2906122dc565b50505050600190565b7f1f000000000000000000000000000000000000000000000000000000000000009060408051906124398183610956565b600782527f43616c69627572000000000000000000000000000000000000000000000000006020830152805161246f8282610956565b600581527f312e302e3000000000000000000000000000000000000000000000000000000060208201527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368606549293909246923092909160a01b7fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001617915161252f602082610956565b5f80825236602083013790565b7f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368600547f800000000000000000000000000000000000000000000000000000000000000081161561259f5773ffffffffffffffffffffffffffffffffffffffff1690565b50734337084d9e255ff0702461cf8895ce9e3b5ff10890565b6125c1336135df565b6125ca81613638565b156105f95761055291613489565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9082101561261c5761038f9160051b810190611df0565b6125d8565b908092918237015f815290565b3d15612658573d9061263f826109a1565b9161264d6040519384610956565b82523d5f602084013e565b606090565b805182101561261c5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116036126ce57565b612671565b6126dd8154611a25565b90816126e7575050565b81601f5f93116001146126f8575055565b8183526020832061271491601f0160051c810190600101611f81565b808252602082209081548360011b905f198560031b1c191617905555565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18136030182121561026a570190565b7f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686065460a01b7fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161760405160208101917fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647283527f000000000000000000000000000000000000000000000000000000000000000060408301527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a083015260c082015260c0815261287b60e082610956565b51902090565b5f3560e01c63bc197c81811463f23a6e6182141763150b7a028214176128ae57633c10b94e5f526004601cfd5b6020526020603cf35b6128bf611a0c565b50604051306020820152602081526128d8604082610956565b604051906128e582610919565b60028252602082015290565b5060418114908115612901575090565b604091501490565b919082604091031261026a576020825192015190565b60208183031261026a5780359067ffffffffffffffff821161026a57019060c08282031261026a5761294f610979565b91803567ffffffffffffffff811161026a578261296d9183016109f3565b8352602081013567ffffffffffffffff811161026a5760a0926129919183016109f3565b6020840152604081013560408401526060810135606084015260808101356080840152013560a082015290565b919082604091031261026a576020823592013590565b9081602091031261026a57516102ff81610529565b9290600284516129f88161026e565b612a018161026e565b03612a6a579073ffffffffffffffffffffffffffffffffffffffff92612a2692613b2f565b169081612a335750505f90565b612a4d6020612a66920151602080825183010191016129d4565b73ffffffffffffffffffffffffffffffffffffffff1690565b1490565b8351612a758161026e565b612a7e8161026e565b612abb57612ab690612aae612aa360206102ff97015160208082518301019101612909565b9590948101906129be565b929091613aec565b613b04565b60018451612ac88161026e565b612ad18161026e565b03612b1e57611ec3612b19612b04612af960206102ff98015160208082518301019101612909565b96909581019061291f565b92604051928391602083019190602083019252565b6138de565b505050505f90565b9190823592612b358282613bbd565b9093819363ffffffff60408501351684019063ffffffff82351694602080840193870101910110610e3957604090939210612b6c57565b634be6321b5f526004601cfd5b9091939293612b888486614660565b949093612b9f602088013592604089013598614690565b9091612bde8985604291604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b03612d5457612bec91613c80565b82959299939199158015612d4c575b612d3e57611ec3612cd9612c266102ff9c612c1e612cfc96612d389b36916109bd565b9436916109bd565b604051928391605c612c6360208501977f5479706564446174615369676e280000000000000000000000000000000000008952602e860190613809565b7f20636f6e74656e74732c737472696e67206e616d652c737472696e672076657281527f73696f6e2c75696e7432353620636861696e49642c616464726573732076657260208201527f696679696e67436f6e74726163742c627974657333322073616c74290000000060408201520190613809565b51902092611ec36040519384926020840196875260408401526060830190613809565b51902090604291604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b906129e9565b505050505050505050505f90565b508015612bfb565b50505050505050505f90565b906102ff949392612d3891604090601c60208351612d7e8582610956565b828152017f506572736f6e616c5369676e28627974657320707265666978656429000000008152209180519160208301938452818301528152612cfc606082610956565b612dcb90613e70565b90612dd35750565b64ffffffffff907f48c76fe1000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51907fffffffff000000000000000000000000000000000000000000000000000000008216820361026a57565b9081602091031261026a576102ff90612e06565b6102ff93926060928252602082015281604082015201906102b2565b6040513d5f823e3d90fd5b9290919260048116612e81575b50505050565b612ed39373ffffffffffffffffffffffffffffffffffffffff602094604051968795869485937f9ac4eafd00000000000000000000000000000000000000000000000000000000855260048501612e47565b0392165afa908115612f91577f9ac4eafd00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f91612f62575b501603612f3a575f808080612e7b565b7f1e048e1d000000000000000000000000000000000000000000000000000000005f5260045ffd5b612f84915060203d602011612f8a575b612f7c8183610956565b810190612e33565b5f612f2a565b503d612f72565b612e63565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561026a57016020813591019167ffffffffffffffff821161026a57813603831361026a57565b601f8260209493601f1993818652868601375f8582860101520116010190565b91613155906102ff96949592845260a0602085015261304560a0850161302b83610547565b73ffffffffffffffffffffffffffffffffffffffff169052565b602081013560c08501526131246131186130b961307b6130686040860186612f96565b61012060e08b01526101c08a0191612fe6565b6130886060860186612f96565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608a8403016101008b0152612fe6565b608084013561012088015260a084013561014088015260c08401356101608801526130e760e0850185612f96565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60898403016101808a0152612fe6565b91610100810190612f96565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60868403016101a0870152612fe6565b936040830152606082015260808184039101526102b2565b9190939460028316613182575b505050505050565b6020946131d473ffffffffffffffffffffffffffffffffffffffff92604051988997889687957f9e364dba00000000000000000000000000000000000000000000000000000000875260048701613006565b0392165afa908115612f91577f9e364dba00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f9161323d575b501603612f3a575f808080808061317a565b613256915060203d602011612f8a57612f7c8183610956565b5f61322b565b73ffffffffffffffffffffffffffffffffffffffff165f5260205f205d565b6132b07f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686016318fb58646004525f5260245f2090565b68fbb67fda52d4bfb8bf82146115ec578115613307575b801954156132de576020525f5260405f2054151590565b9060019181815414613302578183820154146133025760020154146102ff57505f90565b505090565b68fbb67fda52d4bfb8bf91506132c7565b8051906003821015610278576020015160208151910120604051906133416020830180946102a5565b60408201526040815261287b606082610956565b905f9161338d7f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686016318fb58646004525f5260245f2090565b9068fbb67fda52d4bfb8bf81146115ec578015613479575b8119918254918160205282156133ed575b805f5260405f20928354156133cc575050505050565b9091929394955060011c8092015560010180915560011b6001179055600190565b91508054801561347057828114612e7b57600182018054908115613462575083811461345b576002830191825492831561344c575084831461317a575f52600160405f20555f52600260405f20555f52600360405f20556007916133b6565b95505050505091925055600190565b5050505050565b945050505091925055600190565b50555060019150565b5068fbb67fda52d4bfb8bf6133a5565b5f5b81518051821015612e7b57816134a09161265d565b51805173ffffffffffffffffffffffffffffffffffffffff16806135d9575030905b6134cb85611984565b60ff60c882901c1615806135ba575b6135925785925f8073ffffffffffffffffffffffffffffffffffffffff613537941694602081019361351760408651930192835190838b8b6147d9565b9451915191602083519301915af1928361352f61262e565b958692614966565b1580613585575b61354b575060010161348b565b613581906040519182917fa5fa8d2b00000000000000000000000000000000000000000000000000000000835260048301610b8d565b0390fd5b506020830151151561353e565b7f3ceb88d9000000000000000000000000000000000000000000000000000000005f5260045ffd5b503073ffffffffffffffffffffffffffffffffffffffff8416146134da565b906134c2565b73ffffffffffffffffffffffffffffffffffffffff16308114613633576102ff9060405190602082015260208152613618604082610956565b6040519061362582610919565b600282526020820152613318565b505f90565b8015613684576136478161327b565b15613633575f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860360205261367f60405f2054613e70565b501590565b50600190565b91909160a08184031261026a576040519060a0820182811067ffffffffffffffff82111761093557604052819381359167ffffffffffffffff831161026a576136d96080939284938301610f72565b8452602081013560208501526040810135604085015260608101356136fd81610529565b60608501520135910152565b7f01000000000000000000000000000000000000000000000000000000000000008114908115613737575090565b7f010100000000000000000000000000000000000000000000000000000000000091501490565b6318fb58646004527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686015f5260245f2090811954918260011c9215159080541560026001830154159201541592156137b457505050565b90919293505f906137da57506001906137d557506002906102ff5750600390565b919050565b92915050565b90601582018092116126ce57565b90600282018092116126ce57565b919082018092116126ce57565b805191908290602001825e015f815290565b90610552600161385b936040519485917f226368616c6c656e6765223a22000000000000000000000000000000000000006020840152602d830190613809565b7f22000000000000000000000000000000000000000000000000000000000000008152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183610956565b80516020101561261c5760400190565b6138c89060209392613809565b9081520190565b9081602091031261026a575190565b92919060a081019384517f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a810613ad95760208201907fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e63461394d83516060860151613947816137e0565b91614c42565b6020815191012003613ae25761396561396a9161419b565b61381b565b61397f825160408501516139478451826137fc565b60208151910120906020815191012003613ad9577f0100000000000000000000000000000000000000000000000000000000000000806139e86139c285516138ab565b517fff000000000000000000000000000000000000000000000000000000000000001690565b1603613ad9575f613a026020925160405191828092613809565b039060025afa15612f915760205f613a378151613a2b8551611ec36040519384928884016138bb565b60405191828092613809565b039060025afa15612f915760805f519101935f80865185613a888551611ec38a60405194859360208501978c899192608093969594919660a084019784526020840152604083015260608201520152565b51906101005afa94613a9861262e565b80519680613ad0575b613ab457506102ff955051905191614202565b600196612a6696508101602090810195500192506138cf915050565b50861515613aa1565b50505050505f90565b5050505050505f90565b5f5260206001815f60025afa51903d15613b0257565bfe5b93929190613b15848484848961435c565b90959015613b2557505050505090565b6102ff9550614417565b604080515f95949093918114613b7a57604114613b4b57505050565b604080929395508101355f1a60205281375b5f526020604060805f60015afa505f6060523d6060185191604052565b507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91929450602081013590601b8260ff1c016020523560405216606052613b5d565b909163ffffffff60208301351682019263ffffffff84351692602080860195850101910110610e3957565b905f1982019182116126ce57565b7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255103907fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255182116126ce57565b9082101561261c570190565b80156126ce575f190190565b90929192831161026a579190565b9093929384831161026a57841161026a578101920390565b9080613c93575b50505f905f905f905f90565b7f29000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000613d11613ceb613ce485613be8565b8587613c42565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1603613db7575f5b818110613d2c575b5050505b5f80613c87565b613d3a613ceb828486613c42565b7fff0000000000000000000000000000000000000000000000000000000000000081167f280000000000000000000000000000000000000000000000000000000000000003613da257508015613d9d57613d95908284613c5a565b939093929190565b613d21565b613dab906146bb565b613d9d57600101613d19565b9081805b613dc8575b505050613d25565b613de2613ceb613ddb8396949596613be8565b8686613c42565b7fff0000000000000000000000000000000000000000000000000000000000000081167f290000000000000000000000000000000000000000000000000000000000000003613e4b575080613e3c85613e44938187613c68565b959094613c5a565b9293929091565b613e5890949392946146bb565b613e6b57613e6590613c4e565b80613dbb565b613dc0565b60a01c64ffffffffff16908115613e88574282109190565b5f91508190565b8060401c5f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860460205260405f208054915f1983146126ce5767ffffffffffffffff9160018401905516036113d557565b909163ffffffff82351682019063ffffffff8235169060208084019383010184860110610e3957613f15604093958395613bbd565b9390939210612b6c57565b60c1610100613f326040519182610956565b8181527f290000000000000000000000000000000000000000000000000000000000000060e060208301927f5369676e65644261746368656443616c6c284261746368656443616c6c20626184527f746368656443616c6c2c75696e74323536206e6f6e63652c627974657333322060408201527f6b6579486173682c61646472657373206578656375746f722c75696e7432353660608201527f20646561646c696e65294261746368656443616c6c2843616c6c5b5d2063616c60808201527f6c732c626f6f6c207265766572744f6e4661696c7572652943616c6c2861646460a08201527f7265737320746f2c75696e743235362076616c75652c6279746573206461746160c08201520152209061287b61404f8251614a51565b611ec36020840151936040810151906080614081606083015173ffffffffffffffffffffffffffffffffffffffff1690565b9101519160405196879560208701998a929360a09473ffffffffffffffffffffffffffffffffffffffff93989796929860c086019986526020860152604085015260608401521660808201520152565b92909192600181166140e35750505050565b6141359373ffffffffffffffffffffffffffffffffffffffff602094604051968795869485937f33dd593c00000000000000000000000000000000000000000000000000000000855260048501612e47565b0392165afa908115612f91577f33dd593c00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f91612f6257501603612f3a575f808080612e7b565b6040516102ff916141ad606083610956565b604082527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208301527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f6040830152614cec565b93919092938315801561431d575b8015614315575b80156142eb575b613ad95761422c8386614d93565b15613ad95760405191602083526020808401526020604084015260608301527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808301527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a083015260208260c08160055f19fa1561026a577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551946142e593866142df945181818909940991614e5f565b91613bf6565b90081590565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255182101561421e565b508115614217565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551841015614210565b9081602091031261026a57516102ff81610f68565b91909361436c6114af83876156fe565b8015614404575b6143f8575f94611ec36143b29287966040519586946020860198899192608093969594919660a084019784526020840152604083015260608201520152565b51906101005afa6143c161262e565b90806143ed575b156143e657806020806143e093518301019101614347565b90600190565b505f905f90565b5060208151146143c8565b50505050505f90600190565b506144126114af8286615775565b614373565b909392919261442684866156fe565b15801561464f575b613ad9577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255161461c612a669561461161462896614469615804565b95614472610988565b5f81525f60208201525f6040820152875261448b610988565b9182526020820152600160408201526144a48660200190565b9081526144af610988565b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29681527f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5602082015260016040820152608087019081526146076145138351615ac2565b604089019081526145f86145e961452a8551615ac2565b6101008c0190815261453f8751855190615aff565b9560608d019687528c61455f6145588a51845190615aff565b9160a00190565b528c6145786145718751845190615aff565b9160c00190565b528c61459161458a8951845190615aff565b9160e00190565b528c6145ab6145a38a51855190615aff565b916101200190565b528c6145c56145bd8751855190615aff565b916101400190565b528c6145df6145d78951855190615aff565b916101600190565b5251905190615aff565b6101808b018181529551615aff565b6101a08a015251835190615aff565b6101c088016145df565b6101e0850152615b1e565b8181880993099061584a565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551900690565b5061465a8184615775565b1561442e565b909163ffffffff82351682019263ffffffff8435169260208086019585010191011061468857565b9150505f5f91565b909163ffffffff60608301351682019263ffffffff8435169260208086019585010191011061468857565b7fff0000000000000000000000000000000000000000000000000000000000000016801590811561477a575b8115614750575b8115614726575b81156146ff575090565b7f290000000000000000000000000000000000000000000000000000000000000091501490565b7f2800000000000000000000000000000000000000000000000000000000000000811491506146f5565b7f2c00000000000000000000000000000000000000000000000000000000000000811491506146ee565b7f2000000000000000000000000000000000000000000000000000000000000000811491506146e7565b91909160408184031261026a576147ba81612e06565b92602082015167ffffffffffffffff811161026a576102ff9201611a76565b6060959490929190600884166147f0575050505050565b5f94965073ffffffffffffffffffffffffffffffffffffffff8094939261486087936040519a8b98899788957fec9b4ee4000000000000000000000000000000000000000000000000000000008752600487015216602485015260448401526080606484015260848301906102b2565b0393165af18015612f91575f925f916148c9575b507fffffffff000000000000000000000000000000000000000000000000000000007fec9b4ee40000000000000000000000000000000000000000000000000000000091931603612f3a575f8080808061345b565b7fffffffff0000000000000000000000000000000000000000000000000000000093507fec9b4ee400000000000000000000000000000000000000000000000000000000915061492a903d805f833e6149228183610956565b8101906147a4565b9390939150614874565b926102ff9492614958928552151560208501526080604085015260808401906102b2565b9160608184039101526102b2565b90929160108216614978575050505050565b5f73ffffffffffffffffffffffffffffffffffffffff6020956149ca604051988997889687947fc82b175900000000000000000000000000000000000000000000000000000000865260048601614934565b0393165af1908115612f91577fc82b175900000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f91614a32575b501603612f3a575f8080808061345b565b614a4b915060203d602011612f8a57612f7c8183610956565b5f614a21565b60806057604051614a63608082610956565b8181527f6e743235362076616c75652c6279746573206461746129000000000000000000606060208301927f4261746368656443616c6c2843616c6c5b5d2063616c6c732c626f6f6c20726584527f766572744f6e4661696c7572652943616c6c286164647265737320746f2c75696040820152015220908251805194601f19614b05614aef88610e7e565b97614afd604051998a610956565b808952610e7e565b013660208801376060935f5b8351811015614bee5780614b276001928661265d565b516029604051614b378a82610956565b8181527f7465732064617461290000000000000000000000000000000000000000000000604060208301927f43616c6c286164647265737320746f2c75696e743235362076616c75652c627984520152209073ffffffffffffffffffffffffffffffffffffffff81511690604060208201519101516020815191012090604051926020840194855260408401528a83015288820152878152614bda60a082610956565b519020614be7828b61265d565b5201614b11565b509493509461287b9250614c1f9150602090604051614c1481611ec3858201809561595b565b519020930151151590565b604080516020810195865290810193909352151560608301528160808101611ec3565b805160609493929083811115614cb3575b81811115614cab575b50828110614c6957505050565b6040519450918290039101601f19601f830181165b8083015181870152018015614c9657601f1990614c7e565b505060408184015f6020820152016040528252565b90505f614c5c565b925082614c53565b90614cc5826109a1565b614cd26040519182610956565b828152601f19614ce282946109a1565b0190602036910137565b90815115614d895790614d19614d14614d0d614d08845161269e565b6137ee565b6003900490565b614cbb565b916020830190828051019060208201928351945f85525b838110614d3f57505050505290565b600360049101916001603f845182828260121c16880101518453828282600c1c16880101518385015382828260061c16880101516002850153168501015160038201530190614d30565b50506102ff611e41565b6ffffffffeffffffffffffffffffffffff60601b198110801590614e41575b8015614e30575b614e2a576ffffffffeffffffffffffffffffffffff60601b197f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b818381807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc81970991818180090908089180091490565b50505f90565b5080158015614db957508115614db9565b506ffffffffeffffffffffffffffffffffff60601b19821015614db2565b90915f925f9160ff958115806156f6575b6156eb57614e7e8386615988565b9490978815806156e3575b615695575b83811c60028460fe1c16015b1561567d57600184821c16600284831c60011b160160018114615632575b60028114615625575b60031461561a575b5f1990969493929196019460019889975b875f1911614f715750505050505050505060405191606083015260208252602080830152602060408301527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808301526ffffffffeffffffffffffffffffffffff60601b1960a083015260208260c08160055f19fa1561026a576ffffffffeffffffffffffffffffffffff60601b199151900990565b6ffffffffeffffffffffffffffffffffff60601b198160029c989a9c9b959697999b09936ffffffffeffffffffffffffffffffffff60601b1985800980956ffffffffeffffffffffffffffffffffff60601b19828409966ffffffffeffffffffffffffffffffffff60601b199109916ffffffffeffffffffffffffffffffffff60601b198a8208908a6ffffffffeffffffffffffffffffffffff60601b19036ffffffffeffffffffffffffffffffffff60601b199108906ffffffffeffffffffffffffffffffffff60601b1991096ffffffffeffffffffffffffffffffffff60601b19906003099c6ffffffffeffffffffffffffffffffffff60601b19908309986ffffffffeffffffffffffffffffffffff60601b1991099b6ffffffffeffffffffffffffffffffffff60601b19867fffffffff00000001000000000000000000000000fffffffffffffffffffffffd096ffffffffeffffffffffffffffffffffff60601b19828009906ffffffffeffffffffffffffffffffffff60601b199108956ffffffffeffffffffffffffffffffffff60601b19036ffffffffeffffffffffffffffffffffff60601b199087086ffffffffeffffffffffffffffffffffff60601b1991096ffffffffeffffffffffffffffffffffff60601b1981938309906ffffffffeffffffffffffffffffffffff60601b19910891878c1c600116878d1c60011b6002160180156155f557600181146155aa575b6002811461559f575b600314615596575b8c15615581578c916ffffffffeffffffffffffffffffffffff60601b198085818d819609089388820392090894811561536c575b6ffffffffeffffffffffffffffffffffff60601b19868009986ffffffffeffffffffffffffffffffffff60601b198a9788099d8e976ffffffffeffffffffffffffffffffffff60601b1991099d6ffffffffeffffffffffffffffffffffff60601b199109986ffffffffeffffffffffffffffffffffff60601b199109916ffffffffeffffffffffffffffffffffff60601b19837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd09866ffffffffeffffffffffffffffffffffff60601b19036ffffffffeffffffffffffffffffffffff60601b19848009906ffffffffeffffffffffffffffffffffff60601b199108906ffffffffeffffffffffffffffffffffff60601b199108956ffffffffeffffffffffffffffffffffff60601b19910991856ffffffffeffffffffffffffffffffffff60601b19036ffffffffeffffffffffffffffffffffff60601b199108906ffffffffeffffffffffffffffffffffff60601b199109906ffffffffeffffffffffffffffffffffff60601b19910892985f19905b0196949392979597614eda565b8c861561537957506151ce565b989150919a94506ffffffffeffffffffffffffffffffffff60601b198b7fffffffff00000001000000000000000000000000fffffffffffffffffffffffd096ffffffffeffffffffffffffffffffffff60601b198180099283916ffffffffeffffffffffffffffffffffff60601b19838309946ffffffffeffffffffffffffffffffffff60601b1991099d8e916ffffffffeffffffffffffffffffffffff60601b198281038208916ffffffffeffffffffffffffffffffffff60601b199108906ffffffffeffffffffffffffffffffffff60601b1991096ffffffffeffffffffffffffffffffffff60601b1990600309926ffffffffeffffffffffffffffffffffff60601b199109986ffffffffeffffffffffffffffffffffff60601b1991099b6ffffffffeffffffffffffffffffffffff60601b19837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd096ffffffffeffffffffffffffffffffffff60601b19838009906ffffffffeffffffffffffffffffffffff60601b1991089b6ffffffffeffffffffffffffffffffffff60601b199109918b6ffffffffeffffffffffffffffffffffff60601b19036ffffffffeffffffffffffffffffffffff60601b1991086ffffffffeffffffffffffffffffffffff60601b199109906ffffffffeffffffffffffffffffffffff60601b199108925f199061535f565b60019c50909a8c98509094505f19915061535f565b5050818361519a565b8b92508a9150615192565b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29692507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f59150615189565b5050505f19906ffffffffeffffffffffffffffffffffff60601b199a949a039361535f565b889750859150614ec9565b9697508796859250614ec1565b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29698507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f59250614eb8565b5f1901600184821c16600284831c60011b1601614e9a565b91927fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551919382039008915f918315806156db575b15614e8e575050505050505050505f90565b5060016156c9565b508515614e89565b505050505050505f90565b508015614e70565b90811515918261574b575b5081615741575b81615719575090565b7f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a89150111590565b8015159150615710565b7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325511191505f615709565b6ffffffffeffffffffffffffffffffffff60601b1980807f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8185817fffffffff00000001000000000000000000000000fffffffffffffffffffffffc81838009080908818580091493109110161690565b604051906157f38261093a565b5f6040838281528260208201520152565b604051906102006158158184610956565b825f5b82811061582457505050565b60209061582f6157e6565b8184015201615818565b90601081101561261c5760051b0190565b5f9392849283929183915b6080831061586b575050505061038f9293615db4565b85615939575b600c61587d8260fc1c90565b16600361588a8460fe1c90565b161760406158988287615839565b5101516158c0575b506158b76158b060019260021b90565b9260021b90565b92019190615855565b959194909782155f1461590f575050506158da8483615839565b51519260016158b76158b0604061590060206158f68b8a615839565b5101519988615839565b5101519796995b9250506158a0565b6158b0959260019261592e926159286158b79a89615839565b51615c0b565b979196909699615907565b969461594a91946159509396615b84565b91615b84565b949193909396615871565b80516020909101905f5b8181106159725750505090565b8251845260209384019390920191600101615965565b91907f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5918015615abc578461038f9495831480615ab3575b15615a9e5750506ffffffffeffffffffffffffffffffffff60601b1982600209916ffffffffeffffffffffffffffffffffff60601b198084800993818080808881818a09950996817fffffffff00000001000000000000000000000000fffffffffffffffffffffffe816001840892080960030981808080867fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0981858009089681600181818c099b099809810393868203900890090890615ed1565b909192615aaa93615e33565b92909190615ed1565b508184146159e1565b50925090565b615ae290615ace6157e6565b508051906040602082015191015191615b84565b9060405192615af08461093a565b83526020830152604082015290565b615ae291615b0b6157e6565b5080516040602083015192015192615c0b565b7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325517fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f615b6992615f67565b9015615b725790565b634e487b715f5260126020526024601cfd5b9290916ffffffffeffffffffffffffffffffffff60601b1980918180868009968180808a818080808a800980097fffffffff00000001000000000000000000000000fffffffffffffffffffffffc09818088800960030908940960040991818080808087600209810381868009089c80096008098103938b82039008900908940960020990565b91939092935f945f945f946040810151906ffffffffeffffffffffffffffffffffff60601b198280096ffffffffeffffffffffffffffffffffff60601b19858009926ffffffffeffffffffffffffffffffffff60601b1980878609602085015109916ffffffffeffffffffffffffffffffffff60601b19808681868103818d8189890990090896510991818381039189090890811585151694855f14615d4f575050505050600114615cbd5750505050565b6ffffffffeffffffffffffffffffffffff60601b198080809a508699508097985080969381808087819998099d838f94097fffffffff00000001000000000000000000000000fffffffffffffffffffffffc09818088800960030908940960040991818080808087600209810381868009089c80096008098103938b820390089009089409600209905f808080612e7b565b929b50935096506ffffffffeffffffffffffffffffffffff60601b1980808080809c9d50809a995080985080969f508b8009809709958a098180876002098103818381038188800908089d098103938c8203900890090895099009905f808080612e7b565b92918015615e29576ffffffffeffffffffffffffffffffffff60601b197fffffffff00000001000000000000000000000000fffffffffffffffffffffffd615dfb92615f67565b919015615b72576ffffffffeffffffffffffffffffffffff60601b1991829081808280098097099509900990565b505090505f905f90565b9392908015615ec4576ffffffffeffffffffffffffffffffffff60601b19806001969481808080809a9881809981039d8e920908938160018b820392090881818009998a9182099809918180898180877fffffffff00000001000000000000000000000000fffffffffffffffffffffffd09818381038188800908089c09938b820390080908946001099260010990565b5092509190600190600190565b9092919260405192602084526020808501526020604085015260608401527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808401526ffffffffeffffffffffffffffffffffff60601b1960a084015260208360c08160055f19fa1561026a576ffffffffeffffffffffffffffffffffff60601b198093918180935180920995098009900991565b91908115615fa2576020925f9260c0926040519286845286808501528660408501526060840152608083015260a082015260055afa905f5190565b5050505f905f9056fea164736f6c634300081d000a'; + return + hex'60e0604052346100ce57604080519081016001600160401b038111828210176100ba576040908152600782526621b0b634b13ab960c91b6020830190815281519182016001600160401b038111838210176100ba57604052600582526020820192640312e302e360dc1b845251902060805251902060a0523060c052604051615fb890816100d382396080518181816120dc0152612811015260a0518181816121020152612837015260c05181818161250101526127c30152f35b634e487b7160e01b5f52604160045260245ffd5b5f80fdfe60806040526004361015610015575b3661288157005b5f3560e01c80630f3ebf6e1461024457806312aaac701461023f5780631626ba7e1461023a57806319822f7c146102355780631b71bb6e14610230578063219a260d1461022b57806323d578861461022657806325e5c2431461022157806327258b221461021c57806328495877146102175780632abbf4691461021257806330b1fa3b1461020d5780634223b5c2146102085780636575f6aa146102035780636750aa5f146101fe5780636a1ea88d146101f95780637613e7ba146101f4578063786902f2146101ef578063789ff701146101ea57806384b0196e146101e55780638dd7712f146101e057806394430fa5146101db57806399e1d016146101d6578063a58bb84a146101d1578063ac9650d8146101cc578063b70e36f0146101c7578063b75c7dc6146101c2578063b923614f146101bd578063bf7c5be9146101b8578063c3c16ee4146101b3578063d03c7914146101ae578063e41dae2f146101a9578063e9ae5c53146101a4578063f698da251461019f5763fac750e00361000e5761196a565b611950565b6118a5565b61183d565b61181f565b611678565b611635565b6115f9565b6113fd565b611278565b611174565b61101c565b610fe8565b610e46565b610d9e565b610cc8565b610caf565b610c96565b610c30565b610bcd565b610b9e565b610b34565b610a8e565b610a0e565b610817565b6107b8565b610790565b61070e565b61066a565b610621565b610554565b6103e5565b610393565b610302565b3461026a57602060031936011261026a576020610262600435611984565b604051908152f35b5f80fd5b6003111561027857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9060038210156102785752565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b606060206102ff938184526102ef82850182516102a5565b01519160408082015201906102b2565b90565b3461026a57602060031936011261026a5761032d610321600435611b23565b604051918291826102d7565b0390f35b9181601f8401121561026a5782359167ffffffffffffffff831161026a576020838186019501011161026a57565b90604060031983011261026a57600435916024359067ffffffffffffffff821161026a5761038f91600401610331565b9091565b3461026a5760206103ac6103a63661035f565b91611c5f565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b908161012091031261026a5790565b3461026a57606060031936011261026a5760043567ffffffffffffffff811161026a576104169036906004016103d6565b60443560243573ffffffffffffffffffffffffffffffffffffffff61043961253c565b1633036105015761032d926104836104d792846104d0956104f1575b5061046d610467610100850185611df0565b90612b26565b9693928561047e8598949398611b23565b6129e9565b9461048d82611984565b95156104e75778ffffffffff000000000000000000000000000000000000000086169788955b73ffffffffffffffffffffffffffffffffffffffff9236916109bd565b951661316d565b6040519081529081906020820190565b60019788956104b3565b5f9081803892335af1505f610455565b7fd663742a000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff81160361026a57565b359061055282610529565b565b3461026a57602060031936011261026a5760043561057181610529565b3033036105f95773ffffffffffffffffffffffffffffffffffffffff167f800000000000000000000000000000000000000000000000000000000000000081177f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368600557fea942933e7fb7cb728727281a81e352a20dda96dbc4ee97633a3fa25da48e4ab5f80a2005b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461026a57602060031936011261026a576004355f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368604602052602060405f2054604051908152f35b3461026a57604060031936011261026a5760043561068781610529565b602435903033036105f95773ffffffffffffffffffffffffffffffffffffffff1690815f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686056020528060405f20556040519081527f30346eac03b1c5913bb026e6d8d0f42783a0c706bb2a86916410dc385cc2723660203092a360405160018152602090f35b3461026a57604060031936011261026a5760043561072b81610529565b602435903033036105f957806107568373ffffffffffffffffffffffffffffffffffffffff9361325c565b60405192835216907ff8c1385bb618a432aebbaae5bfab911559154982a64e1750b17b50f5782dc98860203092a360405160018152602090f35b3461026a57602060031936011261026a5760206107ae60043561327b565b6040519015158152f35b3461026a575f60031936011261026a5761032d6040516107d9604082610956565b601581527f556e69737761702e43616c696275722e312e302e30000000000000000000000060208201526040519182916020835260208301906102b2565b3461026a57602060031936011261026a576004356bffffffffffffffffffffffff811680910361026a573033036105f9577f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368606546bffffffffffffffffffffffff8116820361088157005b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368606557f0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d315f80a1005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761093557604052565b6108ec565b6060810190811067ffffffffffffffff82111761093557604052565b90601f601f19910116810190811067ffffffffffffffff82111761093557604052565b6040519061055260c083610956565b60405190610552606083610956565b6003111561026a57565b67ffffffffffffffff811161093557601f01601f191660200190565b9291926109c9826109a1565b916109d76040519384610956565b82948184528183011161026a578281602093845f960137010152565b9080601f8301121561026a578160206102ff933591016109bd565b3461026a57602060031936011261026a5760043567ffffffffffffffff811161026a576040600319823603011261026a57604051610a4b81610919565b8160040135610a5981610997565b8152602482013567ffffffffffffffff811161026a57610a8c926004610a8292369201016109f3565b6020820152611e55565b005b3461026a57602060031936011261026a57600435610aaa611a0c565b5080610ae16318fb58646004527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686015f5260245f2090565b015490610aec61375e565b1115610b0c576103218168fbb67fda52d4bfb8bf61032d93141502611b23565b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461026a57602060031936011261026a576020610262600435610b55612765565b604291604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9060206102ff9281815201906102b2565b3461026a575f60031936011261026a5761032d610bb96120b1565b6040519182916020835260208301906102b2565b3461026a57602060031936011261026a5777ffffffffffffffffffffffffffffffffffffffffffffffff600435165f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368604602052602060405f2054604051908152f35b3461026a575f60031936011261026a5760206040517f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686008152f35b600319606091011261026a57600435610c8281610529565b90602435610c8f81610529565b9060443590565b3461026a5760206107ae610ca936610c6a565b91612145565b3461026a5760206107ae610cc236610c6a565b91612277565b3461026a575f60031936011261026a577fff00000000000000000000000000000000000000000000000000000000000000610d4f73ffffffffffffffffffffffffffffffffffffffff610d41610d1c612408565b97946040999397919699949294519a8b9a168a5260e060208b015260e08a01906102b2565b9088820360408a01526102b2565b93606087015216608085015260a084015282810360c0840152602080835192838152019201905f5b818110610d85575050500390f35b8251845285945060209384019390920191600101610d77565b3461026a57604060031936011261026a5760043567ffffffffffffffff811161026a57610dcf9036906004016103d6565b73ffffffffffffffffffffffffffffffffffffffff610dec61253c565b16330361050157610e16610e07610467610100840184611df0565b50505050916060810190611df0565b60048193929310610e3957826004610e3492610a8c95019101610fc2565b613489565b633b99b53d5f526004601cfd5b3461026a575f60031936011261026a576020610e6061253c565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b67ffffffffffffffff81116109355760051b60200190565b9080601f8301121561026a57813591610eae83610e7e565b92610ebc6040519485610956565b80845260208085019160051b8301019183831161026a5760208101915b838310610ee857505050505090565b823567ffffffffffffffff811161026a578201906060601f19838803011261026a5760405190610f178261093a565b6020830135610f2581610529565b82526040830135602083015260608301359167ffffffffffffffff831161026a57610f58886020809695819601016109f3565b6040820152815201920191610ed9565b8015150361026a57565b91909160408184031261026a5760405190610f8c82610919565b819381359167ffffffffffffffff831161026a57610fb06020939284938301610e96565b8452013591610fbe83610f68565b0152565b9060208282031261026a57813567ffffffffffffffff811161026a576102ff9201610f72565b602060031936011261026a5760043567ffffffffffffffff811161026a57611017610a8c913690600401610f72565b6125b8565b3461026a57604060031936011261026a576004356024353033036105f95781156110cf576110498261327b565b156110a75760207f55194732cd17a56216773dcef66731844f1900f9b878633e3be2b6cce1e542c991835f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860382528060405f2055604051908152a2005b7fe57b6304000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fb37b2fa0000000000000000000000000000000000000000000000000000000005f5260045ffd5b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061112957505050505090565b9091929394602080611165837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516102b2565b9701930193019193929061111a565b602060031936011261026a5760043567ffffffffffffffff811161026a573660238201121561026a5780600401359067ffffffffffffffff821161026a576024810190602436918460051b01011161026a576111cf82610e7e565b916111dd6040519384610956565b808352601f196111ec82610e7e565b015f5b8181106112675750505f5b81811061120f576040518061032d86826110f7565b5f8061121c838587612605565b9061122c60405180938193612621565b0390305af461123961262e565b901561125f579060019161124d828761265d565b52611258818661265d565b50016111fa565b602081519101fd5b8060606020809388010152016111ef565b3461026a57602060031936011261026a576004353033036105f9578060401c6112f36112e58277ffffffffffffffffffffffffffffffffffffffffffffffff165f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860460205260405f2090565b5467ffffffffffffffff1690565b9167ffffffffffffffff81169267ffffffffffffffff81168411156113d55767ffffffffffffffff61ffff91850316116113ad577f4d9dbebf1d909894d9c26fe228c27cec643b2cb490124e5b658f4edd203c20c1926113976113a89377ffffffffffffffffffffffffffffffffffffffffffffffff165f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860460205260405f2090565b556040519081529081906020820190565b0390a1005b7f24d35a26000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f756688fe000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461026a57602060031936011261026a576004353033036105f957805f906114506318fb58646004527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686015f5260245f2090565b9068fbb67fda52d4bfb8bf84146115ec5783156115dc575b811980549182159260011c5f19810191600183811b179461157057856020525f5260405f20948554928315611561575f97505f19840103611543575b50505055556114b360015b1590565b6110a7576114f06114eb825f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860260205260405f2090565b6126d3565b5f8181527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860360205260408120557fe5af7daed5ab2a2dc5f98d53619f05089c0c14d11a6621f6b906a2366c9a7ab35f80a2005b5f1980849383010154928392010155855260408520555f80806114a4565b505050505050506114b3901590565b955050505050600190828154146115c057818101838154146115ac5750600201918254146115a25750600190506114b3565b5f6114b392551590565b6114b3935060025f92019081549055551590565b6114b39250806002835f93019182548155019081549055551590565b5068fbb67fda52d4bfb8bf611468565b63f5a267f15f526004601cfd5b3461026a575f60031936011261026a5760207f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860154604051908152f35b3461026a57602060031936011261026a5773ffffffffffffffffffffffffffffffffffffffff60043561166781610529565b165f526020805f205c604051908152f35b604060031936011261026a5760043567ffffffffffffffff811161026a57806004019060a0600319823603011261026a5760243567ffffffffffffffff811161026a576116c9903690600401610331565b91909273ffffffffffffffffffffffffffffffffffffffff60648301356116ef81610529565b168015908115611815575b50156105f9576084820135801515908161180b575b506117e3576117316114af936117619561172c6024860135613e8f565b613ee0565b9691604461175361174e61174999949699368961368a565b613f20565b6120a5565b960135968661047e89611b23565b6117bb57610a8c94610e34938573ffffffffffffffffffffffffffffffffffffffff6117a46117ab9561179384611984565b9561179d87612dc2565b36916109bd565b93166140d1565b6117b6369180612732565b610f72565b7f8baa579f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f0819bdcd000000000000000000000000000000000000000000000000000000005f5260045ffd5b905042115f61170f565b905033145f6116fa565b3461026a57602060031936011261026a5760206107ae600435613709565b3461026a57602060031936011261026a5773ffffffffffffffffffffffffffffffffffffffff60043561186f81610529565b165f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368605602052602060405f2054604051908152f35b6118ae3661035f565b6118b9839293613709565b156119285782019160208184031261026a5780359067ffffffffffffffff821161026a57610a8c937eff0000000000000000000000000000000000000000000000000000000000009261190c9201610e96565b916040519261191a84610919565b8352161560208201526125b8565b7f7f181275000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461026a575f60031936011261026a576020610262612765565b3461026a575f60031936011261026a57602061026261375e565b80156119ed576119938161327b565b6119bf577fe57b6304000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860360205260405f205490565b5079010000000000000000000000000000000000000000000000000090565b60405190611a1982610919565b60606020835f81520152565b90600182811c92168015611a6c575b6020831014611a3f57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611a34565b81601f8201121561026a57805190611a8d826109a1565b92611a9b6040519485610956565b8284526020838301011161026a57815f9260208093018386015e8301015290565b60208183031261026a5780519067ffffffffffffffff821161026a570160408183031261026a5760405191611af083610919565b8151611afb81610997565b8352602082015167ffffffffffffffff811161026a57611b1b9201611a76565b602082015290565b611b2b611a0c565b508015611c5657611b3b8161327b565b611b67577fe57b6304000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860260205260405f206040515f825492611ba184611a25565b9081845260208401946001811690815f14611c1b5750600114611bde575b505081611bd46102ff94936020930382610956565b8051010190611abc565b5f908152602081209092505b818310611c01575050810160200181611bd4611bbf565b600181602092949394548385880101520191019190611bea565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686525050151560051b8201602001905081611bd4611bbf565b506102ff6128b7565b9180611d7e5761773961ffff821904028314611d5757611c7e91612b26565b9391611c8d8396949296611b23565b91611ca28282611c9b6120b1565b8887612b79565b928315611d3b575b50505015611d1357611ce9611cef94611cc283611984565b611ccb81612dc2565b73ffffffffffffffffffffffffffffffffffffffff169436916109bd565b92612e6e565b7f1626ba7e0000000000000000000000000000000000000000000000000000000090565b505050507fffffffff0000000000000000000000000000000000000000000000000000000090565b611d4f935085611d49612765565b91612d60565b5f8080611caa565b5050507f773900010000000000000000000000000000000000000000000000000000000090565b90611d8982826128f1565b611d975790611c7e91612b26565b611da39261047e6128b7565b15611dcc577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b7fffffffff0000000000000000000000000000000000000000000000000000000090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561026a570180359067ffffffffffffffff821161026a5760200191813603831361026a57565b60405190611e50602083610956565b5f8252565b3033036105f957805160038110156102785780611e7360029261026e565b1480611f4a575b611f22577f8df00f8e3bbfb2c3024a60b74e1d4e520f7cbe1da3476726241146ecf6328832611f1d611eab83613318565b92611f07604051611ed181611ec385602083016102d7565b03601f198101835282610956565b611f02865f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860260205260405f2090565b611fda565b611f1084613355565b50604051918291826102d7565b0390a2565b7f41e2e8f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b50602081015173ffffffffffffffffffffffffffffffffffffffff611f7a825192602080309583010191016129d4565b1614611e7a565b818110611f8c575050565b5f8155600101611f81565b9190601f8111611fa657505050565b610552925f5260205f20906020601f840160051c83019310611fd0575b601f0160051c0190611f81565b9091508190611fc3565b919091825167ffffffffffffffff81116109355761200281611ffc8454611a25565b84611f97565b6020601f82116001146120405781906120319394955f92612035575b50505f198260011b9260031b1c19161790565b9055565b015190505f8061201e565b601f19821690612053845f5260205f2090565b915f5b81811061208d57509583600195969710612075575b505050811b019055565b01515f1960f88460031b161c191690555f808061206b565b9192602060018192868b015181550194019201612056565b6102ff90610b55612765565b73ffffffffffffffffffffffffffffffffffffffff6120ce612408565b5094509150939150604051937f000000000000000000000000000000000000000000000000000000000000000060208601527f00000000000000000000000000000000000000000000000000000000000000006040860152606085015216608083015260a082015260a081526102ff60c082610956565b821561226f5773ffffffffffffffffffffffffffffffffffffffff3091160361224757335f908152602090205c9082821061221f5781835f1973ffffffffffffffffffffffffffffffffffffffff941061220d575b505016905f80808084865af16121ae61262e565b50156121e5576040519081527f3f1beca043a9fe9118bbaeca0035e81e02d6d7cf184bf32fa9dfbd73fdd027c060203092a3600190565b7fb06a467a000000000000000000000000000000000000000000000000000000005f5260045ffd5b61221891033361325c565b5f8361219a565b7fc45cb513000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f7d1c29f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b505050600190565b91905f9282156123ff5773ffffffffffffffffffffffffffffffffffffffff3091160361224757335f9081527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368605602052604090205482811061221f575f198110612364575b5073ffffffffffffffffffffffffffffffffffffffff16918080808085875af161230461262e565b501561233c57506040519081527fed1cf8378e55f85e35be72eebdbef1b7347825916e51aa538d1855113f8c259d60203092a3600190565b807fb06a467a0000000000000000000000000000000000000000000000000000000060049252fd5b73ffffffffffffffffffffffffffffffffffffffff919350829003925f93806123ca3373ffffffffffffffffffffffffffffffffffffffff165f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860560205260405f2090565b5560405190815233907f85b16643b7d42712d1470a1ed9822d6e8cadad23eb1141cabefa28da0944c5b790602090a2906122dc565b50505050600190565b7f1f000000000000000000000000000000000000000000000000000000000000009060408051906124398183610956565b600782527f43616c69627572000000000000000000000000000000000000000000000000006020830152805161246f8282610956565b600581527f312e302e3000000000000000000000000000000000000000000000000000000060208201527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368606549293909246923092909160a01b7fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001617915161252f602082610956565b5f80825236602083013790565b7f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb71368600547f800000000000000000000000000000000000000000000000000000000000000081161561259f5773ffffffffffffffffffffffffffffffffffffffff1690565b50734337084d9e255ff0702461cf8895ce9e3b5ff10890565b6125c1336135df565b6125ca81613638565b156105f95761055291613489565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9082101561261c5761038f9160051b810190611df0565b6125d8565b908092918237015f815290565b3d15612658573d9061263f826109a1565b9161264d6040519384610956565b82523d5f602084013e565b606090565b805182101561261c5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116036126ce57565b612671565b6126dd8154611a25565b90816126e7575050565b81601f5f93116001146126f8575055565b8183526020832061271491601f0160051c810190600101611f81565b808252602082209081548360011b905f198560031b1c191617905555565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18136030182121561026a570190565b7f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686065460a01b7fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161760405160208101917fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647283527f000000000000000000000000000000000000000000000000000000000000000060408301527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a083015260c082015260c0815261287b60e082610956565b51902090565b5f3560e01c63bc197c81811463f23a6e6182141763150b7a028214176128ae57633c10b94e5f526004601cfd5b6020526020603cf35b6128bf611a0c565b50604051306020820152602081526128d8604082610956565b604051906128e582610919565b60028252602082015290565b5060418114908115612901575090565b604091501490565b919082604091031261026a576020825192015190565b60208183031261026a5780359067ffffffffffffffff821161026a57019060c08282031261026a5761294f610979565b91803567ffffffffffffffff811161026a578261296d9183016109f3565b8352602081013567ffffffffffffffff811161026a5760a0926129919183016109f3565b6020840152604081013560408401526060810135606084015260808101356080840152013560a082015290565b919082604091031261026a576020823592013590565b9081602091031261026a57516102ff81610529565b9290600284516129f88161026e565b612a018161026e565b03612a6a579073ffffffffffffffffffffffffffffffffffffffff92612a2692613b2f565b169081612a335750505f90565b612a4d6020612a66920151602080825183010191016129d4565b73ffffffffffffffffffffffffffffffffffffffff1690565b1490565b8351612a758161026e565b612a7e8161026e565b612abb57612ab690612aae612aa360206102ff97015160208082518301019101612909565b9590948101906129be565b929091613aec565b613b04565b60018451612ac88161026e565b612ad18161026e565b03612b1e57611ec3612b19612b04612af960206102ff98015160208082518301019101612909565b96909581019061291f565b92604051928391602083019190602083019252565b6138de565b505050505f90565b9190823592612b358282613bbd565b9093819363ffffffff60408501351684019063ffffffff82351694602080840193870101910110610e3957604090939210612b6c57565b634be6321b5f526004601cfd5b9091939293612b888486614660565b949093612b9f602088013592604089013598614690565b9091612bde8985604291604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b03612d5457612bec91613c80565b82959299939199158015612d4c575b612d3e57611ec3612cd9612c266102ff9c612c1e612cfc96612d389b36916109bd565b9436916109bd565b604051928391605c612c6360208501977f5479706564446174615369676e280000000000000000000000000000000000008952602e860190613809565b7f20636f6e74656e74732c737472696e67206e616d652c737472696e672076657281527f73696f6e2c75696e7432353620636861696e49642c616464726573732076657260208201527f696679696e67436f6e74726163742c627974657333322073616c74290000000060408201520190613809565b51902092611ec36040519384926020840196875260408401526060830190613809565b51902090604291604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b906129e9565b505050505050505050505f90565b508015612bfb565b50505050505050505f90565b906102ff949392612d3891604090601c60208351612d7e8582610956565b828152017f506572736f6e616c5369676e28627974657320707265666978656429000000008152209180519160208301938452818301528152612cfc606082610956565b612dcb90613e70565b90612dd35750565b64ffffffffff907f48c76fe1000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51907fffffffff000000000000000000000000000000000000000000000000000000008216820361026a57565b9081602091031261026a576102ff90612e06565b6102ff93926060928252602082015281604082015201906102b2565b6040513d5f823e3d90fd5b9290919260048116612e81575b50505050565b612ed39373ffffffffffffffffffffffffffffffffffffffff602094604051968795869485937f9ac4eafd00000000000000000000000000000000000000000000000000000000855260048501612e47565b0392165afa908115612f91577f9ac4eafd00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f91612f62575b501603612f3a575f808080612e7b565b7f1e048e1d000000000000000000000000000000000000000000000000000000005f5260045ffd5b612f84915060203d602011612f8a575b612f7c8183610956565b810190612e33565b5f612f2a565b503d612f72565b612e63565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561026a57016020813591019167ffffffffffffffff821161026a57813603831361026a57565b601f8260209493601f1993818652868601375f8582860101520116010190565b91613155906102ff96949592845260a0602085015261304560a0850161302b83610547565b73ffffffffffffffffffffffffffffffffffffffff169052565b602081013560c08501526131246131186130b961307b6130686040860186612f96565b61012060e08b01526101c08a0191612fe6565b6130886060860186612f96565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608a8403016101008b0152612fe6565b608084013561012088015260a084013561014088015260c08401356101608801526130e760e0850185612f96565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60898403016101808a0152612fe6565b91610100810190612f96565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60868403016101a0870152612fe6565b936040830152606082015260808184039101526102b2565b9190939460028316613182575b505050505050565b6020946131d473ffffffffffffffffffffffffffffffffffffffff92604051988997889687957f9e364dba00000000000000000000000000000000000000000000000000000000875260048701613006565b0392165afa908115612f91577f9e364dba00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f9161323d575b501603612f3a575f808080808061317a565b613256915060203d602011612f8a57612f7c8183610956565b5f61322b565b73ffffffffffffffffffffffffffffffffffffffff165f5260205f205d565b6132b07f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686016318fb58646004525f5260245f2090565b68fbb67fda52d4bfb8bf82146115ec578115613307575b801954156132de576020525f5260405f2054151590565b9060019181815414613302578183820154146133025760020154146102ff57505f90565b505090565b68fbb67fda52d4bfb8bf91506132c7565b8051906003821015610278576020015160208151910120604051906133416020830180946102a5565b60408201526040815261287b606082610956565b905f9161338d7f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686016318fb58646004525f5260245f2090565b9068fbb67fda52d4bfb8bf81146115ec578015613479575b8119918254918160205282156133ed575b805f5260405f20928354156133cc575050505050565b9091929394955060011c8092015560010180915560011b6001179055600190565b91508054801561347057828114612e7b57600182018054908115613462575083811461345b576002830191825492831561344c575084831461317a575f52600160405f20555f52600260405f20555f52600360405f20556007916133b6565b95505050505091925055600190565b5050505050565b945050505091925055600190565b50555060019150565b5068fbb67fda52d4bfb8bf6133a5565b5f5b81518051821015612e7b57816134a09161265d565b51805173ffffffffffffffffffffffffffffffffffffffff16806135d9575030905b6134cb85611984565b60ff60c882901c1615806135ba575b6135925785925f8073ffffffffffffffffffffffffffffffffffffffff613537941694602081019361351760408651930192835190838b8b6147d9565b9451915191602083519301915af1928361352f61262e565b958692614966565b1580613585575b61354b575060010161348b565b613581906040519182917fa5fa8d2b00000000000000000000000000000000000000000000000000000000835260048301610b8d565b0390fd5b506020830151151561353e565b7f3ceb88d9000000000000000000000000000000000000000000000000000000005f5260045ffd5b503073ffffffffffffffffffffffffffffffffffffffff8416146134da565b906134c2565b73ffffffffffffffffffffffffffffffffffffffff16308114613633576102ff9060405190602082015260208152613618604082610956565b6040519061362582610919565b600282526020820152613318565b505f90565b8015613684576136478161327b565b15613633575f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860360205261367f60405f2054613e70565b501590565b50600190565b91909160a08184031261026a576040519060a0820182811067ffffffffffffffff82111761093557604052819381359167ffffffffffffffff831161026a576136d96080939284938301610f72565b8452602081013560208501526040810135604085015260608101356136fd81610529565b60608501520135910152565b7f01000000000000000000000000000000000000000000000000000000000000008114908115613737575090565b7f010100000000000000000000000000000000000000000000000000000000000091501490565b6318fb58646004527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb713686015f5260245f2090811954918260011c9215159080541560026001830154159201541592156137b457505050565b90919293505f906137da57506001906137d557506002906102ff5750600390565b919050565b92915050565b90601582018092116126ce57565b90600282018092116126ce57565b919082018092116126ce57565b805191908290602001825e015f815290565b90610552600161385b936040519485917f226368616c6c656e6765223a22000000000000000000000000000000000000006020840152602d830190613809565b7f22000000000000000000000000000000000000000000000000000000000000008152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183610956565b80516020101561261c5760400190565b6138c89060209392613809565b9081520190565b9081602091031261026a575190565b92919060a081019384517f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a810613ad95760208201907fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e63461394d83516060860151613947816137e0565b91614c42565b6020815191012003613ae25761396561396a9161419b565b61381b565b61397f825160408501516139478451826137fc565b60208151910120906020815191012003613ad9577f0100000000000000000000000000000000000000000000000000000000000000806139e86139c285516138ab565b517fff000000000000000000000000000000000000000000000000000000000000001690565b1603613ad9575f613a026020925160405191828092613809565b039060025afa15612f915760205f613a378151613a2b8551611ec36040519384928884016138bb565b60405191828092613809565b039060025afa15612f915760805f519101935f80865185613a888551611ec38a60405194859360208501978c899192608093969594919660a084019784526020840152604083015260608201520152565b51906101005afa94613a9861262e565b80519680613ad0575b613ab457506102ff955051905191614202565b600196612a6696508101602090810195500192506138cf915050565b50861515613aa1565b50505050505f90565b5050505050505f90565b5f5260206001815f60025afa51903d15613b0257565bfe5b93929190613b15848484848961435c565b90959015613b2557505050505090565b6102ff9550614417565b604080515f95949093918114613b7a57604114613b4b57505050565b604080929395508101355f1a60205281375b5f526020604060805f60015afa505f6060523d6060185191604052565b507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91929450602081013590601b8260ff1c016020523560405216606052613b5d565b909163ffffffff60208301351682019263ffffffff84351692602080860195850101910110610e3957565b905f1982019182116126ce57565b7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255103907fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255182116126ce57565b9082101561261c570190565b80156126ce575f190190565b90929192831161026a579190565b9093929384831161026a57841161026a578101920390565b9080613c93575b50505f905f905f905f90565b7f29000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000613d11613ceb613ce485613be8565b8587613c42565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1603613db7575f5b818110613d2c575b5050505b5f80613c87565b613d3a613ceb828486613c42565b7fff0000000000000000000000000000000000000000000000000000000000000081167f280000000000000000000000000000000000000000000000000000000000000003613da257508015613d9d57613d95908284613c5a565b939093929190565b613d21565b613dab906146bb565b613d9d57600101613d19565b9081805b613dc8575b505050613d25565b613de2613ceb613ddb8396949596613be8565b8686613c42565b7fff0000000000000000000000000000000000000000000000000000000000000081167f290000000000000000000000000000000000000000000000000000000000000003613e4b575080613e3c85613e44938187613c68565b959094613c5a565b9293929091565b613e5890949392946146bb565b613e6b57613e6590613c4e565b80613dbb565b613dc0565b60a01c64ffffffffff16908115613e88574282109190565b5f91508190565b8060401c5f527f3b86514c5c56b21f08d8e56ab090292e07c2483b3e667a2a45849dcb7136860460205260405f208054915f1983146126ce5767ffffffffffffffff9160018401905516036113d557565b909163ffffffff82351682019063ffffffff8235169060208084019383010184860110610e3957613f15604093958395613bbd565b9390939210612b6c57565b60c1610100613f326040519182610956565b8181527f290000000000000000000000000000000000000000000000000000000000000060e060208301927f5369676e65644261746368656443616c6c284261746368656443616c6c20626184527f746368656443616c6c2c75696e74323536206e6f6e63652c627974657333322060408201527f6b6579486173682c61646472657373206578656375746f722c75696e7432353660608201527f20646561646c696e65294261746368656443616c6c2843616c6c5b5d2063616c60808201527f6c732c626f6f6c207265766572744f6e4661696c7572652943616c6c2861646460a08201527f7265737320746f2c75696e743235362076616c75652c6279746573206461746160c08201520152209061287b61404f8251614a51565b611ec36020840151936040810151906080614081606083015173ffffffffffffffffffffffffffffffffffffffff1690565b9101519160405196879560208701998a929360a09473ffffffffffffffffffffffffffffffffffffffff93989796929860c086019986526020860152604085015260608401521660808201520152565b92909192600181166140e35750505050565b6141359373ffffffffffffffffffffffffffffffffffffffff602094604051968795869485937f33dd593c00000000000000000000000000000000000000000000000000000000855260048501612e47565b0392165afa908115612f91577f33dd593c00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f91612f6257501603612f3a575f808080612e7b565b6040516102ff916141ad606083610956565b604082527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208301527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f6040830152614cec565b93919092938315801561431d575b8015614315575b80156142eb575b613ad95761422c8386614d93565b15613ad95760405191602083526020808401526020604084015260608301527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808301527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a083015260208260c08160055f19fa1561026a577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551946142e593866142df945181818909940991614e5f565b91613bf6565b90081590565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255182101561421e565b508115614217565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551841015614210565b9081602091031261026a57516102ff81610f68565b91909361436c6114af83876156fe565b8015614404575b6143f8575f94611ec36143b29287966040519586946020860198899192608093969594919660a084019784526020840152604083015260608201520152565b51906101005afa6143c161262e565b90806143ed575b156143e657806020806143e093518301019101614347565b90600190565b505f905f90565b5060208151146143c8565b50505050505f90600190565b506144126114af8286615775565b614373565b909392919261442684866156fe565b15801561464f575b613ad9577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255161461c612a669561461161462896614469615804565b95614472610988565b5f81525f60208201525f6040820152875261448b610988565b9182526020820152600160408201526144a48660200190565b9081526144af610988565b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29681527f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5602082015260016040820152608087019081526146076145138351615ac2565b604089019081526145f86145e961452a8551615ac2565b6101008c0190815261453f8751855190615aff565b9560608d019687528c61455f6145588a51845190615aff565b9160a00190565b528c6145786145718751845190615aff565b9160c00190565b528c61459161458a8951845190615aff565b9160e00190565b528c6145ab6145a38a51855190615aff565b916101200190565b528c6145c56145bd8751855190615aff565b916101400190565b528c6145df6145d78951855190615aff565b916101600190565b5251905190615aff565b6101808b018181529551615aff565b6101a08a015251835190615aff565b6101c088016145df565b6101e0850152615b1e565b8181880993099061584a565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551900690565b5061465a8184615775565b1561442e565b909163ffffffff82351682019263ffffffff8435169260208086019585010191011061468857565b9150505f5f91565b909163ffffffff60608301351682019263ffffffff8435169260208086019585010191011061468857565b7fff0000000000000000000000000000000000000000000000000000000000000016801590811561477a575b8115614750575b8115614726575b81156146ff575090565b7f290000000000000000000000000000000000000000000000000000000000000091501490565b7f2800000000000000000000000000000000000000000000000000000000000000811491506146f5565b7f2c00000000000000000000000000000000000000000000000000000000000000811491506146ee565b7f2000000000000000000000000000000000000000000000000000000000000000811491506146e7565b91909160408184031261026a576147ba81612e06565b92602082015167ffffffffffffffff811161026a576102ff9201611a76565b6060959490929190600884166147f0575050505050565b5f94965073ffffffffffffffffffffffffffffffffffffffff8094939261486087936040519a8b98899788957fec9b4ee4000000000000000000000000000000000000000000000000000000008752600487015216602485015260448401526080606484015260848301906102b2565b0393165af18015612f91575f925f916148c9575b507fffffffff000000000000000000000000000000000000000000000000000000007fec9b4ee40000000000000000000000000000000000000000000000000000000091931603612f3a575f8080808061345b565b7fffffffff0000000000000000000000000000000000000000000000000000000093507fec9b4ee400000000000000000000000000000000000000000000000000000000915061492a903d805f833e6149228183610956565b8101906147a4565b9390939150614874565b926102ff9492614958928552151560208501526080604085015260808401906102b2565b9160608184039101526102b2565b90929160108216614978575050505050565b5f73ffffffffffffffffffffffffffffffffffffffff6020956149ca604051988997889687947fc82b175900000000000000000000000000000000000000000000000000000000865260048601614934565b0393165af1908115612f91577fc82b175900000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f91614a32575b501603612f3a575f8080808061345b565b614a4b915060203d602011612f8a57612f7c8183610956565b5f614a21565b60806057604051614a63608082610956565b8181527f6e743235362076616c75652c6279746573206461746129000000000000000000606060208301927f4261746368656443616c6c2843616c6c5b5d2063616c6c732c626f6f6c20726584527f766572744f6e4661696c7572652943616c6c286164647265737320746f2c75696040820152015220908251805194601f19614b05614aef88610e7e565b97614afd604051998a610956565b808952610e7e565b013660208801376060935f5b8351811015614bee5780614b276001928661265d565b516029604051614b378a82610956565b8181527f7465732064617461290000000000000000000000000000000000000000000000604060208301927f43616c6c286164647265737320746f2c75696e743235362076616c75652c627984520152209073ffffffffffffffffffffffffffffffffffffffff81511690604060208201519101516020815191012090604051926020840194855260408401528a83015288820152878152614bda60a082610956565b519020614be7828b61265d565b5201614b11565b509493509461287b9250614c1f9150602090604051614c1481611ec3858201809561595b565b519020930151151590565b604080516020810195865290810193909352151560608301528160808101611ec3565b805160609493929083811115614cb3575b81811115614cab575b50828110614c6957505050565b6040519450918290039101601f19601f830181165b8083015181870152018015614c9657601f1990614c7e565b505060408184015f6020820152016040528252565b90505f614c5c565b925082614c53565b90614cc5826109a1565b614cd26040519182610956565b828152601f19614ce282946109a1565b0190602036910137565b90815115614d895790614d19614d14614d0d614d08845161269e565b6137ee565b6003900490565b614cbb565b916020830190828051019060208201928351945f85525b838110614d3f57505050505290565b600360049101916001603f845182828260121c16880101518453828282600c1c16880101518385015382828260061c16880101516002850153168501015160038201530190614d30565b50506102ff611e41565b6ffffffffeffffffffffffffffffffffff60601b198110801590614e41575b8015614e30575b614e2a576ffffffffeffffffffffffffffffffffff60601b197f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b818381807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc81970991818180090908089180091490565b50505f90565b5080158015614db957508115614db9565b506ffffffffeffffffffffffffffffffffff60601b19821015614db2565b90915f925f9160ff958115806156f6575b6156eb57614e7e8386615988565b9490978815806156e3575b615695575b83811c60028460fe1c16015b1561567d57600184821c16600284831c60011b160160018114615632575b60028114615625575b60031461561a575b5f1990969493929196019460019889975b875f1911614f715750505050505050505060405191606083015260208252602080830152602060408301527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808301526ffffffffeffffffffffffffffffffffff60601b1960a083015260208260c08160055f19fa1561026a576ffffffffeffffffffffffffffffffffff60601b199151900990565b6ffffffffeffffffffffffffffffffffff60601b198160029c989a9c9b959697999b09936ffffffffeffffffffffffffffffffffff60601b1985800980956ffffffffeffffffffffffffffffffffff60601b19828409966ffffffffeffffffffffffffffffffffff60601b199109916ffffffffeffffffffffffffffffffffff60601b198a8208908a6ffffffffeffffffffffffffffffffffff60601b19036ffffffffeffffffffffffffffffffffff60601b199108906ffffffffeffffffffffffffffffffffff60601b1991096ffffffffeffffffffffffffffffffffff60601b19906003099c6ffffffffeffffffffffffffffffffffff60601b19908309986ffffffffeffffffffffffffffffffffff60601b1991099b6ffffffffeffffffffffffffffffffffff60601b19867fffffffff00000001000000000000000000000000fffffffffffffffffffffffd096ffffffffeffffffffffffffffffffffff60601b19828009906ffffffffeffffffffffffffffffffffff60601b199108956ffffffffeffffffffffffffffffffffff60601b19036ffffffffeffffffffffffffffffffffff60601b199087086ffffffffeffffffffffffffffffffffff60601b1991096ffffffffeffffffffffffffffffffffff60601b1981938309906ffffffffeffffffffffffffffffffffff60601b19910891878c1c600116878d1c60011b6002160180156155f557600181146155aa575b6002811461559f575b600314615596575b8c15615581578c916ffffffffeffffffffffffffffffffffff60601b198085818d819609089388820392090894811561536c575b6ffffffffeffffffffffffffffffffffff60601b19868009986ffffffffeffffffffffffffffffffffff60601b198a9788099d8e976ffffffffeffffffffffffffffffffffff60601b1991099d6ffffffffeffffffffffffffffffffffff60601b199109986ffffffffeffffffffffffffffffffffff60601b199109916ffffffffeffffffffffffffffffffffff60601b19837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd09866ffffffffeffffffffffffffffffffffff60601b19036ffffffffeffffffffffffffffffffffff60601b19848009906ffffffffeffffffffffffffffffffffff60601b199108906ffffffffeffffffffffffffffffffffff60601b199108956ffffffffeffffffffffffffffffffffff60601b19910991856ffffffffeffffffffffffffffffffffff60601b19036ffffffffeffffffffffffffffffffffff60601b199108906ffffffffeffffffffffffffffffffffff60601b199109906ffffffffeffffffffffffffffffffffff60601b19910892985f19905b0196949392979597614eda565b8c861561537957506151ce565b989150919a94506ffffffffeffffffffffffffffffffffff60601b198b7fffffffff00000001000000000000000000000000fffffffffffffffffffffffd096ffffffffeffffffffffffffffffffffff60601b198180099283916ffffffffeffffffffffffffffffffffff60601b19838309946ffffffffeffffffffffffffffffffffff60601b1991099d8e916ffffffffeffffffffffffffffffffffff60601b198281038208916ffffffffeffffffffffffffffffffffff60601b199108906ffffffffeffffffffffffffffffffffff60601b1991096ffffffffeffffffffffffffffffffffff60601b1990600309926ffffffffeffffffffffffffffffffffff60601b199109986ffffffffeffffffffffffffffffffffff60601b1991099b6ffffffffeffffffffffffffffffffffff60601b19837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd096ffffffffeffffffffffffffffffffffff60601b19838009906ffffffffeffffffffffffffffffffffff60601b1991089b6ffffffffeffffffffffffffffffffffff60601b199109918b6ffffffffeffffffffffffffffffffffff60601b19036ffffffffeffffffffffffffffffffffff60601b1991086ffffffffeffffffffffffffffffffffff60601b199109906ffffffffeffffffffffffffffffffffff60601b199108925f199061535f565b60019c50909a8c98509094505f19915061535f565b5050818361519a565b8b92508a9150615192565b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29692507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f59150615189565b5050505f19906ffffffffeffffffffffffffffffffffff60601b199a949a039361535f565b889750859150614ec9565b9697508796859250614ec1565b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29698507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f59250614eb8565b5f1901600184821c16600284831c60011b1601614e9a565b91927fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551919382039008915f918315806156db575b15614e8e575050505050505050505f90565b5060016156c9565b508515614e89565b505050505050505f90565b508015614e70565b90811515918261574b575b5081615741575b81615719575090565b7f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a89150111590565b8015159150615710565b7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325511191505f615709565b6ffffffffeffffffffffffffffffffffff60601b1980807f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b8185817fffffffff00000001000000000000000000000000fffffffffffffffffffffffc81838009080908818580091493109110161690565b604051906157f38261093a565b5f6040838281528260208201520152565b604051906102006158158184610956565b825f5b82811061582457505050565b60209061582f6157e6565b8184015201615818565b90601081101561261c5760051b0190565b5f9392849283929183915b6080831061586b575050505061038f9293615db4565b85615939575b600c61587d8260fc1c90565b16600361588a8460fe1c90565b161760406158988287615839565b5101516158c0575b506158b76158b060019260021b90565b9260021b90565b92019190615855565b959194909782155f1461590f575050506158da8483615839565b51519260016158b76158b0604061590060206158f68b8a615839565b5101519988615839565b5101519796995b9250506158a0565b6158b0959260019261592e926159286158b79a89615839565b51615c0b565b979196909699615907565b969461594a91946159509396615b84565b91615b84565b949193909396615871565b80516020909101905f5b8181106159725750505090565b8251845260209384019390920191600101615965565b91907f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5918015615abc578461038f9495831480615ab3575b15615a9e5750506ffffffffeffffffffffffffffffffffff60601b1982600209916ffffffffeffffffffffffffffffffffff60601b198084800993818080808881818a09950996817fffffffff00000001000000000000000000000000fffffffffffffffffffffffe816001840892080960030981808080867fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0981858009089681600181818c099b099809810393868203900890090890615ed1565b909192615aaa93615e33565b92909190615ed1565b508184146159e1565b50925090565b615ae290615ace6157e6565b508051906040602082015191015191615b84565b9060405192615af08461093a565b83526020830152604082015290565b615ae291615b0b6157e6565b5080516040602083015192015192615c0b565b7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325517fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f615b6992615f67565b9015615b725790565b634e487b715f5260126020526024601cfd5b9290916ffffffffeffffffffffffffffffffffff60601b1980918180868009968180808a818080808a800980097fffffffff00000001000000000000000000000000fffffffffffffffffffffffc09818088800960030908940960040991818080808087600209810381868009089c80096008098103938b82039008900908940960020990565b91939092935f945f945f946040810151906ffffffffeffffffffffffffffffffffff60601b198280096ffffffffeffffffffffffffffffffffff60601b19858009926ffffffffeffffffffffffffffffffffff60601b1980878609602085015109916ffffffffeffffffffffffffffffffffff60601b19808681868103818d8189890990090896510991818381039189090890811585151694855f14615d4f575050505050600114615cbd5750505050565b6ffffffffeffffffffffffffffffffffff60601b198080809a508699508097985080969381808087819998099d838f94097fffffffff00000001000000000000000000000000fffffffffffffffffffffffc09818088800960030908940960040991818080808087600209810381868009089c80096008098103938b820390089009089409600209905f808080612e7b565b929b50935096506ffffffffeffffffffffffffffffffffff60601b1980808080809c9d50809a995080985080969f508b8009809709958a098180876002098103818381038188800908089d098103938c8203900890090895099009905f808080612e7b565b92918015615e29576ffffffffeffffffffffffffffffffffff60601b197fffffffff00000001000000000000000000000000fffffffffffffffffffffffd615dfb92615f67565b919015615b72576ffffffffeffffffffffffffffffffffff60601b1991829081808280098097099509900990565b505090505f905f90565b9392908015615ec4576ffffffffeffffffffffffffffffffffff60601b19806001969481808080809a9881809981039d8e920908938160018b820392090881818009998a9182099809918180898180877fffffffff00000001000000000000000000000000fffffffffffffffffffffffd09818381038188800908089c09938b820390080908946001099260010990565b5092509190600190600190565b9092919260405192602084526020808501526020604085015260608401527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808401526ffffffffeffffffffffffffffffffffff60601b1960a084015260208360c08160055f19fa1561026a576ffffffffeffffffffffffffffffffffff60601b198093918180935180920995098009900991565b91908115615fa2576020925f9260c0926040519286845286808501528660408501526060840152608083015260a082015260055afa905f5190565b5050505f905f9056fea164736f6c634300081d000a'; } } diff --git a/src/briefcase/deployers/mixed-quoter/MixedRouteQuoterV2Deployer.sol b/src/briefcase/deployers/mixed-quoter/MixedRouteQuoterV2Deployer.sol index 491a722d..e92b7644 100644 --- a/src/briefcase/deployers/mixed-quoter/MixedRouteQuoterV2Deployer.sol +++ b/src/briefcase/deployers/mixed-quoter/MixedRouteQuoterV2Deployer.sol @@ -25,6 +25,7 @@ library MixedRouteQuoterV2Deployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'60e0346100c757601f6119fe38819003918201601f19168301916001600160401b038311848410176100cb578084926060946040528339810103126100c7578051906001600160a01b03821682036100c7576100696040610062602084016100df565b92016100df565b9160805260a05260c05260405161190a90816100f482396080518181816101c8015281816103080152818161051a015281816107730152610b8e015260a05181818161010001526102a6015260c05181818161062401526111250152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100c75756fe60806040526004361015610011575f80fd5b5f3560e01c8063064a11341461088457806319fa62af146106535780636210c6201461060f57806385894af5146103ce5780638a4992861461038157806391dd7346146102d55780639a45181d14610291578063add1ce0e14610229578063d737d0c7146101f7578063dc4c90d3146101b35763fa461e3314610092575f80fd5b34610196576060366003190112610196576004356024356044356001600160401b038111610196576100c8903690600401610da6565b905f8413918215806101a9575b61019a576100e29161160b565b939192906001600160a01b0390610124906100fe9087876117b5565b7f0000000000000000000000000000000000000000000000000000000000000000611818565b1633036101965715610174576101399061100e565b92916001600160a01b039081169116105b156101625750633b2f660160e21b5f5260045260245ffd5b633b2f660160e21b5f5260045260245ffd5b926101819092919261100e565b92916001600160a01b0390811691161061014a565b5f80fd5b63c3c5e9e760e01b5f5260045ffd5b505f8413156100d5565b34610196575f366003190112610196576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610196575f366003190112610196576040516001600160a01b035f805160206118de8339815191525c168152602090f35b346101965760803660031901126101965760405161024681610df7565b61024e610e7d565b8152610258610e93565b6020820152604435604082015260643562ffffff8116810361019657816102859160606040940152611362565b82519182526020820152f35b34610196575f366003190112610196576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610196576020366003190112610196576004356001600160401b03811161019657610305903690600401610da6565b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610372575f8281928160405192839283378101838152039082305af1610356611061565b9061036357602081519101fd5b63703a952d60e11b5f5260045ffd5b63570c108560e11b5f5260045ffd5b346101965760603660031901126101965760206103c66040516103a381610e41565b6103ab610e7d565b81526103b5610e93565b83820152604435604082015261109d565b604051908152f35b34610196576020366003190112610196576004356001600160401b0381116101965761010060031982360301126101965760405161040b81610df7565b6104183683600401610ebd565b815260a48201359081151582036101965760208101918252604081019260c4810135845260e4810135906001600160401b03821161019657019236602385011215610196575f6104c16104f361047b610515973690602460048201359101610f57565b9460608101958652335f805160206118de8339815191525d6104e5849685965a996040519687956319fa62af60e01b60208801526020602488015260448701905161101e565b51151560e48501525161010484015251610100610124840152610144830190610dd3565b03601f198101835282610e5c565b604051809681926348c8949160e01b8352602060048401526024830190610dd3565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180610596575b6040945061058e57505061057061056a610562611061565b925a90611090565b9161162e565b905b5f5f805160206118de8339815191525d82519182526020820152f35b909150610572565b3d805f873e6105a58187610e5c565b850194602081870312610196578051906001600160401b03821161019657019480601f870112156101965785516105db81610f3c565b916105e96040519384610e5c565b81835260208289010111610196576020815f928260409a018386015e830101525061054a565b34610196575f366003190112610196576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610196576020366003190112610196576004356001600160401b0381116101965780600401906101006003198236030112610196573033036108755760a481019161069e83611001565b916106c860206106be60e46106b660c486013561100e565b940185610fcf565b9290943690610ebd565b938515610857576101446401000276a4965b604051906106e782610e41565b1515948582528085830194888652604084019a60018060a01b03168b526040519a8b968795633cf3645360e21b87526107248d600489019061101e565b51151560a48701525160c4860152516001600160a01b031660e48501526101206101048501526101248401829052848401375f838284010152601f801991011681010301815f60018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af193841561084c575f94610818575b505f82120361080f578260801d5b600f0b036107f957506107d46fffffffffffffffffffffffffffffffff92611001565b156107ef5781165b633b2f660160e21b5f521660045260245ffd5b60801d81166107dc565b60a09020631e97b5cd60e21b5f5260045260245ffd5b82600f0b6107b1565b9093506020813d602011610844575b8161083460209383610e5c565b81010312610196575192856107a3565b3d9150610827565b6040513d5f823e3d90fd5b61014473fffd8963efd1fc6a506488495d951d5263988d25966106da565b6314e1dbf760e11b5f5260045ffd5b34610196576060366003190112610196576004356001600160401b038111610196576108b4903690600401610da6565b90602435916001600160401b03831161019657602083600401936003199036030112610196578290604435918193806108fa5f946108f28580610f8d565b9490506114ca565b925f935b838510610915576040878782519182526020820152f35b909192939586610d87575b60ff8216600281036109a6575060159060ff61093b83611522565b1689106109975760019161098b9161096160ff6109588d8a61168e565b93168c896116da565b6040519261096e84610e41565b60a086901b8690039081168452166020830152604082015261109d565b965b01939291906108fe565b633b99b53d60e01b5f5260045ffd5b60048103610cfd57506109b98380610f8d565b881015610ce9578760051b810135601e1982360301811215610196576109e0910180610fcf565b9160179160ff6109fa6109f56109f586611534565b611522565b168b1061099757610a0b8b8861168e565b93838c10610c9957601488013560e81c9360ff811660038101808211610cd5578e10610c9957890135610a648e60ff610a5c6109f5610a568f8585610a4f8b611534565b16916116da565b96611534565b16908c6116da565b955f6080604051610a7481610e26565b82815260208101839052604081018390526060810183905201526001600160a01b0387811690891610978815610c7c57945f946104c194610b6794628fffff610b2195610b899a5b60206040519e8f92610acd84610e26565b60018060a01b0316835260018060a01b03169101521660408c015260e81d60608b015260018060a01b031660808a015260405198610b0a8a610df7565b895260208901998a52604089019788523691610f57565b9560608101968752335f805160206118de8339815191525d6104e5849785975a9a6040519687956319fa62af60e01b60208801526020602488015260448701905161101e565b604051809381926348c8949160e01b8352602060048401526024830190610dd3565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081610c06575b50610bf8575050610bf1600191610bda61056a610562611061565b975b5f5f805160206118de8339815191525d610fc2565b959661098d565b60019250610bf19197610bdc565b3d805f833e610c158183610e5c565b810190602081830312610196578051906001600160401b038211610196570181601f8201121561019657805190610c4b82610f3c565b92610c596040519485610e5c565b8284526020838301011161019657815f9260208093018386015e83010152610bbf565b96945f946104c194610b6794628fffff610b2195610b899a610abc565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b60038103610d565750610bf1610d4f60019262ffffff610d1d8c8961160b565b604051949192610d2c86610df7565b60a089901b89900390811686521660208501526040840152166060820152611362565b9097610fc2565b9096959080610d755750614e208101809111610cd5576001909561098d565b63f8904ccd60e01b5f5260045260245ffd5b96610d92929361155e565b95909190610da087846114ca565b90610920565b9181601f84011215610196578235916001600160401b038311610196576020838186019501011161019657565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b608081019081106001600160401b03821117610e1257604052565b634e487b7160e01b5f52604160045260245ffd5b60a081019081106001600160401b03821117610e1257604052565b606081019081106001600160401b03821117610e1257604052565b90601f801991011681019081106001600160401b03821117610e1257604052565b600435906001600160a01b038216820361019657565b602435906001600160a01b038216820361019657565b35906001600160a01b038216820361019657565b91908260a091031261019657604051610ed581610e26565b8092610ee081610ea9565b8252610eee60208201610ea9565b6020830152604081013562ffffff811681036101965760408301526060810135908160020b820361019657606083019190915260800135906001600160a01b03821682036101965760800152565b6001600160401b038111610e1257601f01601f191660200190565b929192610f6382610f3c565b91610f716040519384610e5c565b829481845281830111610196578281602093845f960137010152565b903590601e198136030182121561019657018035906001600160401b03821161019657602001918160051b3603831361019657565b91908201809211610cd557565b903590601e198136030182121561019657018035906001600160401b0382116101965760200191813603831361019657565b3580151581036101965790565b600160ff1b8114610cd5575f0390565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b3d1561108b573d9061107282610f3c565b916110806040519384610e5c565b82523d5f602084013e565b606090565b91908203918211610cd557565b805160208201516001600160a01b03908116916004911660606110cb6110c385846116f4565b5094836116f4565b60405191831b6bffffffffffffffffffffffff199081166020840190815291841b1660348301526028825290611102604882610e5c565b51902060405190602082019060ff60f81b82526bffffffffffffffffffffffff197f0000000000000000000000000000000000000000000000000000000000000000851b16602184015260358301527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f605583015260558252611186607583610e5c565b90519020604051630240bc6b60e21b815293849182906001600160a01b03165afa91821561084c575f905f93611303575b506001600160701b03928316939216916001600160a01b0316036112fa5760409091925b015180156112a95781158015806112a0575b15611251576103e58202918083046103e503610cd557846103e5910202938285041482151715610cd5576103e883029283046103e8141715610cd55761123291610fc2565b90811561123d570490565b634e487b7160e01b5f52601260045260245ffd5b60405162461bcd60e51b815260206004820152602160248201527f56324c6962726172793a20494e53554646494349454e545f4c495155494449546044820152605960f81b6064820152608490fd5b508315156111ed565b60405162461bcd60e51b8152602060048201526024808201527f56324c6962726172793a20494e53554646494349454e545f494e5055545f414d60448201526313d5539560e21b6064820152608490fd5b916040906111db565b9250506060823d60601161135a575b8161131f60609383610e5c565b81010312610196576113308261167a565b604061133e6020850161167a565b93015163ffffffff811603610196576001600160701b036111b7565b3d9150611312565b5f8060018060a01b03835116602084019360018060a01b0385511690818310916113a26100fe606084019560018060a01b039362ffffff885116916117b5565b165a60408301519097600160ff1b821015610196576040945f9181156114af576401000276a4955b519751905187516060998a1b6bffffffffffffffffffffffff19908116602083015260e89390931b6001600160e81b0319166034820152981b166037880152602b8752611418604b88610e5c565b61145c865197889687958694630251596160e31b86523060048701526024860152604485015260018060a01b0316606484015260a0608484015260a4830190610dd3565b03925af19081611484575b5061147f57505061147c61056a610562611061565b91565b915091565b604090813d83116114a8575b61149a8183610e5c565b81010312610196575f611467565b503d611490565b73fffd8963efd1fc6a506488495d951d5263988d25956113ca565b9060148110610997576015116114e7576014013560fc1c60071690565b60405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606490fd5b60ff60149116019060ff8211610cd557565b60ff60039116019060ff8211610cd557565b90939293848311610196578411610196578101920390565b9160ff16600281148015611603575b156115855750611581916015908290611546565b9091565b6003810361159c5750611581916017908290611546565b6004036115be57611581918160ff6115b76109f56017611534565b1691611546565b60405162461bcd60e51b815260206004820152601860248201527f696e76616c69645f50524f544f434f4c5f56455253494f4e00000000000000006044820152606490fd5b50801561156d565b9190602b11610997576017823592013560601c620fffff8360601c9360481c1691565b60208101516001600160e01b0319166304d099ff60e21b01611651576024015190565b6040516306190b2b60e41b815260206004820152908190611676906024830190610dd3565b0390fd5b51906001600160701b038216820361019657565b9060141161169d573560601c90565b60405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606490fd5b906014830190818411610cd5571061169d57013560601c90565b9091906001600160a01b0380841690821680821461177057101561176b57915b906001600160a01b0383161561172657565b60405162461bcd60e51b815260206004820152601760248201527f56324c6962726172793a205a45524f5f414444524553530000000000000000006044820152606490fd5b611714565b60405162461bcd60e51b815260206004820152601e60248201527f56324c6962726172793a204944454e544943414c5f41444452455353455300006044820152606490fd5b9162ffffff915f604080516117c981610e41565b8281526020810183905201526001600160a01b0381811690851611611812575b604051936117f685610e41565b6001600160a01b03908116855216602084015216604082015290565b926117e9565b8151602083015191926001600160a01b0391821692909116908183101561019657604062ffffff9101511660405191602083019384526040830152606082015260608152611867608082610e5c565b5190209060405191602083019160ff60f81b83526bffffffffffffffffffffffff199060601b16602184015260358301527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b546055830152605582526118cd607583610e5c565b905190206001600160a01b03169056fe0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87aa164736f6c634300081a000a'; + return + hex'60e0346100c757601f6119fe38819003918201601f19168301916001600160401b038311848410176100cb578084926060946040528339810103126100c7578051906001600160a01b03821682036100c7576100696040610062602084016100df565b92016100df565b9160805260a05260c05260405161190a90816100f482396080518181816101c8015281816103080152818161051a015281816107730152610b8e015260a05181818161010001526102a6015260c05181818161062401526111250152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100c75756fe60806040526004361015610011575f80fd5b5f3560e01c8063064a11341461088457806319fa62af146106535780636210c6201461060f57806385894af5146103ce5780638a4992861461038157806391dd7346146102d55780639a45181d14610291578063add1ce0e14610229578063d737d0c7146101f7578063dc4c90d3146101b35763fa461e3314610092575f80fd5b34610196576060366003190112610196576004356024356044356001600160401b038111610196576100c8903690600401610da6565b905f8413918215806101a9575b61019a576100e29161160b565b939192906001600160a01b0390610124906100fe9087876117b5565b7f0000000000000000000000000000000000000000000000000000000000000000611818565b1633036101965715610174576101399061100e565b92916001600160a01b039081169116105b156101625750633b2f660160e21b5f5260045260245ffd5b633b2f660160e21b5f5260045260245ffd5b926101819092919261100e565b92916001600160a01b0390811691161061014a565b5f80fd5b63c3c5e9e760e01b5f5260045ffd5b505f8413156100d5565b34610196575f366003190112610196576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610196575f366003190112610196576040516001600160a01b035f805160206118de8339815191525c168152602090f35b346101965760803660031901126101965760405161024681610df7565b61024e610e7d565b8152610258610e93565b6020820152604435604082015260643562ffffff8116810361019657816102859160606040940152611362565b82519182526020820152f35b34610196575f366003190112610196576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610196576020366003190112610196576004356001600160401b03811161019657610305903690600401610da6565b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610372575f8281928160405192839283378101838152039082305af1610356611061565b9061036357602081519101fd5b63703a952d60e11b5f5260045ffd5b63570c108560e11b5f5260045ffd5b346101965760603660031901126101965760206103c66040516103a381610e41565b6103ab610e7d565b81526103b5610e93565b83820152604435604082015261109d565b604051908152f35b34610196576020366003190112610196576004356001600160401b0381116101965761010060031982360301126101965760405161040b81610df7565b6104183683600401610ebd565b815260a48201359081151582036101965760208101918252604081019260c4810135845260e4810135906001600160401b03821161019657019236602385011215610196575f6104c16104f361047b610515973690602460048201359101610f57565b9460608101958652335f805160206118de8339815191525d6104e5849685965a996040519687956319fa62af60e01b60208801526020602488015260448701905161101e565b51151560e48501525161010484015251610100610124840152610144830190610dd3565b03601f198101835282610e5c565b604051809681926348c8949160e01b8352602060048401526024830190610dd3565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180610596575b6040945061058e57505061057061056a610562611061565b925a90611090565b9161162e565b905b5f5f805160206118de8339815191525d82519182526020820152f35b909150610572565b3d805f873e6105a58187610e5c565b850194602081870312610196578051906001600160401b03821161019657019480601f870112156101965785516105db81610f3c565b916105e96040519384610e5c565b81835260208289010111610196576020815f928260409a018386015e830101525061054a565b34610196575f366003190112610196576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610196576020366003190112610196576004356001600160401b0381116101965780600401906101006003198236030112610196573033036108755760a481019161069e83611001565b916106c860206106be60e46106b660c486013561100e565b940185610fcf565b9290943690610ebd565b938515610857576101446401000276a4965b604051906106e782610e41565b1515948582528085830194888652604084019a60018060a01b03168b526040519a8b968795633cf3645360e21b87526107248d600489019061101e565b51151560a48701525160c4860152516001600160a01b031660e48501526101206101048501526101248401829052848401375f838284010152601f801991011681010301815f60018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af193841561084c575f94610818575b505f82120361080f578260801d5b600f0b036107f957506107d46fffffffffffffffffffffffffffffffff92611001565b156107ef5781165b633b2f660160e21b5f521660045260245ffd5b60801d81166107dc565b60a09020631e97b5cd60e21b5f5260045260245ffd5b82600f0b6107b1565b9093506020813d602011610844575b8161083460209383610e5c565b81010312610196575192856107a3565b3d9150610827565b6040513d5f823e3d90fd5b61014473fffd8963efd1fc6a506488495d951d5263988d25966106da565b6314e1dbf760e11b5f5260045ffd5b34610196576060366003190112610196576004356001600160401b038111610196576108b4903690600401610da6565b90602435916001600160401b03831161019657602083600401936003199036030112610196578290604435918193806108fa5f946108f28580610f8d565b9490506114ca565b925f935b838510610915576040878782519182526020820152f35b909192939586610d87575b60ff8216600281036109a6575060159060ff61093b83611522565b1689106109975760019161098b9161096160ff6109588d8a61168e565b93168c896116da565b6040519261096e84610e41565b60a086901b8690039081168452166020830152604082015261109d565b965b01939291906108fe565b633b99b53d60e01b5f5260045ffd5b60048103610cfd57506109b98380610f8d565b881015610ce9578760051b810135601e1982360301811215610196576109e0910180610fcf565b9160179160ff6109fa6109f56109f586611534565b611522565b168b1061099757610a0b8b8861168e565b93838c10610c9957601488013560e81c9360ff811660038101808211610cd5578e10610c9957890135610a648e60ff610a5c6109f5610a568f8585610a4f8b611534565b16916116da565b96611534565b16908c6116da565b955f6080604051610a7481610e26565b82815260208101839052604081018390526060810183905201526001600160a01b0387811690891610978815610c7c57945f946104c194610b6794628fffff610b2195610b899a5b60206040519e8f92610acd84610e26565b60018060a01b0316835260018060a01b03169101521660408c015260e81d60608b015260018060a01b031660808a015260405198610b0a8a610df7565b895260208901998a52604089019788523691610f57565b9560608101968752335f805160206118de8339815191525d6104e5849785975a9a6040519687956319fa62af60e01b60208801526020602488015260448701905161101e565b604051809381926348c8949160e01b8352602060048401526024830190610dd3565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081610c06575b50610bf8575050610bf1600191610bda61056a610562611061565b975b5f5f805160206118de8339815191525d610fc2565b959661098d565b60019250610bf19197610bdc565b3d805f833e610c158183610e5c565b810190602081830312610196578051906001600160401b038211610196570181601f8201121561019657805190610c4b82610f3c565b92610c596040519485610e5c565b8284526020838301011161019657815f9260208093018386015e83010152610bbf565b96945f946104c194610b6794628fffff610b2195610b899a610abc565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b60038103610d565750610bf1610d4f60019262ffffff610d1d8c8961160b565b604051949192610d2c86610df7565b60a089901b89900390811686521660208501526040840152166060820152611362565b9097610fc2565b9096959080610d755750614e208101809111610cd5576001909561098d565b63f8904ccd60e01b5f5260045260245ffd5b96610d92929361155e565b95909190610da087846114ca565b90610920565b9181601f84011215610196578235916001600160401b038311610196576020838186019501011161019657565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b608081019081106001600160401b03821117610e1257604052565b634e487b7160e01b5f52604160045260245ffd5b60a081019081106001600160401b03821117610e1257604052565b606081019081106001600160401b03821117610e1257604052565b90601f801991011681019081106001600160401b03821117610e1257604052565b600435906001600160a01b038216820361019657565b602435906001600160a01b038216820361019657565b35906001600160a01b038216820361019657565b91908260a091031261019657604051610ed581610e26565b8092610ee081610ea9565b8252610eee60208201610ea9565b6020830152604081013562ffffff811681036101965760408301526060810135908160020b820361019657606083019190915260800135906001600160a01b03821682036101965760800152565b6001600160401b038111610e1257601f01601f191660200190565b929192610f6382610f3c565b91610f716040519384610e5c565b829481845281830111610196578281602093845f960137010152565b903590601e198136030182121561019657018035906001600160401b03821161019657602001918160051b3603831361019657565b91908201809211610cd557565b903590601e198136030182121561019657018035906001600160401b0382116101965760200191813603831361019657565b3580151581036101965790565b600160ff1b8114610cd5575f0390565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b3d1561108b573d9061107282610f3c565b916110806040519384610e5c565b82523d5f602084013e565b606090565b91908203918211610cd557565b805160208201516001600160a01b03908116916004911660606110cb6110c385846116f4565b5094836116f4565b60405191831b6bffffffffffffffffffffffff199081166020840190815291841b1660348301526028825290611102604882610e5c565b51902060405190602082019060ff60f81b82526bffffffffffffffffffffffff197f0000000000000000000000000000000000000000000000000000000000000000851b16602184015260358301527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f605583015260558252611186607583610e5c565b90519020604051630240bc6b60e21b815293849182906001600160a01b03165afa91821561084c575f905f93611303575b506001600160701b03928316939216916001600160a01b0316036112fa5760409091925b015180156112a95781158015806112a0575b15611251576103e58202918083046103e503610cd557846103e5910202938285041482151715610cd5576103e883029283046103e8141715610cd55761123291610fc2565b90811561123d570490565b634e487b7160e01b5f52601260045260245ffd5b60405162461bcd60e51b815260206004820152602160248201527f56324c6962726172793a20494e53554646494349454e545f4c495155494449546044820152605960f81b6064820152608490fd5b508315156111ed565b60405162461bcd60e51b8152602060048201526024808201527f56324c6962726172793a20494e53554646494349454e545f494e5055545f414d60448201526313d5539560e21b6064820152608490fd5b916040906111db565b9250506060823d60601161135a575b8161131f60609383610e5c565b81010312610196576113308261167a565b604061133e6020850161167a565b93015163ffffffff811603610196576001600160701b036111b7565b3d9150611312565b5f8060018060a01b03835116602084019360018060a01b0385511690818310916113a26100fe606084019560018060a01b039362ffffff885116916117b5565b165a60408301519097600160ff1b821015610196576040945f9181156114af576401000276a4955b519751905187516060998a1b6bffffffffffffffffffffffff19908116602083015260e89390931b6001600160e81b0319166034820152981b166037880152602b8752611418604b88610e5c565b61145c865197889687958694630251596160e31b86523060048701526024860152604485015260018060a01b0316606484015260a0608484015260a4830190610dd3565b03925af19081611484575b5061147f57505061147c61056a610562611061565b91565b915091565b604090813d83116114a8575b61149a8183610e5c565b81010312610196575f611467565b503d611490565b73fffd8963efd1fc6a506488495d951d5263988d25956113ca565b9060148110610997576015116114e7576014013560fc1c60071690565b60405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606490fd5b60ff60149116019060ff8211610cd557565b60ff60039116019060ff8211610cd557565b90939293848311610196578411610196578101920390565b9160ff16600281148015611603575b156115855750611581916015908290611546565b9091565b6003810361159c5750611581916017908290611546565b6004036115be57611581918160ff6115b76109f56017611534565b1691611546565b60405162461bcd60e51b815260206004820152601860248201527f696e76616c69645f50524f544f434f4c5f56455253494f4e00000000000000006044820152606490fd5b50801561156d565b9190602b11610997576017823592013560601c620fffff8360601c9360481c1691565b60208101516001600160e01b0319166304d099ff60e21b01611651576024015190565b6040516306190b2b60e41b815260206004820152908190611676906024830190610dd3565b0390fd5b51906001600160701b038216820361019657565b9060141161169d573560601c90565b60405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606490fd5b906014830190818411610cd5571061169d57013560601c90565b9091906001600160a01b0380841690821680821461177057101561176b57915b906001600160a01b0383161561172657565b60405162461bcd60e51b815260206004820152601760248201527f56324c6962726172793a205a45524f5f414444524553530000000000000000006044820152606490fd5b611714565b60405162461bcd60e51b815260206004820152601e60248201527f56324c6962726172793a204944454e544943414c5f41444452455353455300006044820152606490fd5b9162ffffff915f604080516117c981610e41565b8281526020810183905201526001600160a01b0381811690851611611812575b604051936117f685610e41565b6001600160a01b03908116855216602084015216604082015290565b926117e9565b8151602083015191926001600160a01b0391821692909116908183101561019657604062ffffff9101511660405191602083019384526040830152606082015260608152611867608082610e5c565b5190209060405191602083019160ff60f81b83526bffffffffffffffffffffffff199060601b16602184015260358301527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b546055830152605582526118cd607583610e5c565b905190206001600160a01b03169056fe0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87aa164736f6c634300081a000a'; } } diff --git a/src/briefcase/deployers/permit2/Permit2Deployer.sol b/src/briefcase/deployers/permit2/Permit2Deployer.sol index 5d85c711..a93168a7 100644 --- a/src/briefcase/deployers/permit2/Permit2Deployer.sol +++ b/src/briefcase/deployers/permit2/Permit2Deployer.sol @@ -21,6 +21,7 @@ library Permit2Deployer { * - evm_version: london */ function initcode() internal pure returns (bytes memory) { - return hex'60c0346100bb574660a052602081017f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a60408301524660608301523060808301526080825260a082019180831060018060401b038411176100a557826040525190206080526123c090816100c1823960805181611b47015260a05181611b210152f35b634e487b7160e01b600052604160045260246000fd5b600080fdfe6040608081526004908136101561001557600080fd5b600090813560e01c80630d58b1db1461126c578063137c29fe146110755780632a2d80d114610db75780632b67b57014610bde57806330f28b7a14610ade5780633644e51514610a9d57806336c7851614610a285780633ff9dcb1146109a85780634fe02b441461093f57806365d9723c146107ac57806387517c451461067a578063927da105146105c3578063cc53287f146104a3578063edd9444b1461033a5763fe8ec1a7146100c657600080fd5b346103365760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff833581811161033257610114903690860161164b565b60243582811161032e5761012b903690870161161a565b6101336114e6565b9160843585811161032a5761014b9036908a016115c1565b98909560a43590811161032657610164913691016115c1565b969095815190610173826113ff565b606b82527f5065726d697442617463685769746e6573735472616e7366657246726f6d285460208301527f6f6b656e5065726d697373696f6e735b5d207065726d69747465642c61646472838301527f657373207370656e6465722c75696e74323536206e6f6e63652c75696e74323560608301527f3620646561646c696e652c000000000000000000000000000000000000000000608083015282519a8b9181610222602085018096611f93565b918237018a8152039961025b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b8c8101835282611437565b5190209085515161026b81611ebb565b908a5b8181106102f95750506102f6999a6102ed9183516102a081610294602082018095611f66565b03848101835282611437565b519020602089810151858b015195519182019687526040820192909252336060820152608081019190915260a081019390935260643560c08401528260e081015b03908101835282611437565b51902093611cf7565b80f35b8061031161030b610321938c5161175e565b51612054565b61031b828661175e565b52611f0a565b61026e565b8880fd5b8780fd5b8480fd5b8380fd5b5080fd5b5091346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff9080358281116103325761038b903690830161164b565b60243583811161032e576103a2903690840161161a565b9390926103ad6114e6565b9160643590811161049f576103c4913691016115c1565b949093835151976103d489611ebb565b98885b81811061047d5750506102f697988151610425816103f9602082018095611f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611437565b5190206020860151828701519083519260208401947ffcf35f5ac6a2c28868dc44c302166470266239195f02b0ee408334829333b7668652840152336060840152608083015260a082015260a081526102ed8161141b565b808b61031b8261049461030b61049a968d5161175e565b9261175e565b6103d7565b8680fd5b5082346105bf57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103325780359067ffffffffffffffff821161032e576104f49136910161161a565b929091845b848110610504578580f35b8061051a610515600193888861196c565b61197c565b61052f84610529848a8a61196c565b0161197c565b3389528385528589209173ffffffffffffffffffffffffffffffffffffffff80911692838b528652868a20911690818a5285528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558551918252848201527f89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4853392a2016104f9565b8280fd5b50346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610676816105ff6114a0565b936106086114c3565b6106106114e6565b73ffffffffffffffffffffffffffffffffffffffff968716835260016020908152848420928816845291825283832090871683528152919020549251938316845260a083901c65ffffffffffff169084015260d09190911c604083015281906060820190565b0390f35b50346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336576106b26114a0565b906106bb6114c3565b916106c46114e6565b65ffffffffffff926064358481169081810361032a5779ffffffffffff0000000000000000000000000000000000000000947fda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b94338a5260016020527fffffffffffff0000000000000000000000000000000000000000000000000000858b209873ffffffffffffffffffffffffffffffffffffffff809416998a8d5260205283878d209b169a8b8d52602052868c209486156000146107a457504216925b8454921697889360a01b16911617179055815193845260208401523392a480f35b905092610783565b5082346105bf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576107e56114a0565b906107ee6114c3565b9265ffffffffffff604435818116939084810361032a57338852602091600183528489209673ffffffffffffffffffffffffffffffffffffffff80911697888b528452858a20981697888a5283528489205460d01c93848711156109175761ffff9085840316116108f05750907f55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f393929133895260018252838920878a528252838920888a5282528389209079ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff000000000000000000000000000000000000000000000000000083549260d01b16911617905582519485528401523392a480f35b84517f24d35a26000000000000000000000000000000000000000000000000000000008152fd5b5084517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b503461033657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336578060209273ffffffffffffffffffffffffffffffffffffffff61098f6114a0565b1681528084528181206024358252845220549051908152f35b5082346105bf57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf577f3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d90359160243533855284602052818520848652602052818520818154179055815193845260208401523392a280f35b8234610a9a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a9a57610a606114a0565b610a686114c3565b610a706114e6565b6064359173ffffffffffffffffffffffffffffffffffffffff8316830361032e576102f6936117a1565b80fd5b503461033657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657602090610ad7611b1e565b9051908152f35b508290346105bf576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf57610b1a3661152a565b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261033257610b4c611478565b9160e43567ffffffffffffffff8111610bda576102f694610b6f913691016115c1565b939092610b7c8351612054565b6020840151828501519083519260208401947f939c21a48a8dbe3a9a2404a1d46691e4d39f6583d6ec6b35714604c986d801068652840152336060840152608083015260a082015260a08152610bd18161141b565b51902091611c25565b8580fd5b509134610336576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610c186114a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360160c08112610332576080855191610c51836113e3565b1261033257845190610c6282611398565b73ffffffffffffffffffffffffffffffffffffffff91602435838116810361049f578152604435838116810361049f57602082015265ffffffffffff606435818116810361032a5788830152608435908116810361049f576060820152815260a435938285168503610bda576020820194855260c4359087830182815260e43567ffffffffffffffff811161032657610cfe90369084016115c1565b929093804211610d88575050918591610d786102f6999a610d7e95610d238851611fbe565b90898c511690519083519260208401947ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d086528401526060830152608082015260808152610d70816113ff565b519020611bd9565b916120c7565b519251169161199d565b602492508a51917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b5091346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc93818536011261033257610df36114a0565b9260249081359267ffffffffffffffff9788851161032a578590853603011261049f578051978589018981108282111761104a578252848301358181116103265785019036602383011215610326578382013591610e50836115ef565b90610e5d85519283611437565b838252602093878584019160071b83010191368311611046578801905b828210610fe9575050508a526044610e93868801611509565b96838c01978852013594838b0191868352604435908111610fe557610ebb90369087016115c1565b959096804211610fba575050508998995151610ed681611ebb565b908b5b818110610f9757505092889492610d7892610f6497958351610f02816103f98682018095611f66565b5190209073ffffffffffffffffffffffffffffffffffffffff9a8b8b51169151928551948501957faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f794408638752850152830152608082015260808152610d70816113ff565b51169082515192845b848110610f78578580f35b80610f918585610f8b600195875161175e565b5161199d565b01610f6d565b80610311610fac8e9f9e93610fb2945161175e565b51611fbe565b9b9a9b610ed9565b8551917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b8a80fd5b6080823603126110465785608091885161100281611398565b61100b85611509565b8152611018838601611509565b838201526110278a8601611607565b8a8201528d611037818701611607565b90820152815201910190610e7a565b8c80fd5b84896041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5082346105bf576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576110b03661152a565b91807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610332576110e2611478565b67ffffffffffffffff93906101043585811161049f5761110590369086016115c1565b90936101243596871161032a57611125610bd1966102f6983691016115c1565b969095825190611134826113ff565b606482527f5065726d69745769746e6573735472616e7366657246726f6d28546f6b656e5060208301527f65726d697373696f6e73207065726d69747465642c6164647265737320737065848301527f6e6465722c75696e74323536206e6f6e63652c75696e7432353620646561646c60608301527f696e652c0000000000000000000000000000000000000000000000000000000060808301528351948591816111e3602085018096611f93565b918237018b8152039361121c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282611437565b5190209261122a8651612054565b6020878101518589015195519182019687526040820192909252336060820152608081019190915260a081019390935260e43560c08401528260e081016102e1565b5082346105bf576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033257813567ffffffffffffffff92838211610bda5736602383011215610bda5781013592831161032e576024906007368386831b8401011161049f57865b8581106112e5578780f35b80821b83019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83360301126103265761139288876001946060835161132c81611398565b611368608461133c8d8601611509565b9485845261134c60448201611509565b809785015261135d60648201611509565b809885015201611509565b918291015273ffffffffffffffffffffffffffffffffffffffff80808093169516931691166117a1565b016112da565b6080810190811067ffffffffffffffff8211176113b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176113b457604052565b60a0810190811067ffffffffffffffff8211176113b457604052565b60c0810190811067ffffffffffffffff8211176113b457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b457604052565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01906080821261149b576040805190611563826113e3565b8082941261149b57805181810181811067ffffffffffffffff8211176113b457825260043573ffffffffffffffffffffffffffffffffffffffff8116810361149b578152602435602082015282526044356020830152606435910152565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020838186019501011161149b57565b67ffffffffffffffff81116113b45760051b60200190565b359065ffffffffffff8216820361149b57565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020808501948460061b01011161149b57565b91909160608184031261149b576040805191611666836113e3565b8294813567ffffffffffffffff9081811161149b57830182601f8201121561149b578035611693816115ef565b926116a087519485611437565b818452602094858086019360061b8501019381851161149b579086899897969594939201925b8484106116e3575050505050855280820135908501520135910152565b90919293949596978483031261149b578851908982019082821085831117611730578a928992845261171487611509565b81528287013583820152815201930191908897969594936116c6565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80518210156117725760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92919273ffffffffffffffffffffffffffffffffffffffff604060008284168152600160205282828220961695868252602052818120338252602052209485549565ffffffffffff8760a01c16804211611884575082871696838803611812575b5050611810955016926118b5565b565b878484161160001461184f57602488604051907ff96fb0710000000000000000000000000000000000000000000000000000000082526004820152fd5b7fffffffffffffffffffffffff000000000000000000000000000000000000000084846118109a031691161790553880611802565b602490604051907fd81b2f2e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9060006064926020958295604051947f23b872dd0000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af13d15601f3d116001600051141617161561190e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152fd5b91908110156117725760061b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361149b5790565b9065ffffffffffff908160608401511673ffffffffffffffffffffffffffffffffffffffff908185511694826020820151169280866040809401511695169560009187835260016020528383208984526020528383209916988983526020528282209184835460d01c03611af5579185611ace94927fc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec98979694508715600014611ad35779ffffffffffff00000000000000000000000000000000000000009042165b60a01b167fffffffffffff00000000000000000000000000000000000000000000000000006001860160d01b1617179055519384938491604091949373ffffffffffffffffffffffffffffffffffffffff606085019616845265ffffffffffff809216602085015216910152565b0390a4565b5079ffffffffffff000000000000000000000000000000000000000087611a60565b600484517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b467f000000000000000000000000000000000000000000000000000000000000000003611b69577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a604082015246606082015230608082015260808152611bd3816113ff565b51902090565b611be1611b1e565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611bd381611398565b9192909360a435936040840151804211611cc65750602084510151808611611c955750918591610d78611c6594611c60602088015186611e47565b611bd9565b73ffffffffffffffffffffffffffffffffffffffff809151511692608435918216820361149b57611810936118b5565b602490604051907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b959093958051519560409283830151804211611e175750848803611dee57611d2e918691610d7860209b611c608d88015186611e47565b60005b868110611d42575050505050505050565b611d4d81835161175e565b5188611d5a83878a61196c565b01359089810151808311611dbe575091818888886001968596611d84575b50505050505001611d31565b611db395611dad9273ffffffffffffffffffffffffffffffffffffffff6105159351169561196c565b916118b5565b803888888883611d78565b6024908651907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b600484517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b6024908551907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff600160ff83161b9216600052600060205260406000209060081c6000526020526040600020818154188091551615611e9157565b60046040517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b90611ec5826115ef565b611ed26040519182611437565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f0082946115ef565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f375760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160208092019160005b828110611f7f575050505090565b835185529381019392810192600101611f71565b9081519160005b838110611fab575050016000815290565b8060208092840101518185015201611f9a565b60405160208101917f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678835273ffffffffffffffffffffffffffffffffffffffff8082511660408401526020820151166060830152606065ffffffffffff9182604082015116608085015201511660a082015260a0815260c0810181811067ffffffffffffffff8211176113b45760405251902090565b6040516020808201927f618358ac3db8dc274f0cd8829da7e234bd48cd73c4a740aede1adec9846d06a1845273ffffffffffffffffffffffffffffffffffffffff81511660408401520151606082015260608152611bd381611398565b919082604091031261149b576020823592013590565b6000843b61222e5750604182036121ac576120e4828201826120b1565b939092604010156117725760209360009360ff6040608095013560f81c5b60405194855216868401526040830152606082015282805260015afa156121a05773ffffffffffffffffffffffffffffffffffffffff806000511691821561217657160361214c57565b60046040517f815e1d64000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d6000823e3d90fd5b60408203612204576121c0918101906120b1565b91601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c019060ff8211611f375760209360009360ff608094612102565b60046040517f4be6321b000000000000000000000000000000000000000000000000000000008152fd5b929391601f928173ffffffffffffffffffffffffffffffffffffffff60646020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988997889687947f1626ba7e000000000000000000000000000000000000000000000000000000009e8f8752600487015260406024870152816044870152868601378b85828601015201168101030192165afa9081156123a857829161232a575b507fffffffff000000000000000000000000000000000000000000000000000000009150160361230057565b60046040517fb0669cbc000000000000000000000000000000000000000000000000000000008152fd5b90506020813d82116123a0575b8161234460209383611437565b810103126103365751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610a9a57507fffffffff0000000000000000000000000000000000000000000000000000000090386122d4565b3d9150612337565b6040513d84823e3d90fdfea164736f6c6343000811000a'; + return + hex'60c0346100bb574660a052602081017f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a60408301524660608301523060808301526080825260a082019180831060018060401b038411176100a557826040525190206080526123c090816100c1823960805181611b47015260a05181611b210152f35b634e487b7160e01b600052604160045260246000fd5b600080fdfe6040608081526004908136101561001557600080fd5b600090813560e01c80630d58b1db1461126c578063137c29fe146110755780632a2d80d114610db75780632b67b57014610bde57806330f28b7a14610ade5780633644e51514610a9d57806336c7851614610a285780633ff9dcb1146109a85780634fe02b441461093f57806365d9723c146107ac57806387517c451461067a578063927da105146105c3578063cc53287f146104a3578063edd9444b1461033a5763fe8ec1a7146100c657600080fd5b346103365760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff833581811161033257610114903690860161164b565b60243582811161032e5761012b903690870161161a565b6101336114e6565b9160843585811161032a5761014b9036908a016115c1565b98909560a43590811161032657610164913691016115c1565b969095815190610173826113ff565b606b82527f5065726d697442617463685769746e6573735472616e7366657246726f6d285460208301527f6f6b656e5065726d697373696f6e735b5d207065726d69747465642c61646472838301527f657373207370656e6465722c75696e74323536206e6f6e63652c75696e74323560608301527f3620646561646c696e652c000000000000000000000000000000000000000000608083015282519a8b9181610222602085018096611f93565b918237018a8152039961025b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b8c8101835282611437565b5190209085515161026b81611ebb565b908a5b8181106102f95750506102f6999a6102ed9183516102a081610294602082018095611f66565b03848101835282611437565b519020602089810151858b015195519182019687526040820192909252336060820152608081019190915260a081019390935260643560c08401528260e081015b03908101835282611437565b51902093611cf7565b80f35b8061031161030b610321938c5161175e565b51612054565b61031b828661175e565b52611f0a565b61026e565b8880fd5b8780fd5b8480fd5b8380fd5b5080fd5b5091346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff9080358281116103325761038b903690830161164b565b60243583811161032e576103a2903690840161161a565b9390926103ad6114e6565b9160643590811161049f576103c4913691016115c1565b949093835151976103d489611ebb565b98885b81811061047d5750506102f697988151610425816103f9602082018095611f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611437565b5190206020860151828701519083519260208401947ffcf35f5ac6a2c28868dc44c302166470266239195f02b0ee408334829333b7668652840152336060840152608083015260a082015260a081526102ed8161141b565b808b61031b8261049461030b61049a968d5161175e565b9261175e565b6103d7565b8680fd5b5082346105bf57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103325780359067ffffffffffffffff821161032e576104f49136910161161a565b929091845b848110610504578580f35b8061051a610515600193888861196c565b61197c565b61052f84610529848a8a61196c565b0161197c565b3389528385528589209173ffffffffffffffffffffffffffffffffffffffff80911692838b528652868a20911690818a5285528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558551918252848201527f89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4853392a2016104f9565b8280fd5b50346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610676816105ff6114a0565b936106086114c3565b6106106114e6565b73ffffffffffffffffffffffffffffffffffffffff968716835260016020908152848420928816845291825283832090871683528152919020549251938316845260a083901c65ffffffffffff169084015260d09190911c604083015281906060820190565b0390f35b50346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336576106b26114a0565b906106bb6114c3565b916106c46114e6565b65ffffffffffff926064358481169081810361032a5779ffffffffffff0000000000000000000000000000000000000000947fda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b94338a5260016020527fffffffffffff0000000000000000000000000000000000000000000000000000858b209873ffffffffffffffffffffffffffffffffffffffff809416998a8d5260205283878d209b169a8b8d52602052868c209486156000146107a457504216925b8454921697889360a01b16911617179055815193845260208401523392a480f35b905092610783565b5082346105bf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576107e56114a0565b906107ee6114c3565b9265ffffffffffff604435818116939084810361032a57338852602091600183528489209673ffffffffffffffffffffffffffffffffffffffff80911697888b528452858a20981697888a5283528489205460d01c93848711156109175761ffff9085840316116108f05750907f55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f393929133895260018252838920878a528252838920888a5282528389209079ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff000000000000000000000000000000000000000000000000000083549260d01b16911617905582519485528401523392a480f35b84517f24d35a26000000000000000000000000000000000000000000000000000000008152fd5b5084517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b503461033657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336578060209273ffffffffffffffffffffffffffffffffffffffff61098f6114a0565b1681528084528181206024358252845220549051908152f35b5082346105bf57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf577f3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d90359160243533855284602052818520848652602052818520818154179055815193845260208401523392a280f35b8234610a9a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a9a57610a606114a0565b610a686114c3565b610a706114e6565b6064359173ffffffffffffffffffffffffffffffffffffffff8316830361032e576102f6936117a1565b80fd5b503461033657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657602090610ad7611b1e565b9051908152f35b508290346105bf576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf57610b1a3661152a565b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261033257610b4c611478565b9160e43567ffffffffffffffff8111610bda576102f694610b6f913691016115c1565b939092610b7c8351612054565b6020840151828501519083519260208401947f939c21a48a8dbe3a9a2404a1d46691e4d39f6583d6ec6b35714604c986d801068652840152336060840152608083015260a082015260a08152610bd18161141b565b51902091611c25565b8580fd5b509134610336576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610c186114a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360160c08112610332576080855191610c51836113e3565b1261033257845190610c6282611398565b73ffffffffffffffffffffffffffffffffffffffff91602435838116810361049f578152604435838116810361049f57602082015265ffffffffffff606435818116810361032a5788830152608435908116810361049f576060820152815260a435938285168503610bda576020820194855260c4359087830182815260e43567ffffffffffffffff811161032657610cfe90369084016115c1565b929093804211610d88575050918591610d786102f6999a610d7e95610d238851611fbe565b90898c511690519083519260208401947ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d086528401526060830152608082015260808152610d70816113ff565b519020611bd9565b916120c7565b519251169161199d565b602492508a51917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b5091346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc93818536011261033257610df36114a0565b9260249081359267ffffffffffffffff9788851161032a578590853603011261049f578051978589018981108282111761104a578252848301358181116103265785019036602383011215610326578382013591610e50836115ef565b90610e5d85519283611437565b838252602093878584019160071b83010191368311611046578801905b828210610fe9575050508a526044610e93868801611509565b96838c01978852013594838b0191868352604435908111610fe557610ebb90369087016115c1565b959096804211610fba575050508998995151610ed681611ebb565b908b5b818110610f9757505092889492610d7892610f6497958351610f02816103f98682018095611f66565b5190209073ffffffffffffffffffffffffffffffffffffffff9a8b8b51169151928551948501957faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f794408638752850152830152608082015260808152610d70816113ff565b51169082515192845b848110610f78578580f35b80610f918585610f8b600195875161175e565b5161199d565b01610f6d565b80610311610fac8e9f9e93610fb2945161175e565b51611fbe565b9b9a9b610ed9565b8551917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b8a80fd5b6080823603126110465785608091885161100281611398565b61100b85611509565b8152611018838601611509565b838201526110278a8601611607565b8a8201528d611037818701611607565b90820152815201910190610e7a565b8c80fd5b84896041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5082346105bf576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576110b03661152a565b91807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610332576110e2611478565b67ffffffffffffffff93906101043585811161049f5761110590369086016115c1565b90936101243596871161032a57611125610bd1966102f6983691016115c1565b969095825190611134826113ff565b606482527f5065726d69745769746e6573735472616e7366657246726f6d28546f6b656e5060208301527f65726d697373696f6e73207065726d69747465642c6164647265737320737065848301527f6e6465722c75696e74323536206e6f6e63652c75696e7432353620646561646c60608301527f696e652c0000000000000000000000000000000000000000000000000000000060808301528351948591816111e3602085018096611f93565b918237018b8152039361121c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282611437565b5190209261122a8651612054565b6020878101518589015195519182019687526040820192909252336060820152608081019190915260a081019390935260e43560c08401528260e081016102e1565b5082346105bf576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033257813567ffffffffffffffff92838211610bda5736602383011215610bda5781013592831161032e576024906007368386831b8401011161049f57865b8581106112e5578780f35b80821b83019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83360301126103265761139288876001946060835161132c81611398565b611368608461133c8d8601611509565b9485845261134c60448201611509565b809785015261135d60648201611509565b809885015201611509565b918291015273ffffffffffffffffffffffffffffffffffffffff80808093169516931691166117a1565b016112da565b6080810190811067ffffffffffffffff8211176113b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176113b457604052565b60a0810190811067ffffffffffffffff8211176113b457604052565b60c0810190811067ffffffffffffffff8211176113b457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b457604052565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01906080821261149b576040805190611563826113e3565b8082941261149b57805181810181811067ffffffffffffffff8211176113b457825260043573ffffffffffffffffffffffffffffffffffffffff8116810361149b578152602435602082015282526044356020830152606435910152565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020838186019501011161149b57565b67ffffffffffffffff81116113b45760051b60200190565b359065ffffffffffff8216820361149b57565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020808501948460061b01011161149b57565b91909160608184031261149b576040805191611666836113e3565b8294813567ffffffffffffffff9081811161149b57830182601f8201121561149b578035611693816115ef565b926116a087519485611437565b818452602094858086019360061b8501019381851161149b579086899897969594939201925b8484106116e3575050505050855280820135908501520135910152565b90919293949596978483031261149b578851908982019082821085831117611730578a928992845261171487611509565b81528287013583820152815201930191908897969594936116c6565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80518210156117725760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92919273ffffffffffffffffffffffffffffffffffffffff604060008284168152600160205282828220961695868252602052818120338252602052209485549565ffffffffffff8760a01c16804211611884575082871696838803611812575b5050611810955016926118b5565b565b878484161160001461184f57602488604051907ff96fb0710000000000000000000000000000000000000000000000000000000082526004820152fd5b7fffffffffffffffffffffffff000000000000000000000000000000000000000084846118109a031691161790553880611802565b602490604051907fd81b2f2e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9060006064926020958295604051947f23b872dd0000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af13d15601f3d116001600051141617161561190e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152fd5b91908110156117725760061b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361149b5790565b9065ffffffffffff908160608401511673ffffffffffffffffffffffffffffffffffffffff908185511694826020820151169280866040809401511695169560009187835260016020528383208984526020528383209916988983526020528282209184835460d01c03611af5579185611ace94927fc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec98979694508715600014611ad35779ffffffffffff00000000000000000000000000000000000000009042165b60a01b167fffffffffffff00000000000000000000000000000000000000000000000000006001860160d01b1617179055519384938491604091949373ffffffffffffffffffffffffffffffffffffffff606085019616845265ffffffffffff809216602085015216910152565b0390a4565b5079ffffffffffff000000000000000000000000000000000000000087611a60565b600484517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b467f000000000000000000000000000000000000000000000000000000000000000003611b69577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a604082015246606082015230608082015260808152611bd3816113ff565b51902090565b611be1611b1e565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611bd381611398565b9192909360a435936040840151804211611cc65750602084510151808611611c955750918591610d78611c6594611c60602088015186611e47565b611bd9565b73ffffffffffffffffffffffffffffffffffffffff809151511692608435918216820361149b57611810936118b5565b602490604051907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b959093958051519560409283830151804211611e175750848803611dee57611d2e918691610d7860209b611c608d88015186611e47565b60005b868110611d42575050505050505050565b611d4d81835161175e565b5188611d5a83878a61196c565b01359089810151808311611dbe575091818888886001968596611d84575b50505050505001611d31565b611db395611dad9273ffffffffffffffffffffffffffffffffffffffff6105159351169561196c565b916118b5565b803888888883611d78565b6024908651907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b600484517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b6024908551907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff600160ff83161b9216600052600060205260406000209060081c6000526020526040600020818154188091551615611e9157565b60046040517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b90611ec5826115ef565b611ed26040519182611437565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f0082946115ef565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f375760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160208092019160005b828110611f7f575050505090565b835185529381019392810192600101611f71565b9081519160005b838110611fab575050016000815290565b8060208092840101518185015201611f9a565b60405160208101917f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678835273ffffffffffffffffffffffffffffffffffffffff8082511660408401526020820151166060830152606065ffffffffffff9182604082015116608085015201511660a082015260a0815260c0810181811067ffffffffffffffff8211176113b45760405251902090565b6040516020808201927f618358ac3db8dc274f0cd8829da7e234bd48cd73c4a740aede1adec9846d06a1845273ffffffffffffffffffffffffffffffffffffffff81511660408401520151606082015260608152611bd381611398565b919082604091031261149b576020823592013590565b6000843b61222e5750604182036121ac576120e4828201826120b1565b939092604010156117725760209360009360ff6040608095013560f81c5b60405194855216868401526040830152606082015282805260015afa156121a05773ffffffffffffffffffffffffffffffffffffffff806000511691821561217657160361214c57565b60046040517f815e1d64000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d6000823e3d90fd5b60408203612204576121c0918101906120b1565b91601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c019060ff8211611f375760209360009360ff608094612102565b60046040517f4be6321b000000000000000000000000000000000000000000000000000000008152fd5b929391601f928173ffffffffffffffffffffffffffffffffffffffff60646020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988997889687947f1626ba7e000000000000000000000000000000000000000000000000000000009e8f8752600487015260406024870152816044870152868601378b85828601015201168101030192165afa9081156123a857829161232a575b507fffffffff000000000000000000000000000000000000000000000000000000009150160361230057565b60046040517fb0669cbc000000000000000000000000000000000000000000000000000000008152fd5b90506020813d82116123a0575b8161234460209383611437565b810103126103365751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610a9a57507fffffffff0000000000000000000000000000000000000000000000000000000090386122d4565b3d9150612337565b6040513d84823e3d90fdfea164736f6c6343000811000a'; } } diff --git a/src/briefcase/deployers/swap-router-contracts/SwapRouter02Deployer.sol b/src/briefcase/deployers/swap-router-contracts/SwapRouter02Deployer.sol index 09113c97..fc4ec445 100644 --- a/src/briefcase/deployers/swap-router-contracts/SwapRouter02Deployer.sol +++ b/src/briefcase/deployers/swap-router-contracts/SwapRouter02Deployer.sol @@ -25,6 +25,7 @@ library SwapRouter02Deployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'6101006040526000196000553480156200001857600080fd5b5060405162006135380380620061358339810160408190526200003b9162000087565b6001600160601b0319606094851b811660805291841b821660a05291831b811660c052911b1660e052620000e3565b80516001600160a01b03811681146200008257600080fd5b919050565b600080600080608085870312156200009d578384fd5b620000a8856200006a565b9350620000b8602086016200006a565b9250620000c8604086016200006a565b9150620000d8606086016200006a565b905092959194509250565b60805160601c60a05160601c60c05160601c60e05160601c615fb162000184600039806102c15280610b3c52806112ad52806113d7528061147e52806116af52806117d95280612d8f5280612def5280612e70525080611e4c52806124df5280613cdb52508061166f5280611b1a5280611e9c52806132a6525080610c625280610d365280610fe2528061164b5280612fc252806131855250615fb16000f3fe6080604052600436106102a45760003560e01c80639b2c0a371161016e578063dee00f35116100cb578063f100b2051161007f578063f2d5d56b11610064578063f2d5d56b1461066e578063f3995c6714610681578063fa461e33146106945761034f565b8063f100b2051461063b578063f25801a71461064e5761034f565b8063e0e189a0116100b0578063e0e189a0146105f5578063e90a182f14610608578063efdeed8e1461061b5761034f565b8063dee00f35146105b5578063df2ab5bb146105e25761034f565b8063b858183f11610122578063c45a015511610107578063c45a01551461057a578063cab372ce1461058f578063d4ef38de146105a25761034f565b8063b858183f14610554578063c2e3140a146105675761034f565b8063ab3fdd5011610153578063ab3fdd501461051b578063ac9650d81461052e578063b3a2af13146105415761034f565b80639b2c0a37146104f5578063a4a78f0c146105085761034f565b8063472b43f31161021c578063571ac8b0116101d0578063639d71a9116101b5578063639d71a9146104b857806368e0d4e1146104cb578063791b98bc146104e05761034f565b8063571ac8b0146104925780635ae401dc146104a55761034f565b80634961699711610201578063496169971461044a5780634aa4a4fc1461045d5780635023b4df1461047f5761034f565b8063472b43f31461042457806349404b7c146104375761034f565b80631c58db4f116102735780633068c554116102585780633068c554146103eb57806342712a67146103fe5780634659a494146104115761034f565b80631c58db4f146103b85780631f0464d1146103cb5761034f565b806304e45aaf1461035457806309b813461461037d57806311ed56c91461039057806312210e8a146103b05761034f565b3661034f573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461034d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b610367610362366004615543565b6106b4565b6040516103749190615dfd565b60405180910390f35b61036761038b3660046155de565b61083c565b6103a361039e366004615638565b61091c565b6040516103749190615b7a565b61034d610b28565b61034d6103c63660046157bb565b610b3a565b6103de6103d93660046152a7565b610bbe565b6040516103749190615afc565b61034d6103f93660046150d8565b610c48565b61036761040c366004615885565b610c5b565b61034d61041f366004615121565b610e35565b610367610432366004615885565b610ef5565b61034d6104453660046157eb565b6112a9565b61034d6104583660046157bb565b61146f565b34801561046957600080fd5b5061047261147c565b6040516103749190615a3c565b61036761048d366004615616565b6114a0565b61034d6104a0366004614feb565b611589565b6103de6104b33660046152a7565b6115bc565b61034d6104c6366004614feb565b611635565b3480156104d757600080fd5b50610472611649565b3480156104ec57600080fd5b5061047261166d565b61034d61050336600461581a565b611691565b61034d610516366004615121565b6118a7565b61034d610529366004614feb565b61197c565b6103de61053c36600461517c565b6119ba565b6103a361054f3660046152f1565b611b14565b61036761056236600461549d565b611bd2565b61034d610575366004615121565b611d95565b34801561058657600080fd5b50610472611e4a565b61034d61059d366004614feb565b611990565b61034d6105b0366004615858565b611e6e565b3480156105c157600080fd5b506105d56105d036600461500e565b611e7a565b6040516103749190615b8d565b61034d6105f0366004615039565b612027565b61034d61060336600461507a565b61213e565b61034d61061636600461500e565b6122a4565b34801561062757600080fd5b5061034d6106363660046151bc565b6122b3565b6103a3610649366004615627565b612305565b34801561065a57600080fd5b5061034d610669366004615324565b6123a5565b61034d61067c36600461500e565b6123f6565b61034d61068f366004615121565b612402565b3480156106a057600080fd5b5061034d6106af3660046153b8565b61249a565b600080600083608001511415610771575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a082319061071b903090600401615a3c565b60206040518083038186803b15801561073357600080fd5b505afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906157d3565b60808401525b6107ed836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107af939291906159aa565b6040516020818303038152906040528152602001866107ce57336107d0565b305b73ffffffffffffffffffffffffffffffffffffffff1690526125de565b91508260a00151821015610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b60405180910390fd5b50919050565b60006108b0604083018035906108559060208601614feb565b604080518082019091526000908061086d8880615e41565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360209091015261278f565b505060005460608201358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b604080516101608101909152606090610b20907f8831645600000000000000000000000000000000000000000000000000000000908061095f6020870187614feb565b73ffffffffffffffffffffffffffffffffffffffff16815260200185602001602081019061098d9190614feb565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109b860608701604088016157a1565b62ffffff1681526020016109d26080870160608801615379565b60020b81526020016109ea60a0870160808801615379565b60020b8152602090810190610a0a90610a0590880188614feb565b612976565b8152602001610a25866020016020810190610a059190614feb565b815260a0860135602082015260c08601356040820152606001610a4f610100870160e08801614feb565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610a9e9190615cf8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611b14565b90505b919050565b4715610b3857610b383347612a1b565b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ba257600080fd5b505af1158015610bb6573d6000803e3d6000fd5b505050505050565b60608380600143034014610c3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610c3d84846119ba565b91505b509392505050565b610c55848433858561213e565b50505050565b6000610cbb7f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612b6992505050565b600081518110610cc757fe5b6020026020010151905084811115610d0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b610da484846000818110610d1b57fe5b9050602002016020810190610d309190614feb565b33610d9e7f000000000000000000000000000000000000000000000000000000000000000088886000818110610d6257fe5b9050602002016020810190610d779190614feb565b89896001818110610d8457fe5b9050602002016020810190610d999190614feb565b612ca2565b84612d8d565b73ffffffffffffffffffffffffffffffffffffffff821660011415610dcb57339150610dee565b73ffffffffffffffffffffffffffffffffffffffff821660021415610dee573091505b610e2c848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612f6b915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610ed557600080fd5b505af1158015610ee9573d6000803e3d6000fd5b50505050505050505050565b60008086610fab575060018484600081610f0b57fe5b9050602002016020810190610f209190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f589190615a3c565b60206040518083038186803b158015610f7057600080fd5b505afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa891906157d3565b96505b61103685856000818110610fbb57fe5b9050602002016020810190610fd09190614feb565b82610fdb5733610fdd565b305b6110307f00000000000000000000000000000000000000000000000000000000000000008989600081811061100e57fe5b90506020020160208101906110239190614feb565b8a8a6001818110610d8457fe5b8a612d8d565b73ffffffffffffffffffffffffffffffffffffffff83166001141561105d57339250611080565b73ffffffffffffffffffffffffffffffffffffffff831660021415611080573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106110b057fe5b90506020020160208101906110c59190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016110fd9190615a3c565b60206040518083038186803b15801561111557600080fd5b505afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d91906157d3565b905061118d868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612f6b915050565b6112628187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106111bf57fe5b90506020020160208101906111d49190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b815260040161120c9190615a3c565b60206040518083038186803b15801561122457600080fd5b505afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c91906157d3565b90613270565b92508683101561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b505095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561133257600080fd5b505afa158015611346573d6000803e3d6000fd5b505050506040513d602081101561135c57600080fd5b50519050828110156113cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561146a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b5050505061146a8282612a1b565b505050565b61147981336112a9565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611549608083018035906114b99060608601614feb565b6114c960e0860160c08701614feb565b60405180604001604052808760200160208101906114e79190614feb565b6114f760608a0160408b016157a1565b61150460208b018b614feb565b604051602001611516939291906159aa565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff1681525061278f565b90508160a001358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b6115b3817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b61147957600080fd5b606083806115c86133cc565b1115610c3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b611640816000613280565b61158957600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000821180156116a2575060648211155b6116ab57600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561173457600080fd5b505afa158015611748573d6000803e3d6000fd5b505050506040513d602081101561175e57600080fd5b50519050848110156117d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b80156118a0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561184a57600080fd5b505af115801561185e573d6000803e3d6000fd5b50505050600061271061187a85846133d090919063ffffffff16565b8161188157fe5b0490508015611894576118948382612a1b565b610bb685828403612a1b565b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561193c57600080fd5b505afa158015611950573d6000803e3d6000fd5b505050506040513d602081101561196657600080fd5b50511015610bb657610bb6868686868686610e35565b611987816000613280565b61199057600080fd5b6115b3817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b60608167ffffffffffffffff811180156119d357600080fd5b50604051908082528060200260200182016040528015611a0757816020015b60608152602001906001900390816119f25790505b50905060005b82811015611b0d5760008030868685818110611a2557fe5b9050602002810190611a379190615e41565b604051611a45929190615a10565b600060405180830381855af49150503d8060008114611a80576040519150601f19603f3d011682016040523d82523d6000602084013e611a85565b606091505b509150915081611aeb57604481511015611a9e57600080fd5b60048101905080806020019051810190611ab89190615433565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d9190615b7a565b80848481518110611af857fe5b60209081029190910101525050600101611a0d565b5092915050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611b5d9190615a20565b6000604051808303816000865af19150503d8060008114611b9a576040519150601f19603f3d011682016040523d82523d6000602084013e611b9f565b606091505b50925090508061083657604482511015611bb857600080fd5b60048201915081806020019051810190611ab89190615433565b600080600083604001511415611ca357600190506000611bf584600001516133f4565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611c4c903090600401615a3c565b60206040518083038186803b158015611c6457600080fd5b505afa158015611c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9c91906157d3565b6040850152505b600081611cb05733611cb2565b305b90505b6000611cc48560000151613425565b9050611d1d856040015182611cdd578660200151611cdf565b305b60006040518060400160405280611cf98b6000015161342d565b81526020018773ffffffffffffffffffffffffffffffffffffffff168152506125de565b60408601528015611d3d578451309250611d369061343c565b8552611d4a565b8460400151935050611d50565b50611cb5565b8360600151831015611d8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611e0a57600080fd5b505afa158015611e1e573d6000803e3d6000fd5b505050506040513d6020811015611e3457600080fd5b50511015610bb657610bb6868686868686612402565b7f000000000000000000000000000000000000000000000000000000000000000081565b61146a83338484611691565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611ed8929190615a5d565b60206040518083038186803b158015611ef057600080fd5b505afa158015611f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2891906157d3565b10611f3557506000612021565b611f5f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b15611f6c57506001612021565b611f96837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b15611fa357506002612021565b611fae836000613280565b611fb757600080fd5b611fe1837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b15611fee57506003612021565b612018837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b1561034f575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561209057600080fd5b505afa1580156120a4573d6000803e3d6000fd5b505050506040513d60208110156120ba57600080fd5b505190508281101561212d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610c5557610c55848383613471565b60008211801561214f575060648211155b61215857600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121c157600080fd5b505afa1580156121d5573d6000803e3d6000fd5b505050506040513d60208110156121eb57600080fd5b505190508481101561225e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610bb657600061271061227383866133d0565b8161227a57fe5b049050801561228e5761228e878483613471565b61229b8786838503613471565b50505050505050565b6122af828233612027565b5050565b6000806122c1868685613646565b915091508362ffffff1681830312610bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c46565b6060610b2063219f5d1760e01b6040518060c001604052808560400135815260200161233d866000016020810190610a059190614feb565b8152602001612358866020016020810190610a059190614feb565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610a9e9190615cb4565b6000806123b28584613859565b915091508362ffffff16818303126118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c46565b6122af82333084613ae1565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610ed557600080fd5b60008413806124a95750600083135b6124b257600080fd5b60006124c08284018461564a565b905060008060006124d484600001516133f4565b9250925092506125067f0000000000000000000000000000000000000000000000000000000000000000848484613cbe565b5060008060008a13612547578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089612578565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115612597576125928587602001513384612d8d565b610ee9565b85516125a290613425565b156125c75785516125b29061343c565b86526125c1813360008961278f565b50610ee9565b80600081905550610ee98487602001513384612d8d565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156126075733935061262a565b73ffffffffffffffffffffffffffffffffffffffff84166002141561262a573093505b600080600061263c85600001516133f4565b9194509250905073ffffffffffffffffffffffffffffffffffffffff8083169084161060008061266d868686613cd4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856126938f613d12565b73ffffffffffffffffffffffffffffffffffffffff8e16156126b5578d6126db565b876126d45773fffd8963efd1fc6a506488495d951d5263988d256126db565b6401000276a45b8d6040516020016126ec9190615da6565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161271b959493929190615a84565b6040805180830381600087803b15801561273457600080fd5b505af1158015612748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276c9190615395565b915091508261277b578161277d565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127b8573393506127db565b73ffffffffffffffffffffffffffffffffffffffff8416600214156127db573093505b60008060006127ed85600001516133f4565b9194509250905073ffffffffffffffffffffffffffffffffffffffff8084169083161060008061281e858786613cd4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856128448f613d12565b60000373ffffffffffffffffffffffffffffffffffffffff8e1615612869578d61288f565b876128885773fffd8963efd1fc6a506488495d951d5263988d2561288f565b6401000276a45b8d6040516020016128a09190615da6565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016128cf959493929190615a84565b6040805180830381600087803b1580156128e857600080fd5b505af11580156128fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129209190615395565b9150915060008361293557818360000361293b565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16612967578b811461296757600080fd5b50505050505050949350505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a08231906129cb903090600401615a3c565b60206040518083038186803b1580156129e357600080fd5b505afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2091906157d3565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310612a9257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612a55565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612af4576040519150601f19603f3d011682016040523d82523d6000602084013e612af9565b606091505b505090508061146a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060600282511015612b7a57600080fd5b815167ffffffffffffffff81118015612b9257600080fd5b50604051908082528060200260200182016040528015612bbc578160200160208202803683370190505b5090508281600183510381518110612bd057fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610c4057600080612c3d87866001860381518110612c1c57fe5b6020026020010151878681518110612c3057fe5b6020026020010151613d44565b91509150612c5f848481518110612c5057fe5b60200260200101518383613e2c565b846001850381518110612c6e57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612c00565b6000806000612cb18585613f02565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612de85750804710155b15612f31577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5557600080fd5b505af1158015612e69573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612eff57600080fd5b505af1158015612f13573d6000803e3d6000fd5b505050506040513d6020811015612f2957600080fd5b50610c559050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612f5f57612f5a848383613471565b610c55565b610c5584848484613ae1565b60005b600183510381101561146a57600080848381518110612f8957fe5b6020026020010151858460010181518110612fa057fe5b6020026020010151915091506000612fb88383613f02565b5090506000612fe87f00000000000000000000000000000000000000000000000000000000000000008585612ca2565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561303657600080fd5b505afa15801561304a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306e91906156da565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146130d05782846130d3565b83835b91509150613114828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b815260040161120c9190615a3c565b9550613121868383613fa7565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461316557826000613169565b6000835b91509150600060028c51038a10613180578a6131c1565b6131c17f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106131b457fe5b6020026020010151612ca2565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906132299086908690869060248101615e06565b600060405180830381600087803b15801561324357600080fd5b505af1158015613257573d6000803e3d6000fd5b50506001909b019a50612f6e9950505050505050505050565b8082038281111561202157600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f0000000000000000000000000000000000000000000000000000000000000000866040516024016132d7929190615ad6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516133609190615a20565b6000604051808303816000865af19150503d806000811461339d576040519150601f19603f3d011682016040523d82523d6000602084013e6133a2565b606091505b5091509150818015610e2c575080511580610e2c575080806020019051810190610e2c919061528d565b4290565b60008215806133eb575050818102818382816133e857fe5b04145b61202157600080fd5b60008080613402848261407d565b925061340f84601461417d565b905061341c84601761407d565b91509193909250565b516042111590565b6060610b20826000602b61426d565b8051606090610b209083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161426d565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061354657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613509565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135a8576040519150601f19603f3d011682016040523d82523d6000602084013e6135ad565b606091505b50915091508180156135db5750805115806135db57508080602001905160208110156135d857600080fd5b50515b6118a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080835185511461365757600080fd5b6000855167ffffffffffffffff8111801561367157600080fd5b506040519080825280602002602001820160405280156136ab57816020015b613698614e34565b8152602001906001900390816136905790505b5090506000865167ffffffffffffffff811180156136c857600080fd5b5060405190808252806020026020018201604052801561370257816020015b6136ef614e34565b8152602001906001900390816136e75790505b50905060005b8751811015613832576000806137318a848151811061372357fe5b602002602001015189613859565b9150915061373e82614454565b85848151811061374a57fe5b60200260200101516000019060020b908160020b8152505061376b81614454565b84848151811061377757fe5b60200260200101516000019060020b908160020b8152505088838151811061379b57fe5b60200260200101518584815181106137af57fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508883815181106137f157fe5b602002602001015184848151811061380557fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff9092169101525050600101613708565b5061383c82614465565b60020b935061384a81614465565b60020b92505050935093915050565b6000806000806138688661454d565b90506000805b82811015613a865760008060006138848b6133f4565b9250925092506000613897848484613cd4565b905060008063ffffffff8d166138c0576138b083614578565b600291820b9350900b9050613962565b6138ca838e614810565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561391b57600080fd5b505afa15801561392f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139539190615715565b50505060029290920b93505050505b600189038714156139a3578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161099506139b2565b6139ac8e61343c565b9d508597505b6000871580613a5357508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a23578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613a53565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613a68579b82019b9a81019a613a73565b828d039c50818c039b505b50506001909501945061386e9350505050565b5082613ad7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613bbe57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b81565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c20576040519150601f19603f3d011682016040523d82523d6000602084013e613c25565b606091505b5091509150818015613c53575080511580613c535750808060200190516020811015613c5057600080fd5b50515b610bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610e2c85613ccf868686614c41565b614cbe565b6000613d0a7f0000000000000000000000000000000000000000000000000000000000000000613d05868686614c41565b614cee565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d4057600080fd5b5090565b6000806000613d538585613f02565b509050600080613d64888888612ca2565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613da957600080fd5b505afa158015613dbd573d6000803e3d6000fd5b505050506040513d6060811015613dd357600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614613e1a578082613e1d565b81815b90999098509650505050505050565b6000808411613e9c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b600083118015613eac5750600082115b613eb557600080fd5b6000613ecd6103e8613ec786886133d0565b906133d0565b90506000613ee16103e5613ec78689613270565b9050613ef86001828481613ef157fe5b0490614e24565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613f3e57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610613f78578284613f7b565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216613fa057600080fd5b9250929050565b600080841161401757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156140275750600082115b61403057600080fd5b600061403e856103e56133d0565b9050600061404c82856133d0565b9050600061406683614060886103e86133d0565b90614e24565b905080828161407157fe5b04979650505050505050565b6000818260140110156140f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561416457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b6000818260030110156141f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561426457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f0110156142e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561435257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b818301845110156143c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b6060821580156143e3576040519150600082526020820160405261444b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561441c578051835260209283019201614404565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b80600281900b8114610b2357600080fd5b6000806000805b84518110156144fa5784818151811061448157fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff168582815181106144ab57fe5b60200260200101516000015160020b02830192508481815181106144cb57fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1682019150808060010191505061446c565b5080828161450457fe5b05925060008212801561451f575080828161451b57fe5b0715155b15611d8e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156145c457600080fd5b505afa1580156145d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fc9190615715565b50939750919550935050600161ffff84161191506146489050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615bd8565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016146849190615dee565b60806040518083038186803b15801561469c57600080fd5b505afa1580156146b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146d491906158e0565b5050915091506146e26133cc565b63ffffffff168263ffffffff16146146fc57849550614807565b60008361ffff1660018561ffff168761ffff1601038161471857fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016147599190615dfd565b60806040518083038186803b15801561477157600080fd5b505afa158015614785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147a991906158e0565b93505092509250806147e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615ba1565b82860363ffffffff811683870360060b816147fe57fe5b059a5050505050505b50505050915091565b60008063ffffffff831661488557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60408051600280825260608201835260009260208301908036833701905050905083816000815181106148b457fe5b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106148dd57fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614978578181015183820152602001614960565b505050509050019250505060006040518083038186803b15801561499b57600080fd5b505afa1580156149af573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160409081528110156149f657600080fd5b8101908080516040519392919084640100000000821115614a1657600080fd5b908301906020820185811115614a2b57600080fd5b8251866020820283011164010000000082111715614a4857600080fd5b82525081516020918201928201910280838360005b83811015614a75578181015183820152602001614a5d565b5050505090500160405260200180516040519392919084640100000000821115614a9e57600080fd5b908301906020820185811115614ab357600080fd5b8251866020820283011164010000000082111715614ad057600080fd5b82525081516020918201928201910280838360005b83811015614afd578181015183820152602001614ae5565b5050505090500160405250505091509150600082600081518110614b1d57fe5b602002602001015183600181518110614b3257fe5b6020026020010151039050600082600081518110614b4c57fe5b602002602001015183600181518110614b6157fe5b60200260200101510390508763ffffffff168260060b81614b7e57fe5b05965060008260060b128015614ba857508763ffffffff168260060b81614ba157fe5b0760060b15155b15614bd3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614c3157fe5b0496505050505050509250929050565b614c49614e4b565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115614c81579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000614cca8383614cee565b90503373ffffffffffffffffffffffffffffffffffffffff82161461202157600080fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d3057600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b8082018281101561202157600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610b2381615f52565b60008083601f840112614e87578182fd5b50813567ffffffffffffffff811115614e9e578182fd5b6020830191508360208083028501011115613fa057600080fd5b600082601f830112614ec8578081fd5b81356020614edd614ed883615ec8565b615ea4565b8281528181019085830183850287018401881015614ef9578586fd5b855b85811015614f345781356fffffffffffffffffffffffffffffffff81168114614f22578788fd5b84529284019290840190600101614efb565b5090979650505050505050565b80518015158114610b2357600080fd5b600082601f830112614f61578081fd5b8135614f6f614ed882615ee6565b818152846020838601011115614f83578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610b2357600080fd5b805161ffff81168114610b2357600080fd5b803562ffffff81168114610b2357600080fd5b8035610b2381615f83565b600060208284031215614ffc578081fd5b813561500781615f52565b9392505050565b60008060408385031215615020578081fd5b823561502b81615f52565b946020939093013593505050565b60008060006060848603121561504d578081fd5b833561505881615f52565b925060208401359150604084013561506f81615f52565b809150509250925092565b600080600080600060a08688031215615091578283fd5b853561509c81615f52565b94506020860135935060408601356150b381615f52565b92506060860135915060808601356150ca81615f52565b809150509295509295909350565b600080600080608085870312156150ed578182fd5b84356150f881615f52565b93506020850135925060408501359150606085013561511681615f52565b939692955090935050565b60008060008060008060c08789031215615139578384fd5b863561514481615f52565b95506020870135945060408701359350606087013561516281615f95565b9598949750929560808101359460a0909101359350915050565b6000806020838503121561518e578182fd5b823567ffffffffffffffff8111156151a4578283fd5b6151b085828601614e76565b90969095509350505050565b600080600080608085870312156151d1578182fd5b843567ffffffffffffffff808211156151e8578384fd5b818701915087601f8301126151fb578384fd5b8135602061520b614ed883615ec8565b82815281810190858301885b858110156152405761522e8e8684358b0101614f51565b84529284019290840190600101615217565b50909950505088013592505080821115615258578384fd5b5061526587828801614eb8565b93505061527460408601614fcd565b915061528260608601614fe0565b905092959194509250565b60006020828403121561529e578081fd5b61500782614f41565b6000806000604084860312156152bb578081fd5b83359250602084013567ffffffffffffffff8111156152d8578182fd5b6152e486828701614e76565b9497909650939450505050565b600060208284031215615302578081fd5b813567ffffffffffffffff811115615318578182fd5b613d0a84828501614f51565b600080600060608486031215615338578081fd5b833567ffffffffffffffff81111561534e578182fd5b61535a86828701614f51565b93505061536960208501614fcd565b9150604084013561506f81615f83565b60006020828403121561538a578081fd5b813561500781615f74565b600080604083850312156153a7578182fd5b505080516020909101519092909150565b600080600080606085870312156153cd578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156153f2578384fd5b818701915087601f830112615405578384fd5b813581811115615413578485fd5b886020828501011115615424578485fd5b95989497505060200194505050565b600060208284031215615444578081fd5b815167ffffffffffffffff81111561545a578182fd5b8201601f8101841361546a578182fd5b8051615478614ed882615ee6565b81815285602083850101111561548c578384fd5b610e2c826020830160208601615f26565b6000602082840312156154ae578081fd5b813567ffffffffffffffff808211156154c5578283fd5b90830190608082860312156154d8578283fd5b6040516080810181811083821117156154ed57fe5b6040528235828111156154fe578485fd5b61550a87828601614f51565b8252506020830135915061551d82615f52565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e08284031215615554578081fd5b60405160e0810181811067ffffffffffffffff8211171561557157fe5b60405261557d83614e6b565b815261558b60208401614e6b565b602082015261559c60408401614fcd565b60408201526155ad60608401614e6b565b60608201526080830135608082015260a083013560a08201526155d260c08401614e6b565b60c08201529392505050565b6000602082840312156155ef578081fd5b813567ffffffffffffffff811115615605578182fd5b820160808185031215615007578182fd5b600060e08284031215610836578081fd5b600060a08284031215610836578081fd5b60006101008284031215610836578081fd5b60006020828403121561565b578081fd5b813567ffffffffffffffff80821115615672578283fd5b9083019060408286031215615685578283fd5b60405160408101818110838211171561569a57fe5b6040528235828111156156ab578485fd5b6156b787828601614f51565b825250602083013592506156ca83615f52565b6020810192909252509392505050565b6000806000606084860312156156ee578081fd5b6156f784614f9d565b925061570560208501614f9d565b9150604084015161506f81615f83565b600080600080600080600060e0888a03121561572f578485fd5b875161573a81615f52565b602089015190975061574b81615f74565b955061575960408901614fbb565b945061576760608901614fbb565b935061577560808901614fbb565b925060a088015161578581615f95565b915061579360c08901614f41565b905092959891949750929550565b6000602082840312156157b2578081fd5b61500782614fcd565b6000602082840312156157cc578081fd5b5035919050565b6000602082840312156157e4578081fd5b5051919050565b600080604083850312156157fd578182fd5b82359150602083013561580f81615f52565b809150509250929050565b6000806000806080858703121561582f578182fd5b84359350602085013561584181615f52565b925060408501359150606085013561511681615f52565b60008060006060848603121561586c578081fd5b8335925060208401359150604084013561506f81615f52565b60008060008060006080868803121561589c578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158c0578384fd5b6158cc88828901614e76565b90945092505060608601356150ca81615f52565b600080600080608085870312156158f5578182fd5b845161590081615f83565b8094505060208501518060060b8114615917578283fd5b604086015190935061592881615f52565b915061528260608601614f41565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452615968816020860160208601615f26565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a32818460208701615f26565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615acb60a0830184615950565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615b6d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b5b858351615950565b94509285019290850190600101615b21565b5092979650505050505050565b6000602082526150076020830184615950565b6020810160058310615b9b57fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d0c828451615936565b6020830151615d1e6020840182615936565b506040830151615d3160408401826159a1565b506060830151615d44606084018261599a565b506080830151615d57608084018261599a565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615d9582850182615936565b505061014092830151919092015290565b600060208252825160406020840152615dc26060840182615950565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152613ef86080830184615950565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615e75578283fd5b83018035915067ffffffffffffffff821115615e8f578283fd5b602001915036819003821315613fa057600080fd5b60405181810167ffffffffffffffff81118282101715615ec057fe5b604052919050565b600067ffffffffffffffff821115615edc57fe5b5060209081020190565b600067ffffffffffffffff821115615efa57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f41578181015183820152602001615f29565b83811115610c555750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461147957600080fd5b8060020b811461147957600080fd5b63ffffffff8116811461147957600080fd5b60ff8116811461147957600080fdfea164736f6c6343000706000a'; + return + hex'6101006040526000196000553480156200001857600080fd5b5060405162006135380380620061358339810160408190526200003b9162000087565b6001600160601b0319606094851b811660805291841b821660a05291831b811660c052911b1660e052620000e3565b80516001600160a01b03811681146200008257600080fd5b919050565b600080600080608085870312156200009d578384fd5b620000a8856200006a565b9350620000b8602086016200006a565b9250620000c8604086016200006a565b9150620000d8606086016200006a565b905092959194509250565b60805160601c60a05160601c60c05160601c60e05160601c615fb162000184600039806102c15280610b3c52806112ad52806113d7528061147e52806116af52806117d95280612d8f5280612def5280612e70525080611e4c52806124df5280613cdb52508061166f5280611b1a5280611e9c52806132a6525080610c625280610d365280610fe2528061164b5280612fc252806131855250615fb16000f3fe6080604052600436106102a45760003560e01c80639b2c0a371161016e578063dee00f35116100cb578063f100b2051161007f578063f2d5d56b11610064578063f2d5d56b1461066e578063f3995c6714610681578063fa461e33146106945761034f565b8063f100b2051461063b578063f25801a71461064e5761034f565b8063e0e189a0116100b0578063e0e189a0146105f5578063e90a182f14610608578063efdeed8e1461061b5761034f565b8063dee00f35146105b5578063df2ab5bb146105e25761034f565b8063b858183f11610122578063c45a015511610107578063c45a01551461057a578063cab372ce1461058f578063d4ef38de146105a25761034f565b8063b858183f14610554578063c2e3140a146105675761034f565b8063ab3fdd5011610153578063ab3fdd501461051b578063ac9650d81461052e578063b3a2af13146105415761034f565b80639b2c0a37146104f5578063a4a78f0c146105085761034f565b8063472b43f31161021c578063571ac8b0116101d0578063639d71a9116101b5578063639d71a9146104b857806368e0d4e1146104cb578063791b98bc146104e05761034f565b8063571ac8b0146104925780635ae401dc146104a55761034f565b80634961699711610201578063496169971461044a5780634aa4a4fc1461045d5780635023b4df1461047f5761034f565b8063472b43f31461042457806349404b7c146104375761034f565b80631c58db4f116102735780633068c554116102585780633068c554146103eb57806342712a67146103fe5780634659a494146104115761034f565b80631c58db4f146103b85780631f0464d1146103cb5761034f565b806304e45aaf1461035457806309b813461461037d57806311ed56c91461039057806312210e8a146103b05761034f565b3661034f573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461034d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b610367610362366004615543565b6106b4565b6040516103749190615dfd565b60405180910390f35b61036761038b3660046155de565b61083c565b6103a361039e366004615638565b61091c565b6040516103749190615b7a565b61034d610b28565b61034d6103c63660046157bb565b610b3a565b6103de6103d93660046152a7565b610bbe565b6040516103749190615afc565b61034d6103f93660046150d8565b610c48565b61036761040c366004615885565b610c5b565b61034d61041f366004615121565b610e35565b610367610432366004615885565b610ef5565b61034d6104453660046157eb565b6112a9565b61034d6104583660046157bb565b61146f565b34801561046957600080fd5b5061047261147c565b6040516103749190615a3c565b61036761048d366004615616565b6114a0565b61034d6104a0366004614feb565b611589565b6103de6104b33660046152a7565b6115bc565b61034d6104c6366004614feb565b611635565b3480156104d757600080fd5b50610472611649565b3480156104ec57600080fd5b5061047261166d565b61034d61050336600461581a565b611691565b61034d610516366004615121565b6118a7565b61034d610529366004614feb565b61197c565b6103de61053c36600461517c565b6119ba565b6103a361054f3660046152f1565b611b14565b61036761056236600461549d565b611bd2565b61034d610575366004615121565b611d95565b34801561058657600080fd5b50610472611e4a565b61034d61059d366004614feb565b611990565b61034d6105b0366004615858565b611e6e565b3480156105c157600080fd5b506105d56105d036600461500e565b611e7a565b6040516103749190615b8d565b61034d6105f0366004615039565b612027565b61034d61060336600461507a565b61213e565b61034d61061636600461500e565b6122a4565b34801561062757600080fd5b5061034d6106363660046151bc565b6122b3565b6103a3610649366004615627565b612305565b34801561065a57600080fd5b5061034d610669366004615324565b6123a5565b61034d61067c36600461500e565b6123f6565b61034d61068f366004615121565b612402565b3480156106a057600080fd5b5061034d6106af3660046153b8565b61249a565b600080600083608001511415610771575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a082319061071b903090600401615a3c565b60206040518083038186803b15801561073357600080fd5b505afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906157d3565b60808401525b6107ed836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107af939291906159aa565b6040516020818303038152906040528152602001866107ce57336107d0565b305b73ffffffffffffffffffffffffffffffffffffffff1690526125de565b91508260a00151821015610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b60405180910390fd5b50919050565b60006108b0604083018035906108559060208601614feb565b604080518082019091526000908061086d8880615e41565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360209091015261278f565b505060005460608201358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b604080516101608101909152606090610b20907f8831645600000000000000000000000000000000000000000000000000000000908061095f6020870187614feb565b73ffffffffffffffffffffffffffffffffffffffff16815260200185602001602081019061098d9190614feb565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109b860608701604088016157a1565b62ffffff1681526020016109d26080870160608801615379565b60020b81526020016109ea60a0870160808801615379565b60020b8152602090810190610a0a90610a0590880188614feb565b612976565b8152602001610a25866020016020810190610a059190614feb565b815260a0860135602082015260c08601356040820152606001610a4f610100870160e08801614feb565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610a9e9190615cf8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611b14565b90505b919050565b4715610b3857610b383347612a1b565b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ba257600080fd5b505af1158015610bb6573d6000803e3d6000fd5b505050505050565b60608380600143034014610c3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610c3d84846119ba565b91505b509392505050565b610c55848433858561213e565b50505050565b6000610cbb7f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612b6992505050565b600081518110610cc757fe5b6020026020010151905084811115610d0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b610da484846000818110610d1b57fe5b9050602002016020810190610d309190614feb565b33610d9e7f000000000000000000000000000000000000000000000000000000000000000088886000818110610d6257fe5b9050602002016020810190610d779190614feb565b89896001818110610d8457fe5b9050602002016020810190610d999190614feb565b612ca2565b84612d8d565b73ffffffffffffffffffffffffffffffffffffffff821660011415610dcb57339150610dee565b73ffffffffffffffffffffffffffffffffffffffff821660021415610dee573091505b610e2c848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612f6b915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610ed557600080fd5b505af1158015610ee9573d6000803e3d6000fd5b50505050505050505050565b60008086610fab575060018484600081610f0b57fe5b9050602002016020810190610f209190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f589190615a3c565b60206040518083038186803b158015610f7057600080fd5b505afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa891906157d3565b96505b61103685856000818110610fbb57fe5b9050602002016020810190610fd09190614feb565b82610fdb5733610fdd565b305b6110307f00000000000000000000000000000000000000000000000000000000000000008989600081811061100e57fe5b90506020020160208101906110239190614feb565b8a8a6001818110610d8457fe5b8a612d8d565b73ffffffffffffffffffffffffffffffffffffffff83166001141561105d57339250611080565b73ffffffffffffffffffffffffffffffffffffffff831660021415611080573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106110b057fe5b90506020020160208101906110c59190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016110fd9190615a3c565b60206040518083038186803b15801561111557600080fd5b505afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d91906157d3565b905061118d868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612f6b915050565b6112628187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106111bf57fe5b90506020020160208101906111d49190614feb565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b815260040161120c9190615a3c565b60206040518083038186803b15801561122457600080fd5b505afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c91906157d3565b90613270565b92508683101561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b505095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561133257600080fd5b505afa158015611346573d6000803e3d6000fd5b505050506040513d602081101561135c57600080fd5b50519050828110156113cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561146a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b5050505061146a8282612a1b565b505050565b61147981336112a9565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611549608083018035906114b99060608601614feb565b6114c960e0860160c08701614feb565b60405180604001604052808760200160208101906114e79190614feb565b6114f760608a0160408b016157a1565b61150460208b018b614feb565b604051602001611516939291906159aa565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff1681525061278f565b90508160a001358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c0f565b6115b3817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b61147957600080fd5b606083806115c86133cc565b1115610c3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b611640816000613280565b61158957600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000821180156116a2575060648211155b6116ab57600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561173457600080fd5b505afa158015611748573d6000803e3d6000fd5b505050506040513d602081101561175e57600080fd5b50519050848110156117d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b80156118a0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561184a57600080fd5b505af115801561185e573d6000803e3d6000fd5b50505050600061271061187a85846133d090919063ffffffff16565b8161188157fe5b0490508015611894576118948382612a1b565b610bb685828403612a1b565b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561193c57600080fd5b505afa158015611950573d6000803e3d6000fd5b505050506040513d602081101561196657600080fd5b50511015610bb657610bb6868686868686610e35565b611987816000613280565b61199057600080fd5b6115b3817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b60608167ffffffffffffffff811180156119d357600080fd5b50604051908082528060200260200182016040528015611a0757816020015b60608152602001906001900390816119f25790505b50905060005b82811015611b0d5760008030868685818110611a2557fe5b9050602002810190611a379190615e41565b604051611a45929190615a10565b600060405180830381855af49150503d8060008114611a80576040519150601f19603f3d011682016040523d82523d6000602084013e611a85565b606091505b509150915081611aeb57604481511015611a9e57600080fd5b60048101905080806020019051810190611ab89190615433565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d9190615b7a565b80848481518110611af857fe5b60209081029190910101525050600101611a0d565b5092915050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611b5d9190615a20565b6000604051808303816000865af19150503d8060008114611b9a576040519150601f19603f3d011682016040523d82523d6000602084013e611b9f565b606091505b50925090508061083657604482511015611bb857600080fd5b60048201915081806020019051810190611ab89190615433565b600080600083604001511415611ca357600190506000611bf584600001516133f4565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611c4c903090600401615a3c565b60206040518083038186803b158015611c6457600080fd5b505afa158015611c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9c91906157d3565b6040850152505b600081611cb05733611cb2565b305b90505b6000611cc48560000151613425565b9050611d1d856040015182611cdd578660200151611cdf565b305b60006040518060400160405280611cf98b6000015161342d565b81526020018773ffffffffffffffffffffffffffffffffffffffff168152506125de565b60408601528015611d3d578451309250611d369061343c565b8552611d4a565b8460400151935050611d50565b50611cb5565b8360600151831015611d8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c7d565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611e0a57600080fd5b505afa158015611e1e573d6000803e3d6000fd5b505050506040513d6020811015611e3457600080fd5b50511015610bb657610bb6868686868686612402565b7f000000000000000000000000000000000000000000000000000000000000000081565b61146a83338484611691565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611ed8929190615a5d565b60206040518083038186803b158015611ef057600080fd5b505afa158015611f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2891906157d3565b10611f3557506000612021565b611f5f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b15611f6c57506001612021565b611f96837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b15611fa357506002612021565b611fae836000613280565b611fb757600080fd5b611fe1837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613280565b15611fee57506003612021565b612018837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe613280565b1561034f575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561209057600080fd5b505afa1580156120a4573d6000803e3d6000fd5b505050506040513d60208110156120ba57600080fd5b505190508281101561212d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610c5557610c55848383613471565b60008211801561214f575060648211155b61215857600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121c157600080fd5b505afa1580156121d5573d6000803e3d6000fd5b505050506040513d60208110156121eb57600080fd5b505190508481101561225e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610bb657600061271061227383866133d0565b8161227a57fe5b049050801561228e5761228e878483613471565b61229b8786838503613471565b50505050505050565b6122af828233612027565b5050565b6000806122c1868685613646565b915091508362ffffff1681830312610bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c46565b6060610b2063219f5d1760e01b6040518060c001604052808560400135815260200161233d866000016020810190610a059190614feb565b8152602001612358866020016020810190610a059190614feb565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610a9e9190615cb4565b6000806123b28584613859565b915091508362ffffff16818303126118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c46565b6122af82333084613ae1565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610ed557600080fd5b60008413806124a95750600083135b6124b257600080fd5b60006124c08284018461564a565b905060008060006124d484600001516133f4565b9250925092506125067f0000000000000000000000000000000000000000000000000000000000000000848484613cbe565b5060008060008a13612547578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089612578565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115612597576125928587602001513384612d8d565b610ee9565b85516125a290613425565b156125c75785516125b29061343c565b86526125c1813360008961278f565b50610ee9565b80600081905550610ee98487602001513384612d8d565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156126075733935061262a565b73ffffffffffffffffffffffffffffffffffffffff84166002141561262a573093505b600080600061263c85600001516133f4565b9194509250905073ffffffffffffffffffffffffffffffffffffffff8083169084161060008061266d868686613cd4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856126938f613d12565b73ffffffffffffffffffffffffffffffffffffffff8e16156126b5578d6126db565b876126d45773fffd8963efd1fc6a506488495d951d5263988d256126db565b6401000276a45b8d6040516020016126ec9190615da6565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161271b959493929190615a84565b6040805180830381600087803b15801561273457600080fd5b505af1158015612748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276c9190615395565b915091508261277b578161277d565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127b8573393506127db565b73ffffffffffffffffffffffffffffffffffffffff8416600214156127db573093505b60008060006127ed85600001516133f4565b9194509250905073ffffffffffffffffffffffffffffffffffffffff8084169083161060008061281e858786613cd4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856128448f613d12565b60000373ffffffffffffffffffffffffffffffffffffffff8e1615612869578d61288f565b876128885773fffd8963efd1fc6a506488495d951d5263988d2561288f565b6401000276a45b8d6040516020016128a09190615da6565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016128cf959493929190615a84565b6040805180830381600087803b1580156128e857600080fd5b505af11580156128fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129209190615395565b9150915060008361293557818360000361293b565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16612967578b811461296757600080fd5b50505050505050949350505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a08231906129cb903090600401615a3c565b60206040518083038186803b1580156129e357600080fd5b505afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2091906157d3565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310612a9257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612a55565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612af4576040519150601f19603f3d011682016040523d82523d6000602084013e612af9565b606091505b505090508061146a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060600282511015612b7a57600080fd5b815167ffffffffffffffff81118015612b9257600080fd5b50604051908082528060200260200182016040528015612bbc578160200160208202803683370190505b5090508281600183510381518110612bd057fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610c4057600080612c3d87866001860381518110612c1c57fe5b6020026020010151878681518110612c3057fe5b6020026020010151613d44565b91509150612c5f848481518110612c5057fe5b60200260200101518383613e2c565b846001850381518110612c6e57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612c00565b6000806000612cb18585613f02565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612de85750804710155b15612f31577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5557600080fd5b505af1158015612e69573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612eff57600080fd5b505af1158015612f13573d6000803e3d6000fd5b505050506040513d6020811015612f2957600080fd5b50610c559050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612f5f57612f5a848383613471565b610c55565b610c5584848484613ae1565b60005b600183510381101561146a57600080848381518110612f8957fe5b6020026020010151858460010181518110612fa057fe5b6020026020010151915091506000612fb88383613f02565b5090506000612fe87f00000000000000000000000000000000000000000000000000000000000000008585612ca2565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561303657600080fd5b505afa15801561304a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306e91906156da565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146130d05782846130d3565b83835b91509150613114828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b815260040161120c9190615a3c565b9550613121868383613fa7565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461316557826000613169565b6000835b91509150600060028c51038a10613180578a6131c1565b6131c17f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106131b457fe5b6020026020010151612ca2565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906132299086908690869060248101615e06565b600060405180830381600087803b15801561324357600080fd5b505af1158015613257573d6000803e3d6000fd5b50506001909b019a50612f6e9950505050505050505050565b8082038281111561202157600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f0000000000000000000000000000000000000000000000000000000000000000866040516024016132d7929190615ad6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516133609190615a20565b6000604051808303816000865af19150503d806000811461339d576040519150601f19603f3d011682016040523d82523d6000602084013e6133a2565b606091505b5091509150818015610e2c575080511580610e2c575080806020019051810190610e2c919061528d565b4290565b60008215806133eb575050818102818382816133e857fe5b04145b61202157600080fd5b60008080613402848261407d565b925061340f84601461417d565b905061341c84601761407d565b91509193909250565b516042111590565b6060610b20826000602b61426d565b8051606090610b209083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161426d565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061354657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613509565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135a8576040519150601f19603f3d011682016040523d82523d6000602084013e6135ad565b606091505b50915091508180156135db5750805115806135db57508080602001905160208110156135d857600080fd5b50515b6118a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080835185511461365757600080fd5b6000855167ffffffffffffffff8111801561367157600080fd5b506040519080825280602002602001820160405280156136ab57816020015b613698614e34565b8152602001906001900390816136905790505b5090506000865167ffffffffffffffff811180156136c857600080fd5b5060405190808252806020026020018201604052801561370257816020015b6136ef614e34565b8152602001906001900390816136e75790505b50905060005b8751811015613832576000806137318a848151811061372357fe5b602002602001015189613859565b9150915061373e82614454565b85848151811061374a57fe5b60200260200101516000019060020b908160020b8152505061376b81614454565b84848151811061377757fe5b60200260200101516000019060020b908160020b8152505088838151811061379b57fe5b60200260200101518584815181106137af57fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508883815181106137f157fe5b602002602001015184848151811061380557fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff9092169101525050600101613708565b5061383c82614465565b60020b935061384a81614465565b60020b92505050935093915050565b6000806000806138688661454d565b90506000805b82811015613a865760008060006138848b6133f4565b9250925092506000613897848484613cd4565b905060008063ffffffff8d166138c0576138b083614578565b600291820b9350900b9050613962565b6138ca838e614810565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561391b57600080fd5b505afa15801561392f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139539190615715565b50505060029290920b93505050505b600189038714156139a3578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161099506139b2565b6139ac8e61343c565b9d508597505b6000871580613a5357508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a23578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613a53565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613a68579b82019b9a81019a613a73565b828d039c50818c039b505b50506001909501945061386e9350505050565b5082613ad7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613bbe57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b81565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c20576040519150601f19603f3d011682016040523d82523d6000602084013e613c25565b606091505b5091509150818015613c53575080511580613c535750808060200190516020811015613c5057600080fd5b50515b610bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610e2c85613ccf868686614c41565b614cbe565b6000613d0a7f0000000000000000000000000000000000000000000000000000000000000000613d05868686614c41565b614cee565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d4057600080fd5b5090565b6000806000613d538585613f02565b509050600080613d64888888612ca2565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613da957600080fd5b505afa158015613dbd573d6000803e3d6000fd5b505050506040513d6060811015613dd357600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614613e1a578082613e1d565b81815b90999098509650505050505050565b6000808411613e9c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b600083118015613eac5750600082115b613eb557600080fd5b6000613ecd6103e8613ec786886133d0565b906133d0565b90506000613ee16103e5613ec78689613270565b9050613ef86001828481613ef157fe5b0490614e24565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613f3e57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610613f78578284613f7b565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216613fa057600080fd5b9250929050565b600080841161401757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156140275750600082115b61403057600080fd5b600061403e856103e56133d0565b9050600061404c82856133d0565b9050600061406683614060886103e86133d0565b90614e24565b905080828161407157fe5b04979650505050505050565b6000818260140110156140f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561416457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b6000818260030110156141f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561426457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f0110156142e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561435257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b818301845110156143c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b6060821580156143e3576040519150600082526020820160405261444b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561441c578051835260209283019201614404565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b80600281900b8114610b2357600080fd5b6000806000805b84518110156144fa5784818151811061448157fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff168582815181106144ab57fe5b60200260200101516000015160020b02830192508481815181106144cb57fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1682019150808060010191505061446c565b5080828161450457fe5b05925060008212801561451f575080828161451b57fe5b0715155b15611d8e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156145c457600080fd5b505afa1580156145d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fc9190615715565b50939750919550935050600161ffff84161191506146489050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615bd8565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016146849190615dee565b60806040518083038186803b15801561469c57600080fd5b505afa1580156146b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146d491906158e0565b5050915091506146e26133cc565b63ffffffff168263ffffffff16146146fc57849550614807565b60008361ffff1660018561ffff168761ffff1601038161471857fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016147599190615dfd565b60806040518083038186803b15801561477157600080fd5b505afa158015614785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147a991906158e0565b93505092509250806147e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615ba1565b82860363ffffffff811683870360060b816147fe57fe5b059a5050505050505b50505050915091565b60008063ffffffff831661488557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60408051600280825260608201835260009260208301908036833701905050905083816000815181106148b457fe5b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106148dd57fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614978578181015183820152602001614960565b505050509050019250505060006040518083038186803b15801561499b57600080fd5b505afa1580156149af573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160409081528110156149f657600080fd5b8101908080516040519392919084640100000000821115614a1657600080fd5b908301906020820185811115614a2b57600080fd5b8251866020820283011164010000000082111715614a4857600080fd5b82525081516020918201928201910280838360005b83811015614a75578181015183820152602001614a5d565b5050505090500160405260200180516040519392919084640100000000821115614a9e57600080fd5b908301906020820185811115614ab357600080fd5b8251866020820283011164010000000082111715614ad057600080fd5b82525081516020918201928201910280838360005b83811015614afd578181015183820152602001614ae5565b5050505090500160405250505091509150600082600081518110614b1d57fe5b602002602001015183600181518110614b3257fe5b6020026020010151039050600082600081518110614b4c57fe5b602002602001015183600181518110614b6157fe5b60200260200101510390508763ffffffff168260060b81614b7e57fe5b05965060008260060b128015614ba857508763ffffffff168260060b81614ba157fe5b0760060b15155b15614bd3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614c3157fe5b0496505050505050509250929050565b614c49614e4b565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115614c81579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000614cca8383614cee565b90503373ffffffffffffffffffffffffffffffffffffffff82161461202157600080fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d3057600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b8082018281101561202157600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610b2381615f52565b60008083601f840112614e87578182fd5b50813567ffffffffffffffff811115614e9e578182fd5b6020830191508360208083028501011115613fa057600080fd5b600082601f830112614ec8578081fd5b81356020614edd614ed883615ec8565b615ea4565b8281528181019085830183850287018401881015614ef9578586fd5b855b85811015614f345781356fffffffffffffffffffffffffffffffff81168114614f22578788fd5b84529284019290840190600101614efb565b5090979650505050505050565b80518015158114610b2357600080fd5b600082601f830112614f61578081fd5b8135614f6f614ed882615ee6565b818152846020838601011115614f83578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610b2357600080fd5b805161ffff81168114610b2357600080fd5b803562ffffff81168114610b2357600080fd5b8035610b2381615f83565b600060208284031215614ffc578081fd5b813561500781615f52565b9392505050565b60008060408385031215615020578081fd5b823561502b81615f52565b946020939093013593505050565b60008060006060848603121561504d578081fd5b833561505881615f52565b925060208401359150604084013561506f81615f52565b809150509250925092565b600080600080600060a08688031215615091578283fd5b853561509c81615f52565b94506020860135935060408601356150b381615f52565b92506060860135915060808601356150ca81615f52565b809150509295509295909350565b600080600080608085870312156150ed578182fd5b84356150f881615f52565b93506020850135925060408501359150606085013561511681615f52565b939692955090935050565b60008060008060008060c08789031215615139578384fd5b863561514481615f52565b95506020870135945060408701359350606087013561516281615f95565b9598949750929560808101359460a0909101359350915050565b6000806020838503121561518e578182fd5b823567ffffffffffffffff8111156151a4578283fd5b6151b085828601614e76565b90969095509350505050565b600080600080608085870312156151d1578182fd5b843567ffffffffffffffff808211156151e8578384fd5b818701915087601f8301126151fb578384fd5b8135602061520b614ed883615ec8565b82815281810190858301885b858110156152405761522e8e8684358b0101614f51565b84529284019290840190600101615217565b50909950505088013592505080821115615258578384fd5b5061526587828801614eb8565b93505061527460408601614fcd565b915061528260608601614fe0565b905092959194509250565b60006020828403121561529e578081fd5b61500782614f41565b6000806000604084860312156152bb578081fd5b83359250602084013567ffffffffffffffff8111156152d8578182fd5b6152e486828701614e76565b9497909650939450505050565b600060208284031215615302578081fd5b813567ffffffffffffffff811115615318578182fd5b613d0a84828501614f51565b600080600060608486031215615338578081fd5b833567ffffffffffffffff81111561534e578182fd5b61535a86828701614f51565b93505061536960208501614fcd565b9150604084013561506f81615f83565b60006020828403121561538a578081fd5b813561500781615f74565b600080604083850312156153a7578182fd5b505080516020909101519092909150565b600080600080606085870312156153cd578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156153f2578384fd5b818701915087601f830112615405578384fd5b813581811115615413578485fd5b886020828501011115615424578485fd5b95989497505060200194505050565b600060208284031215615444578081fd5b815167ffffffffffffffff81111561545a578182fd5b8201601f8101841361546a578182fd5b8051615478614ed882615ee6565b81815285602083850101111561548c578384fd5b610e2c826020830160208601615f26565b6000602082840312156154ae578081fd5b813567ffffffffffffffff808211156154c5578283fd5b90830190608082860312156154d8578283fd5b6040516080810181811083821117156154ed57fe5b6040528235828111156154fe578485fd5b61550a87828601614f51565b8252506020830135915061551d82615f52565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e08284031215615554578081fd5b60405160e0810181811067ffffffffffffffff8211171561557157fe5b60405261557d83614e6b565b815261558b60208401614e6b565b602082015261559c60408401614fcd565b60408201526155ad60608401614e6b565b60608201526080830135608082015260a083013560a08201526155d260c08401614e6b565b60c08201529392505050565b6000602082840312156155ef578081fd5b813567ffffffffffffffff811115615605578182fd5b820160808185031215615007578182fd5b600060e08284031215610836578081fd5b600060a08284031215610836578081fd5b60006101008284031215610836578081fd5b60006020828403121561565b578081fd5b813567ffffffffffffffff80821115615672578283fd5b9083019060408286031215615685578283fd5b60405160408101818110838211171561569a57fe5b6040528235828111156156ab578485fd5b6156b787828601614f51565b825250602083013592506156ca83615f52565b6020810192909252509392505050565b6000806000606084860312156156ee578081fd5b6156f784614f9d565b925061570560208501614f9d565b9150604084015161506f81615f83565b600080600080600080600060e0888a03121561572f578485fd5b875161573a81615f52565b602089015190975061574b81615f74565b955061575960408901614fbb565b945061576760608901614fbb565b935061577560808901614fbb565b925060a088015161578581615f95565b915061579360c08901614f41565b905092959891949750929550565b6000602082840312156157b2578081fd5b61500782614fcd565b6000602082840312156157cc578081fd5b5035919050565b6000602082840312156157e4578081fd5b5051919050565b600080604083850312156157fd578182fd5b82359150602083013561580f81615f52565b809150509250929050565b6000806000806080858703121561582f578182fd5b84359350602085013561584181615f52565b925060408501359150606085013561511681615f52565b60008060006060848603121561586c578081fd5b8335925060208401359150604084013561506f81615f52565b60008060008060006080868803121561589c578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158c0578384fd5b6158cc88828901614e76565b90945092505060608601356150ca81615f52565b600080600080608085870312156158f5578182fd5b845161590081615f83565b8094505060208501518060060b8114615917578283fd5b604086015190935061592881615f52565b915061528260608601614f41565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452615968816020860160208601615f26565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a32818460208701615f26565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615acb60a0830184615950565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615b6d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b5b858351615950565b94509285019290850190600101615b21565b5092979650505050505050565b6000602082526150076020830184615950565b6020810160058310615b9b57fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d0c828451615936565b6020830151615d1e6020840182615936565b506040830151615d3160408401826159a1565b506060830151615d44606084018261599a565b506080830151615d57608084018261599a565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615d9582850182615936565b505061014092830151919092015290565b600060208252825160406020840152615dc26060840182615950565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152613ef86080830184615950565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615e75578283fd5b83018035915067ffffffffffffffff821115615e8f578283fd5b602001915036819003821315613fa057600080fd5b60405181810167ffffffffffffffff81118282101715615ec057fe5b604052919050565b600067ffffffffffffffff821115615edc57fe5b5060209081020190565b600067ffffffffffffffff821115615efa57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f41578181015183820152602001615f29565b83811115610c555750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461147957600080fd5b8060020b811461147957600080fd5b63ffffffff8116811461147957600080fd5b60ff8116811461147957600080fdfea164736f6c6343000706000a'; } } diff --git a/src/briefcase/deployers/uniswapx/OrderQuoterDeployer.sol b/src/briefcase/deployers/uniswapx/OrderQuoterDeployer.sol new file mode 100644 index 00000000..1727eeeb --- /dev/null +++ b/src/briefcase/deployers/uniswapx/OrderQuoterDeployer.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +import {IReactorCallback} from '../../protocols/uniswapx/interfaces/IReactorCallback.sol'; +import {DeployerHelper} from '../DeployerHelper.sol'; + +library OrderQuoterDeployer { + function deploy() internal returns (IReactorCallback orderQuoter) { + bytes memory initcode_ = abi.encodePacked(initcode()); + orderQuoter = IReactorCallback(DeployerHelper.create2(initcode_)); + } + + /** + * @dev autogenerated - run `./script/util/create_briefcase.sh` to generate current initcode + * + * @notice This initcode is generated from the following contract: + * - Source Contract: src/pkgs/uniswapx/src/lens/OrderQuoter.sol + * - solc: 0.8.30 + * - optimizer_runs: 200 + * - via_ir: false + * - evm_version: cancun + */ +function initcode() internal pure returns (bytes memory) { + return hex'6080604052348015600e575f5ffd5b50610c128061001c5f395ff3fe608060405260043610610036575f3560e01c806341d88d6914610041578063585da628146100765780637671d07b14610097575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b5061006061005b3660046103d2565b6100d7565b60405161006d91906104c4565b60405180910390f35b348015610081575f5ffd5b50610095610090366004610765565b6101a1565b005b3480156100a2575f5ffd5b506100bf6100b13660046108d7565b604081810151909101015190565b6040516001600160a01b03909116815260200161006d565b6100df610234565b604080840151840101516040805180820182528581526020808201869052825190810183525f8152915163034cd62160e21b81526001600160a01b039390931692630d335884926101339291600401610910565b5f604051808303815f87803b15801561014a575f5ffd5b505af192505050801561015b575060015b61019b573d808015610188576040519150601f19603f3d011682016040523d82523d5f602084013e61018d565b606091505b5061019781610206565b9150505b92915050565b81516001146101c25760405162ddd30f60e31b815260040160405180910390fd5b5f825f815181106101d5576101d5610965565b60200260200101516040516020016101ed91906104c4565b6040516020818303038152906040529050805181602001fd5b61020e610234565b60c08251101561022057815182602001fd5b8180602001905181019061019b9190610b2a565b6040805161016081019091525f60a0820181815260c0830182905260e083018290526101008301829052610120830191909152606061014083015281908152604080516060810182525f808252602082810182905292820152910190815260200160608152602001606081526020015f81525090565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156102e0576102e06102aa565b60405290565b604051606081016001600160401b03811182821017156102e0576102e06102aa565b60405160a081016001600160401b03811182821017156102e0576102e06102aa565b604051601f8201601f191681016001600160401b0381118282101715610352576103526102aa565b604052919050565b5f6001600160401b03821115610372576103726102aa565b50601f01601f191660200190565b5f82601f83011261038f575f5ffd5b81356103a261039d8261035a565b61032a565b8181528460208386010111156103b6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156103e3575f5ffd5b82356001600160401b038111156103f8575f5ffd5b61040485828601610380565b92505060208301356001600160401b0381111561041f575f5ffd5b61042b85828601610380565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156104ba57815180516001600160a01b039081168852602080830151818a01526040928301519091169188019190915260609096019590910190600101610475565b5093949350505050565b6020808252825160e08383015280516001600160a01b0390811661010085015291810151821661012084015260408101516101408401526060810151610160840152608081015190911661018083015260a0015160c06101a08301525f906105306101c0840182610435565b90506020840151610561604085018280516001600160a01b0316825260208082015190830152604090810151910152565b506040840151838203601f190160a085015261057d8282610463565b9150506060840151601f198483030160c085015261059b8282610435565b915050608084015160e08401528091505092915050565b5f6001600160401b038211156105ca576105ca6102aa565b5060051b60200190565b6001600160a01b03811681146105e8575f5ffd5b50565b5f60c082840312156105fb575f5ffd5b6106036102be565b90508135610610816105d4565b81526020820135610620816105d4565b602082015260408281013590820152606080830135908201526080820135610647816105d4565b608082015260a08201356001600160401b03811115610664575f5ffd5b61067084828501610380565b60a08301525092915050565b5f6060828403121561068c575f5ffd5b6106946102e6565b905081356106a1816105d4565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126106ce575f5ffd5b81356106dc61039d826105b2565b808282526020820191506020606084028601019250858311156106fd575f5ffd5b602085015b8381101561075b5760608188031215610719575f5ffd5b6107216102e6565b813561072c816105d4565b8152602082810135908201526040820135610746816105d4565b60408201528352602090920191606001610702565b5095945050505050565b5f5f60408385031215610776575f5ffd5b82356001600160401b0381111561078b575f5ffd5b8301601f8101851361079b575f5ffd5b80356107a961039d826105b2565b8082825260208201915060208360051b8501019250878311156107ca575f5ffd5b602084015b838110156108b95780356001600160401b038111156107ec575f5ffd5b850160e0818b03601f19011215610801575f5ffd5b610809610308565b60208201356001600160401b03811115610821575f5ffd5b6108308c6020838601016105eb565b8252506108408b6040840161067c565b602082015260a08201356001600160401b0381111561085d575f5ffd5b61086c8c6020838601016106bf565b60408301525060c08201356001600160401b0381111561088a575f5ffd5b6108998c602083860101610380565b60608301525060e0919091013560808201528352602092830192016107cf565b50945050505060208301356001600160401b0381111561041f575f5ffd5b5f602082840312156108e7575f5ffd5b81356001600160401b038111156108fc575f5ffd5b61090884828501610380565b949350505050565b604081525f835160408084015261092a6080840182610435565b90506020850151603f198483030160608501526109478282610435565b915050828103602084015261095c8185610435565b95945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112610988575f5ffd5b815161099661039d8261035a565b8181528460208386010111156109aa575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60c082840312156109d6575f5ffd5b6109de6102be565b905081516109eb816105d4565b815260208201516109fb816105d4565b602082015260408281015190820152606080830151908201526080820151610a22816105d4565b608082015260a08201516001600160401b03811115610a3f575f5ffd5b61067084828501610979565b5f60608284031215610a5b575f5ffd5b610a636102e6565b90508151610a70816105d4565b81526020828101519082015260409182015191810191909152919050565b5f82601f830112610a9d575f5ffd5b8151610aab61039d826105b2565b80828252602082019150602060608402860101925085831115610acc575f5ffd5b602085015b8381101561075b5760608188031215610ae8575f5ffd5b610af06102e6565b8151610afb816105d4565b8152602082810151908201526040820151610b15816105d4565b60408201528352602090920191606001610ad1565b5f60208284031215610b3a575f5ffd5b81516001600160401b03811115610b4f575f5ffd5b820160e08185031215610b60575f5ffd5b610b68610308565b81516001600160401b03811115610b7d575f5ffd5b610b89868285016109c6565b825250610b998560208401610a4b565b602082015260808201516001600160401b03811115610bb6575f5ffd5b610bc286828501610a8e565b60408301525060a08201516001600160401b03811115610be0575f5ffd5b610bec86828501610979565b60608301525060c091909101516080820152939250505056fea164736f6c634300081e000a'; +} +} diff --git a/src/briefcase/deployers/universal-router/UniversalRouterDeployer.sol b/src/briefcase/deployers/universal-router/UniversalRouterDeployer.sol index 02bb3fbe..73f5337c 100644 --- a/src/briefcase/deployers/universal-router/UniversalRouterDeployer.sol +++ b/src/briefcase/deployers/universal-router/UniversalRouterDeployer.sol @@ -45,6 +45,7 @@ library UniversalRouterDeployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'6102a0806040523461041b5761014081615baf8038038091610021828561043a565b83398101031261041b576040519061014082016001600160401b03811183821017610407576040526100528161045d565b82526100606020820161045d565b602083019081526100736040830161045d565b90604084019182526100876060840161045d565b91606085019283526080840151946080810195865260a08501519360a082019485526100b560c0870161045d565b9660c083019788526100c960e0880161045d565b958660e08501526100f16101206100e36101008b0161045d565b998a6101008801520161045d565b9889610120860152604051976101068961041f565b6001600160a01b03908116895298891660208901908152905194519651604051919991979082169695821695911661013d8861041f565b8752602087019586525192519151905160405190936001600160a01b039384169316608082016001600160401b0381118382101761040757604052815260208101928352604081019182526060810193845260405161019d60408261043a565b600f815260208101906e2ab734bb32b939b0b62937baba32b960891b8252604051916101ca60408461043a565b600183526020830191601960f91b83526101e381610471565b610120526101f084610607565b61014052519020918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261025960c08261043a565b5190206080523060c052516001600160a01b0390811661016052905161018052905181166101a05290516101c0526101e0919091529051811661020052905181166102205290518116610240529051811661026052166102805260405161546f9081610740823960805181614031015260a051816140ee015260c05181614002015260e05181614080015261010051816140a60152610120518161061d0152610140518161064601526101605181818161191f01528181611b020152613d4c0152610180518181816118fe01528181611b240152613d2b01526101a0518161336801526101c051816133bb01526101e0518181816086015281816103a20152818161051d015281816124670152818161298201528181614c8201528181614cf901528181614dcb01528181614f3f01526152d7015261020051818181602401528181611ec8015261202b0152610220518181816115d70152818161221901526137290152610240518181816107380152818161258e015261267a01526102605181818161042a0152612a5001526102805181818161077b01528181612d9901528181612f100152612fb90152f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b0382111761040757604052565b601f909101601f19168101906001600160401b0382119082101761040757604052565b51906001600160a01b038216820361041b57565b908151602081105f146104eb575090601f8151116104ab57602081519101516020821061049c571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b6001600160401b038111610407575f54600181811c911680156105fd575b60208210146105e957601f81116105b7575b50602092601f821160011461055857928192935f9261054d575b50508160011b915f199060031b1c1916175f5560ff90565b015190505f80610535565b601f198216935f8052805f20915f5b86811061059f5750836001959610610587575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f808061057a565b91926020600181928685015181550194019201610567565b5f8052601f60205f20910160051c810190601f830160051c015b8181106105de575061051b565b5f81556001016105d1565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610509565b908151602081105f14610632575090601f8151116104ab57602081519101516020821061049c571790565b6001600160401b03811161040757600154600181811c91168015610735575b60208210146105e957601f8111610702575b50602092601f82116001146106a157928192935f92610696575b50508160011b915f199060031b1c19161760015560ff90565b015190505f8061067d565b601f1982169360015f52805f20915f5b8681106106ea57508360019596106106d2575b505050811b0160015560ff90565b01515f1960f88460031b161c191690555f80806106c4565b919260206001819286850151815501940192016106b1565b60015f52601f60205f20910160051c810190601f830160051c015b81811061072a5750610663565b5f815560010161071d565b90607f169061065156fe60c08060405260043610156100ae575b50361561001a575f80fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314158061007b575b61005357005b7f38bbd576000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141561004d565b5f3560e01c9081631a27b20114610df85750806324856bc314610d495780633593564c14610c6357806344684dc31461079f5780638021fef71461075c578063817122dc1461071957806384b0196e1461060557806391dd7346146104e2578063d04d79a21461044e578063d0c9f6cb1461040b578063d737d0c7146103c6578063dc4c90d3146103835763fa461e3314610149575f61000f565b3461027d57606060031936011261027d5760243560043560443567ffffffffffffffff811161027d57610180903690600401610e54565b5f831391821580610379575b6103515781810160408282031261027d5781359067ffffffffffffffff821161027d576101ba918301613189565b506020810135916001600160a01b03831680930361027d576101db916132a1565b90601790602b8310610329578035968760601c9561020962ffffff8585013560601c9a60481c168a896132f4565b6001600160a01b033391160361030157156102f757508685105b156102395750505061023793503391613408565b005b91935091939482602b0180602b116102e3578410610281575082821161027d578101910390600160ff1b84101561027d576102379361027833916131a7565b613473565b5f80fd5b925050507faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6929291925c82116102bb57610237923391613408565b7f739dbe52000000000000000000000000000000000000000000000000000000005f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b9550848710610223565b7f32b13d91000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3b99b53d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f316cf0eb000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f85131561018c565b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461027d575f60031936011261027d5760207f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c6001600160a01b0360405191168152f35b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461027d575f60031936011261027d5760607fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315c7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5c7f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65c906001600160a01b036040519316835260208301526040820152f35b3461027d57602060031936011261027d5760043567ffffffffffffffff811161027d57610513903690600401610e54565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036105dd5761054c916139e9565b908183036105b5575f5b8381106105895761058560405161056e6020826130fc565b5f8152604051918291602083526020830190610eb3565b0390f35b806105af61059a6001938789610ed8565b3560f81c6105a9838787610f17565b9161420d565b01610556565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461027d575f60031936011261027d576106bd6106417f00000000000000000000000000000000000000000000000000000000000000006137bf565b61066a7f0000000000000000000000000000000000000000000000000000000000000000613919565b60206106cb6040519261067d83856130fc565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e0870190610eb3565b908582036040870152610eb3565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b82811061070257505050500390f35b8351855286955093810193928101926001016106f3565b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b61010060031936011261027d5760043567ffffffffffffffff811161027d576107cc903690600401610e54565b60243567ffffffffffffffff811161027d576107ec903690600401610e82565b91604435608435801515810361027d5760c43567ffffffffffffffff811161027d5761081c903690600401610e54565b9160e435804211610c3b579088916108338961311f565b61084060405191826130fc565b89815261084c8a61311f565b601f196020830191013682375f5b8b8110610be25750604051915160208301929183915f5b818110610bc9575050509361097c9693604293836108a06109859b99956109769903601f1981018352826130fc565b5190209115610bb7576001600160a01b036108bf33945b8d3691613153565b60208151910120936040519360208501957f4b503a2e339bf072a489301f3eec7abaefc520266c462796ed9267bbcc6e407c8752604086015260608501528b608085015260643560a08501521660c083015260a43560e08301526101008201526101008152610930610120826130fc565b51902061093b613ff8565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015220923691613153565b90614114565b9092919261414e565b5f1960a43503610b20575b7fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315d7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5d6064357f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65d333014610b12576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610aea57610a5b93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610f32565b5f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d5b5f7fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315d5f7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5d5f7f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65d005b7f6f5ffb7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b610b1b93610f32565b610a7f565b6001600160a01b038116805f52600260205260405f2060a4355f5260205260ff60405f205416610b8f575f52600260205260405f2060a4355f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055610990565b7f1fb09b80000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b036108bf5f946108b7565b825184528f985060209384019390920191600101610871565b909192939450610bfd610bf6828d8d610f17565b3691613153565b60208151910120908351811015610c275760019160208260051b8601015201908b9493929161085a565b634e487b7160e01b5f52603260045260245ffd5b7f5bf6f916000000000000000000000000000000000000000000000000000000005f5260045ffd5b606060031936011261027d5760043567ffffffffffffffff811161027d57610c8f903690600401610e54565b60243567ffffffffffffffff811161027d57610caf903690600401610e82565b916044354211610c3b57333014610d40576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610aea57610d1b93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610f32565b5f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d005b61023793610f32565b604060031936011261027d5760043567ffffffffffffffff811161027d57610d75903690600401610e54565b60243567ffffffffffffffff811161027d57610d95903690600401610e82565b91333014610d40576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610aea57610d1b93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610f32565b3461027d57604060031936011261027d57600435906001600160a01b03821680920361027d576020915f526002825260405f206024355f52825260ff60405f20541615158152f35b35906001600160a01b038216820361027d57565b9181601f8401121561027d5782359167ffffffffffffffff831161027d576020838186019501011161027d57565b9181601f8401121561027d5782359167ffffffffffffffff831161027d576020808501948460051b01011161027d57565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90821015610c27570190565b903590601e198136030182121561027d570180359067ffffffffffffffff821161027d5760200191813603831361027d57565b90821015610c2757610f2e9160051b810190610ee4565b9091565b92908082036130b8579291905f915b848310610f4f575050505050565b9091929394610f5f848787610ed8565b3592610f6c858285610f17565b979092606097607f8760f81c1695600196602181105f14612ae657601081101561240157600881101561186a57806112fc5750610fae60208701359b876132c9565b95906080880135156112f5577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c9c5b610fe88935613609565b9d918881608052600160ff1b8314611282575b50505b604260a052602b600160ff1b82101561027d5760a0518f908a1061127c575030915b89821161027d576040916001600160a01b035f60805135956110f861108f6110a3856110658b60601c6017608051013560601c62ffffff8183109e60481c16916132f4565b16968a8614611261576401000276a49b5b878b519485938d602086015260608501906080516131b7565b91168b83015203601f1981018352826130fc565b8488519a8b98899788967f128acb080000000000000000000000000000000000000000000000000000000088521660048701528b6024870152604486015216606484015260a0608484015260a4830190610eb3565b03925af1908115611256575f905f9261121a575b61111c93501561121357506131a7565b60a05190969081106111635730908060171161027d576080805160170190527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90196610ffe565b50979396929a509794909893604090910135116111eb575b1590816111dc575b50611195575060010191909392610f41565b906111d86040519283927f2c4029e90000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190610eb3565b0390fd5b600160ff1b915016155f611183565b7f39d35496000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506131a7565b9150506040823d821161124e575b81611235604093836130fc565b8101031261027d5781602061111c93519101519161110c565b3d9150611228565b6040513d5f823e3d90fd5b73fffd8963efd1fc6a506488495d951d5263988d259b611076565b91611020565b601491925010610329576020602491604051928380926370a0823160e01b82523060048301523560601c5afa908115611256575f916112c4575b505f80610ffb565b90506020813d82116112ed575b816112de602093836130fc565b8101031261027d57515f6112bc565b3d91506112d1565b309c610fde565b6001819c929a97939b96999598949c145f14611419575090611323602082013592826132c9565b608083013515611412577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b604061135d8535613609565b9401357faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6925d600160ff1b85101561027d5761139b93610278866131a7565b9091901561140357506113ad906131a7565b036113db575f7faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6925d5b61117b565b7fd4e0248e000000000000000000000000000000000000000000000000000000005f5260045ffd5b61140d91506131a7565b6113ad565b3091611351565b6002810361146357506113d691604081013591507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c61145c6020830135613609565b913561371d565b9394919390929060038103611633575050508135820163ffffffff60208401351683019163ffffffff83351693602080850194860101910110611626577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c92604051926001600160a01b0360208501957f2a2d80d10000000000000000000000000000000000000000000000000000000087521660248501526060604485015260e48401928035601e198236030181121561027d5781016020813591019467ffffffffffffffff821161027d578160071b3603861361027d5781906060608489015252610104860194905f905b80821061160857505050936115bc5f969482946115ca946040896001600160a01b0361158060208e9d01610e40565b1660a4880152013560c48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8584030160648601526131b7565b03601f1981018352826130fc565b5190826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131d7565b9161117b565b9091956080808261161b6001948b613246565b019701920190611551565b633b99b53d5f526004601cfd5b919493909250906004810361176657506116506020820135613609565b906001600160a01b038060408301351691351680155f146116b95750479081106116915780611681575b505061117b565b61168a91613aa0565b5f8061167a565b7f6a12f104000000000000000000000000000000000000000000000000000000005f5260045ffd5b91604051916370a0823160e01b8352306004840152602083602481875afa928315611256575f93611733575b50821061170b57816116fa575b50505061117b565b61170392613f49565b5f80806116f2565b7f675cae38000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d821161175e575b8161174e602093836130fc565b8101031261027d5751915f6116e5565b3d9150611741565b6005810361178d57508060406113d6920135906117866020820135613609565b9035613683565b6006810361183f57506040810135906001600160a01b036117b16020830135613609565b913516806117cd57506117c76113d69247613f07565b90613aa0565b906040516370a0823160e01b8152306004820152602081602481865afa908115611256575f9161180c575b506113d69361180691613f07565b91613f49565b90506020813d8211611837575b81611826602093836130fc565b8101031261027d57516113d66117f8565b3d9150611819565b7fd76a1e9e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6008819c929a97939b96999598949c145f14611ab45750611890602083013591836135d1565b90608084013515611aad577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b6118c98535613609565b928215610c27576118d9826135f5565b8360011015610c27576118fb611943916118f5602086016135f5565b90614afa565b907f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614b18565b948581611a93575b5050505f1982018281116102e35761197461196f6001600160a01b03928585613666565b6135f5565b1693604051926370a0823160e01b84526001600160a01b038516928360048601526020856024818a5afa948515611256575f95611a56575b50946119bc929160209596613b5e565b6024604051809581936370a0823160e01b835260048301525afa918215611256575f92611a22575b5060406119f49293013592613676565b101561117b577f849eaf98000000000000000000000000000000000000000000000000000000005f5260045ffd5b91506020823d8211611a4e575b81611a3c602093836130fc565b8101031261027d5790519060406119e4565b3d9150611a2f565b92919450946020833d8211611a8b575b81611a73602093836130fc565b8101031261027d5791519194919390916119bc6119ac565b3d9150611a66565b611aa592611aa0856135f5565b613408565b5f808561194b565b30916118bf565b60098103611d9a5750611ac790826135d1565b608083013515611d93577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b611aff8435613609565b917f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000955f9560028510611d6b576020820135975f1986018681116102e3579190825b611bb957505050604001358611611b91578215610c27576113d69585611b8c92611aa0856135f5565b613b5e565b7f8ab0bc16000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919897505f198901978989116102e357611bdb61196f611bfd9a8989613666565b611bf2611bec61196f8d8b8b613666565b82614afa565b8185879d939d614b18565b90604051907f0902f1ac0000000000000000000000000000000000000000000000000000000082526060826004816001600160a01b0387165afa918215611256575f905f93611d1b575b506001600160a01b036dffffffffffffffffffffffffffff8082931694169d169116145f14611d155799905b9980158015611d0d575b611ce55782611c8b91613ed6565b916103e88302928084046103e814901517156102e357611caa91613676565b6103e58102908082046103e514901517156102e357611cc891613ee9565b600181018091116102e3579880156102e3575f1901919082611b63565b7f7b9c8916000000000000000000000000000000000000000000000000000000005f5260045ffd5b508115611c7d565b90611c73565b6dffffffffffffffffffffffffffff8094506001600160a01b039250611d58839260603d8111611d64575b611d5081836130fc565b810190613b28565b50959093505050611c47565b503d611d46565b7f20db8267000000000000000000000000000000000000000000000000000000005f5260045ffd5b3091611af5565b93949193909290600a8103611e815750505063ffffffff60c08301351682019063ffffffff82351690836020808501948401019101106116265760a06115ca5f946115bc86957f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c956040519586946001600160a01b0360208701997f2b67b570000000000000000000000000000000000000000000000000000000008b52166024870152611e4c6044870182613246565b6001600160a01b03611e6060808301610e40565b1660c4870152013560e48501526101006101048501526101248401916131b7565b91949390929091600b810361200c575050611ea160208201359135613609565b81600160ff1b8103611fdd57504791505b81611ebe57505061117b565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b1561027d576040517fd0e30db00000000000000000000000000000000000000000000000000000000081525f8160048185885af1801561125657611fcd575b50306001600160a01b03831603611f42575b5061167a565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152602482015290602090829060449082905f905af1801561125657611f9f575b8080611f3c565b611fbf9060203d8111611fc6575b611fb781836130fc565b81019061364e565b505f611f98565b503d611fad565b5f611fd7916130fc565b5f611f2a565b471015611eb2577f6a12f104000000000000000000000000000000000000000000000000000000005f5260045ffd5b600c81036121435750506120208135613609565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916370a0823160e01b8352306004840152602083602481855afa928315611256575f9361210f575b50602001358210611691578161208e5750505061117b565b803b1561027d575f80916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528760048401525af18015611256576120ff575b50306001600160a01b038316036120ef575b806116f2565b6120f891613aa0565b5f806120e9565b5f612109916130fc565b5f6120d7565b9092506020813d821161213b575b8161212a602093836130fc565b8101031261027d5751916020612076565b3d915061211d565b600d819c939c9b929597989b99949699145f1461232f57508a358b01988935946121756020808d019e8d0301876133fb565b11610329576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c169a935f5b86811015612201578c6001600160a01b036121cb60208f8560071b01016135f5565b16036121d9576001016121a9565b7fe7002877000000000000000000000000000000000000000000000000000000005f5260045ffd5b50989593979694929b919a5098506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690813b1561027d576040517f0d58b1db000000000000000000000000000000000000000000000000000000008152602060048201526024810184905292839160448301915f905b8082106122b55750505091815f81819503925af18015611256576122a5575b5061117b565b5f6122af916130fc565b5f61229f565b919350916080806001926001600160a01b036122d088610e40565b1681526001600160a01b036122e760208901610e40565b1660208201526001600160a01b0361230160408901610e40565b1660408201526001600160a01b0361231b60608901610e40565b166060820152019401920185939291612280565b80929b93989550600e919a97969450145f1461183f5750604051906370a0823160e01b82526001600160a01b0381351660048301526020826024816001600160a01b0384860135165afa918215611256575f926123cd575b50604001351115806113d65791506040517fa3281672000000000000000000000000000000000000000000000000000000006020820152600481526116026024826130fc565b9091506020813d82116123f9575b816123e8602093836130fc565b8101031261027d5751906040612387565b3d91506123db565b6010819c929a97939b96999598949c145f1461250f575061245a915f9160405193849283927f48c894910000000000000000000000000000000000000000000000000000000084526020600485015260248401916131b7565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561125657612499575061117b565b3d805f833e6124a881836130fc565b81019060208183031261027d5780519067ffffffffffffffff821161027d570181601f8201121561027d5780516124de81613137565b926124ec60405194856130fc565b8184526020828401011161027d575f928160208094018483015e0101525f61229f565b80929495506011919350145f146125e45750907fffffffff000000000000000000000000000000000000000000000000000000008135167f7ac2ff7b0000000000000000000000000000000000000000000000000000000081036125b95750815f92918392604051928392833781018381520390826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131d7565b7ff801e525000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b601281036128bc57507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c917fffffffff000000000000000000000000000000000000000000000000000000008135167f0c49ccbe0000000000000000000000000000000000000000000000000000000081148015612893575b801561286a575b156125b9575060048101356001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936040517f6352211e000000000000000000000000000000000000000000000000000000008152826004820152602081602481895afa908115611256576001600160a01b039182915f9161284c575b50169116908082149182156127c5575b8215612754575b505015612729575091815f809481946040519384928337810182815203925af1906116026131d7565b7fbb25d4c5000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b909150604051917fe985e9c500000000000000000000000000000000000000000000000000000000835260048301526024820152602081604481885afa908115611256575f916127a7575b505f80612700565b6127bf915060203d8111611fc657611fb781836130fc565b5f61279f565b91506040517f081812fc0000000000000000000000000000000000000000000000000000000081528360048201526020816024818a5afa9081156112565783916001600160a01b03915f9161281e575b501614916126f9565b61283f915060203d8111612845575b61283781836130fc565b810190613a81565b5f612815565b503d61282d565b612864915060203d81116128455761283781836130fc565b5f6126e9565b507f42966c68000000000000000000000000000000000000000000000000000000008114612665565b507ffc6f786500000000000000000000000000000000000000000000000000000000811461265e565b601381036129ad5750505f80916040516001600160a01b0360a060208301937f6276cbbe0000000000000000000000000000000000000000000000000000000085528261290882610e40565b1660248501528261291b60208301610e40565b16604485015262ffffff61293160408301613206565b16606485015261294360608201613216565b60020b60848501528261295860808301610e40565b1660a485015201351660c482015260c4815261297560e4826130fc565b5190826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131d7565b6014810361183f57507fffffffff000000000000000000000000000000000000000000000000000000008235167fdd46508f0000000000000000000000000000000000000000000000000000000081036125b957508060041161027d57612a24612a1e6003198301600485016132a1565b906132a1565b5f5b818110612a7b575050505f9182914791816040519283928337810184815203916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131d7565b612a86818385610ed8565b3560f81c8015908115612adb575b8115612ad0575b50612aa857600101612a26565b7f5d1d0f9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b60039150145f612a9b565b600181149150612a94565b90989591996040829c949c999699989598105f14612c2f57506021810361183f575090612b12916139e9565b612b556040959395519460208601967f24856bc30000000000000000000000000000000000000000000000000000000088526040602488015260648701916131b7565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc858503016044860152818452602084019160208160051b86010194845f90601e19813603015b848310612bd35750505050505050509181612bc45f9493859403601f1981018352826130fc565b519082305af1906116026131d7565b9091929394959697601f1985820301885288358281121561027d578301906020823592019167ffffffffffffffff811161027d57803603831361027d57612c1f60209283928b956131b7565b9a01980196959493019190612b9d565b949392906040810361183f575081019060208183031261027d5780359067ffffffffffffffff821161027d5701906101a08282031261027d57604051906101a0820182811067ffffffffffffffff8211176130a457604052612c9083610e40565b8252612c9e60208401610e40565b60208301908152612cb160408501610e40565b6040840152612cc1878501610e40565b8784015260808301926080850135845260a085013560a082015260c081019260c08601358452612cf360e08701610e40565b9560e08301968752612d0861010082016135c0565b610100840152612d1b61012082016135c0565b610120840152612d2e61014082016135c0565b61014084015261016081013567ffffffffffffffff811161027d5761018092612d58918301613189565b6101608401520135938415159081860361027d57610180830195865251945f91600160ff1b8714613022575b505115612ec3575083915b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016946001600160a01b0380845116925116926001600160a01b03604082015116956001600160a01b038c83015116986001600160a01b0360a0840151925191511663ffffffff610100850151169163ffffffff610120860151169361016063ffffffff61014088015116960151968c3b1561027d576040519d8e9c8d9b8c9b7f7b939232000000000000000000000000000000000000000000000000000000008d5260048d015260248c015260448b015260648a0152608489015260a488015260c487015260e4860152610104850152610124840152610144830152610164820161018090526101848201612eac91610eb3565b03915a945f95f18015611256576122a5575061117b565b916001600160a01b0360408301511660405160205f8183017f095ea7b3000000000000000000000000000000000000000000000000000000008152612f5d84612f4f8c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248401602090939291936001600160a01b0360408201951681520152565b03601f1981018652856130fc565b83519082865af1893d5f519083613005575b50505015612f7f575b5050612d8f565b612ffe91612ff96040517f095ea7b30000000000000000000000000000000000000000000000000000000060208201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201525f604482015260448152612ff36064826130fc565b82614a8d565b614a8d565b5f80612f78565b9192509061301c575050813b15155b895f80612f6f565b14613014565b909550156130335747945b5f612d84565b602460206001600160a01b03604085015116604051928380926370a0823160e01b82523060048301525afa908115611256575f91613073575b509461302d565b90506020813d821161309c575b8161308d602093836130fc565b8101031261027d57515f61306c565b3d9150613080565b634e487b7160e01b5f52604160045260245ffd5b7fff633a38000000000000000000000000000000000000000000000000000000005f5260045ffd5b60a0810190811067ffffffffffffffff8211176130a457604052565b90601f601f19910116810190811067ffffffffffffffff8211176130a457604052565b67ffffffffffffffff81116130a45760051b60200190565b67ffffffffffffffff81116130a457601f01601f191660200190565b92919261315f82613137565b9161316d60405193846130fc565b82948184528183011161027d578281602093845f960137010152565b9080601f8301121561027d578160206131a493359101613153565b90565b600160ff1b81146102e3575f0390565b601f8260209493601f1993818652868601375f8582860101520116010190565b3d15613201573d906131e882613137565b916131f660405193846130fc565b82523d5f602084013e565b606090565b359062ffffff8216820361027d57565b35908160020b820361027d57565b9081602091031261027d575190565b359065ffffffffffff8216820361027d57565b65ffffffffffff61329b606080936001600160a01b0361326582610e40565b1686526001600160a01b0361327c60208301610e40565b1660208701528361328f60408301613233565b16604087015201613233565b16910152565b909163ffffffff82351682019263ffffffff8435169260208086019585010191011061162657565b909163ffffffff60608301351682019263ffffffff8435169260208086019585010191011061162657565b906001600160a01b0392838216848416116133f3575b62ffffff908460405193816020860196168652166040840152166060820152606081526133386080826130fc565b5190206040517fff00000000000000000000000000000000000000000000000000000000000000602082019081527f000000000000000000000000000000000000000000000000000000000000000060601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201929092527f000000000000000000000000000000000000000000000000000000000000000060558201526133ec81607581016115bc565b5190201690565b90919061330a565b919082018092116102e357565b909291906001600160a01b0384163003613428576134269350613683565b565b91926001600160a01b03841161344b576001600160a01b0361342694169261371d565b7fc4bd89a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b939290602b8210610329578235938460601c92601785013560601c9380851094859760481c62ffffff16906134a7926132f4565b6001600160a01b031692845f146040966001600160a01b0380956135045f96613557956135a5576401000276a4925b846134f08e51978f948995602087015260608601916131b7565b91168d83015203601f1981018552846130fc565b89519b8c998a9889977f128acb080000000000000000000000000000000000000000000000000000000089521660048801526024870152604486015216606484015260a0608484015260a4830190610eb3565b03925af18015611256575f925f9161356e57509192565b9250506040823d60401161359d575b8161358a604093836130fc565b8101031261027d57602082519201519192565b3d915061357d565b73fffd8963efd1fc6a506488495d951d5263988d25926134d6565b359063ffffffff8216820361027d57565b9160608301358301916135ee6020843595818601950301856133fb565b1161032957565b356001600160a01b038116810361027d5790565b6001600160a01b038116600181036136425750507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90565b6002036131a457503090565b9081602091031261027d5751801515810361027d5790565b9190811015610c275760051b0190565b919082039182116102e357565b9091906001600160a01b03168061369e575061342691613aa0565b600160ff1b82146136b4575b9161342692613f49565b9050604051916370a0823160e01b8352306004840152602083602481855afa8015611256575f906136e9575b909250906136aa565b506020833d602011613715575b81613703602093836130fc565b8101031261027d5761342692516136e0565b3d91506136f6565b91926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b1561027d575f6001600160a01b039384829681608496816040519b8c9a8b997f36c78516000000000000000000000000000000000000000000000000000000008b521660048a01521660248801521660448601521660648401525af18015611256576137b55750565b5f613426916130fc565b60ff811461381e5760ff811690601f82116137f657604051916137e36040846130fc565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f80548060011c916001821691821561390f575b6020841083146138fb5783855284929081156138be5750600114613861575b6131a4925003826130fc565b505f80805290917f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8183106138a25750509060206131a492820101613855565b602091935080600191548385880101520191019091839261388a565b602092506131a49491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101613855565b634e487b7160e01b5f52602260045260245ffd5b92607f1692613836565b60ff811461393d5760ff811690601f82116137f657604051916137e36040846130fc565b506040515f6001548060011c91600182169182156139df575b6020841083146138fb5783855284929081156138be5750600114613980576131a4925003826130fc565b5060015f90815290917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b8183106139c35750509060206131a492820101613855565b60209193508060019154838588010152019101909183926139ab565b92607f1692613956565b604081351891606082019363ffffffff6040840135169363ffffffe0601f8601169060608201602086013518179084019260608401359463ffffffff861694641fffffffe0608082019760051b1680915f925b808410613a5457506080925001019101101761162657565b90916020809163ffffffe0601f60808089890101359b848d18179b88010135011601019301929190613a3c565b9081602091031261027d57516001600160a01b038116810361027d5790565b5f80809381935af115613aaf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152fd5b51906dffffffffffffffffffffffffffff8216820361027d57565b9081606091031261027d57613b3c81613b0d565b916040613b4b60208401613b0d565b92015163ffffffff8116810361027d5790565b9160028210613eae578115610c2757613b76836135f5565b8260011015610c2757613b92906118f5602086979596016135f5565b50925f198101937ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8201955f90602093601f198501965b888410613bdc5750505050505050505050565b613bea61196f858486613666565b946001600160a01b03613c0461196f600188018688613666565b921695604051917f0902f1ac0000000000000000000000000000000000000000000000000000000083526060836004818b5afa91821561125657895f945f94613e68575b506001600160a01b03806dffffffffffffffffffffffffffff80602496979816971693169416841494855f14613e625791935b604051938480926370a0823160e01b82528d60048301525afa918215611256575f92613e33575b5080820392811592838015613e2b575b611ce557826103e586029586046103e514911417156102e357613cd59084613ed6565b916103e882029182046103e81417156102e357613cfb92613cf5916133fb565b90613ee9565b9015613e24575f90915b8b861015613e1b5790613d26613d70926118f561196f60028a01888a613666565b8193917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614b18565b915b9660405190613d818a836130fc565b5f82528b368b840137803b1561027d57613def945f8094604051978895869485937f022c0d9f000000000000000000000000000000000000000000000000000000008552600485015260248401526001600160a01b0389166044840152608060648401526084830190610eb3565b03925af191821561125657600192613e0b575b50930192613bc9565b5f613e15916130fc565b5f613e02565b5087905f613d72565b5f91613d05565b508115613cb2565b9091508981813d8311613e5b575b613e4b81836130fc565b8101031261027d5751905f613ca2565b503d613e41565b93613c7b565b6dffffffffffffffffffffffffffff955060249394506001600160a01b0386613e9f829360603d8111611d6457611d5081836130fc565b50989098979650505050613c48565b7fae52ad0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b818102929181159184041417156102e357565b8115613ef3570490565b634e487b7160e01b5f52601260045260245ffd5b6127108211613f215761271091613f1d91613ed6565b0490565b7fdeaa01e6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f9182604492602095604051937fa9059cbb000000000000000000000000000000000000000000000000000000008552600485015260248401525af13d15601f3d1160015f511416171615613f9a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163014806140eb575b15614053577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526140e560c0826130fc565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461402a565b81519190604183036141445761413d9250602082015190606060408401519301515f1a90614be1565b9192909190565b50505f9160029190565b60048110156141f95780614160575050565b60018103614190577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b600281036141c457507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146141ce5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b929190600b8410156148bb57600784036144605761422c92935061504c565b602081019061423b828261505a565b5f93915080614249846135f5565b9261425660608601614fb9565b6fffffffffffffffffffffffffffffffff811615614449575b604086019161427e838861505a565b80151595869250908261443e575b5050614416575f9591949395945b84861061431d57505050505050506080016fffffffffffffffffffffffffffffffff806142c683614fb9565b1692169182106142d4575050565b6142ee6fffffffffffffffffffffffffffffffff91614fb9565b7f8b063d73000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b86985061437d6143786fffffffffffffffffffffffffffffffff9261435a6143538a61434d888f9e9c9d9e61505a565b90615090565b968761536a565b949091169361436c6080880188610ee4565b929091865f03916151e4565b615443565b9861439b575b50600161439089936135f5565b96019493959161429a565b6143c290670de0b6b3a76400006fffffffffffffffffffffffffffffffff8b169102613ee9565b6143d6876143d0868b61505a565b90613666565b358082116143e45750614383565b877fa9b7edf7000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7f947446a5000000000000000000000000000000000000000000000000000000005f5260045ffd5b14159050855f61428c565b5061445b61445685614c7b565b61519f565b61426f565b6006840361455757614473929350614faa565b61447f60c08201614fb9565b6fffffffffffffffffffffffffffffffff811615614506575b6144e961437860e0926144c86fffffffffffffffffffffffffffffffff6144c160a08801614fd6565b92166131a7565b906144d7610100870187610ee4565b9290916144e43689614fe3565b6151e4565b91016fffffffffffffffffffffffffffffffff806142c683614fb9565b5061451360a08201614fd6565b1561453d5760e06144e961437861453461445661452f866135f5565b614c7b565b92505050614498565b60e06144e961437861453461445661452f602087016135f5565b6009840361476e5761456a92935061504c565b6020810190614579828261505a565b90505f9261458960608401614fb9565b91614593846135f5565b926fffffffffffffffffffffffffffffffff81161561475c575b6040850190826145bd838861505a565b801515958692509082614751575b505061441657949093929493845b614658575050505050506080016fffffffffffffffffffffffffffffffff8061460183614fb9565b16921691821161460f575050565b6146296fffffffffffffffffffffffffffffffff91614fb9565b7f12bacdd3000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b8597506fffffffffffffffffffffffffffffffff6146bc6146b261435393614695614687898d9c9a9b9c61505a565b96905f198d01978891615090565b9490911693846146a86080890189610ee4565b93909215906151e4565b600f0b5f0361519f565b986146dc575b50505f196146d088926135f5565b950193929490846145d9565b61470290670de0b6b3a76400006fffffffffffffffffffffffffffffffff8b1602613ee9565b90614711816143d0868b61505a565b359081831161472057506146c2565b7fe6518043000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b14159050815f6145cb565b5061476961445684614f38565b6145ad565b600884146147a5575050505b7f5cda29d7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6147b0929350614faa565b6147bc60c08201614fb9565b6fffffffffffffffffffffffffffffffff811615614840575b61482361445661481b6fffffffffffffffffffffffffffffffff60e0946147fe60a08801614fd6565b61480c610100890189610ee4565b93909216906144e4368a614fe3565b600f0b6131a7565b91016fffffffffffffffffffffffffffffffff8061460183614fb9565b5061484d60a08201614fd6565b156148905760e061482361445661481b6fffffffffffffffffffffffffffffffff614885614456614880602089016135f5565b614f38565b9450505050506147d5565b60e061482361445661481b6fffffffffffffffffffffffffffffffff614885614456614880886135f5565b92600c810361493f57506148cf9192614f25565b906148d981614f38565b9180831161490f575090613426917f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90614db9565b90507f12bacdd3000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b600f81036149c257506149529192614f25565b9061495c81614c7b565b91808310614992575090613426917f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90614ce7565b90507f8b063d73000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b600b8103614a1b57506149d9906134269293614c63565b15614a1057614a0a827f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c92614d94565b91614db9565b614a0a823092614d94565b600e8103614a4e5750614a42614a38614a48926134269495614c63565b9282949291613609565b92614d80565b91614ce7565b9260108414614a5f5750505061477a565b613426929350614a75614a7e92614a4892614c63565b92919390613609565b91614a8884614c7b565b613f07565b905f602091828151910182855af115611256575f513d614af157506001600160a01b0381163b155b614abc5750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415614ab5565b6001600160a01b0382166001600160a01b038216105f14610f2e5791565b916133ec906001600160a01b03947fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519181602084019460601b16845260601b16603482015260288152614b6f6048826130fc565b5190206115bc604051938492602084019687917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614c58579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611256575f516001600160a01b03811615614c4e57905f905f90565b505f906001905f90565b5050505f9160039190565b90606011611626578035916040602083013592013590565b614ca681307f00000000000000000000000000000000000000000000000000000000000000006150d0565b905f8212614cb2575090565b6001600160a01b03907f4c085bf1000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90918015614d7b576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b1561027d575f92836064926001600160a01b03948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015611256576137b55750565b505050565b9081614d90576131a49150614c7b565b5090565b90600160ff1b8203614daa576131a4915061515d565b81614d90576131a49150614f38565b5f918315614f1f576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b1561027d576001600160a01b03604051917fa584119400000000000000000000000000000000000000000000000000000000835216908160048201525f8160248183885af1801561125657614f0a575b5080614ebd5750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af1908115614eb15750614e865750565b614ea79060203d602011614eaa575b614e9f81836130fc565b810190613224565b50565b503d614e95565b604051903d90823e3d90fd5b83948360209493614ecd93613408565b6004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af1908115614eb15750614e865750565b614f179194505f906130fc565b5f925f614e3e565b50505050565b9190604011611626576020823592013590565b614f6381307f00000000000000000000000000000000000000000000000000000000000000006150d0565b905f8213614f7557506131a4906131a7565b6001600160a01b03907f3351b260000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90610140116116265780350190565b356fffffffffffffffffffffffffffffffff8116810361027d5790565b35801515810361027d5790565b91908260a091031261027d57604051614ffb816130e0565b608061504781839561500c81610e40565b855261501a60208201610e40565b602086015261502b60408201613206565b604086015261503c60608201613216565b606086015201610e40565b910152565b9060a0116116265780350190565b903590601e198136030182121561027d570180359067ffffffffffffffff821161027d57602001918160051b3603831361027d57565b9190811015610c275760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618136030182121561027d570190565b6001600160a01b03809381602094165f52168252602460405f2060405194859384927ff135baaa0000000000000000000000000000000000000000000000000000000084526004840152165afa908115611256575f9161512e575090565b90506020813d602011615155575b81615149602093836130fc565b8101031261027d575190565b3d915061513c565b6001600160a01b03168061517057504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115611256575f9161512e575090565b906fffffffffffffffffffffffffffffffff82168092036151bc57565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b909290831561534f576401000276a4905b60405194606086019386851067ffffffffffffffff8611176130a4576001600160a01b0397886080956152ca946020986040521515998a8152888101908a82528360408201931683526040519c8d998a997ff3cd914c000000000000000000000000000000000000000000000000000000008b528281511660048c0152828d8201511660248c015262ffffff60408201511660448c0152606081015160020b60648c0152015116608489015251151560a48801525160c4870152511660e48501526101206101048501526101248401916131b7565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1928315611256575f9361531b575b505f130361531557600f0b90565b60801d90565b9092506020813d602011615347575b81615337602093836130fc565b8101031261027d5751915f615307565b3d915061532a565b73fffd8963efd1fc6a506488495d951d5263988d25906151f5565b905f608060405161537a816130e0565b828152826020820152826040820152826060820152015261539a826135f5565b6001600160a01b038216916001600160a01b0382168084105f1461543157506001600160a01b03905b1680921492602081013562ffffff811680910361027d576040820135918260020b80930361027d5760600135926001600160a01b03841680940361027d576001600160a01b039060405195615417876130e0565b865216602085015260408401526060830152608082015291565b9150506001600160a01b0382916153c3565b5f81600f0b126151bc576fffffffffffffffffffffffffffffffff169056fea164736f6c634300081a000a'; + return + hex'6102a0806040523461041b5761014081615baf8038038091610021828561043a565b83398101031261041b576040519061014082016001600160401b03811183821017610407576040526100528161045d565b82526100606020820161045d565b602083019081526100736040830161045d565b90604084019182526100876060840161045d565b91606085019283526080840151946080810195865260a08501519360a082019485526100b560c0870161045d565b9660c083019788526100c960e0880161045d565b958660e08501526100f16101206100e36101008b0161045d565b998a6101008801520161045d565b9889610120860152604051976101068961041f565b6001600160a01b03908116895298891660208901908152905194519651604051919991979082169695821695911661013d8861041f565b8752602087019586525192519151905160405190936001600160a01b039384169316608082016001600160401b0381118382101761040757604052815260208101928352604081019182526060810193845260405161019d60408261043a565b600f815260208101906e2ab734bb32b939b0b62937baba32b960891b8252604051916101ca60408461043a565b600183526020830191601960f91b83526101e381610471565b610120526101f084610607565b61014052519020918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261025960c08261043a565b5190206080523060c052516001600160a01b0390811661016052905161018052905181166101a05290516101c0526101e0919091529051811661020052905181166102205290518116610240529051811661026052166102805260405161546f9081610740823960805181614031015260a051816140ee015260c05181614002015260e05181614080015261010051816140a60152610120518161061d0152610140518161064601526101605181818161191f01528181611b020152613d4c0152610180518181816118fe01528181611b240152613d2b01526101a0518161336801526101c051816133bb01526101e0518181816086015281816103a20152818161051d015281816124670152818161298201528181614c8201528181614cf901528181614dcb01528181614f3f01526152d7015261020051818181602401528181611ec8015261202b0152610220518181816115d70152818161221901526137290152610240518181816107380152818161258e015261267a01526102605181818161042a0152612a5001526102805181818161077b01528181612d9901528181612f100152612fb90152f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b0382111761040757604052565b601f909101601f19168101906001600160401b0382119082101761040757604052565b51906001600160a01b038216820361041b57565b908151602081105f146104eb575090601f8151116104ab57602081519101516020821061049c571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b6001600160401b038111610407575f54600181811c911680156105fd575b60208210146105e957601f81116105b7575b50602092601f821160011461055857928192935f9261054d575b50508160011b915f199060031b1c1916175f5560ff90565b015190505f80610535565b601f198216935f8052805f20915f5b86811061059f5750836001959610610587575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f808061057a565b91926020600181928685015181550194019201610567565b5f8052601f60205f20910160051c810190601f830160051c015b8181106105de575061051b565b5f81556001016105d1565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610509565b908151602081105f14610632575090601f8151116104ab57602081519101516020821061049c571790565b6001600160401b03811161040757600154600181811c91168015610735575b60208210146105e957601f8111610702575b50602092601f82116001146106a157928192935f92610696575b50508160011b915f199060031b1c19161760015560ff90565b015190505f8061067d565b601f1982169360015f52805f20915f5b8681106106ea57508360019596106106d2575b505050811b0160015560ff90565b01515f1960f88460031b161c191690555f80806106c4565b919260206001819286850151815501940192016106b1565b60015f52601f60205f20910160051c810190601f830160051c015b81811061072a5750610663565b5f815560010161071d565b90607f169061065156fe60c08060405260043610156100ae575b50361561001a575f80fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314158061007b575b61005357005b7f38bbd576000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141561004d565b5f3560e01c9081631a27b20114610df85750806324856bc314610d495780633593564c14610c6357806344684dc31461079f5780638021fef71461075c578063817122dc1461071957806384b0196e1461060557806391dd7346146104e2578063d04d79a21461044e578063d0c9f6cb1461040b578063d737d0c7146103c6578063dc4c90d3146103835763fa461e3314610149575f61000f565b3461027d57606060031936011261027d5760243560043560443567ffffffffffffffff811161027d57610180903690600401610e54565b5f831391821580610379575b6103515781810160408282031261027d5781359067ffffffffffffffff821161027d576101ba918301613189565b506020810135916001600160a01b03831680930361027d576101db916132a1565b90601790602b8310610329578035968760601c9561020962ffffff8585013560601c9a60481c168a896132f4565b6001600160a01b033391160361030157156102f757508685105b156102395750505061023793503391613408565b005b91935091939482602b0180602b116102e3578410610281575082821161027d578101910390600160ff1b84101561027d576102379361027833916131a7565b613473565b5f80fd5b925050507faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6929291925c82116102bb57610237923391613408565b7f739dbe52000000000000000000000000000000000000000000000000000000005f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b9550848710610223565b7f32b13d91000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3b99b53d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f316cf0eb000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f85131561018c565b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461027d575f60031936011261027d5760207f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c6001600160a01b0360405191168152f35b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461027d575f60031936011261027d5760607fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315c7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5c7f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65c906001600160a01b036040519316835260208301526040820152f35b3461027d57602060031936011261027d5760043567ffffffffffffffff811161027d57610513903690600401610e54565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036105dd5761054c916139e9565b908183036105b5575f5b8381106105895761058560405161056e6020826130fc565b5f8152604051918291602083526020830190610eb3565b0390f35b806105af61059a6001938789610ed8565b3560f81c6105a9838787610f17565b9161420d565b01610556565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461027d575f60031936011261027d576106bd6106417f00000000000000000000000000000000000000000000000000000000000000006137bf565b61066a7f0000000000000000000000000000000000000000000000000000000000000000613919565b60206106cb6040519261067d83856130fc565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e0870190610eb3565b908582036040870152610eb3565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b82811061070257505050500390f35b8351855286955093810193928101926001016106f3565b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b61010060031936011261027d5760043567ffffffffffffffff811161027d576107cc903690600401610e54565b60243567ffffffffffffffff811161027d576107ec903690600401610e82565b91604435608435801515810361027d5760c43567ffffffffffffffff811161027d5761081c903690600401610e54565b9160e435804211610c3b579088916108338961311f565b61084060405191826130fc565b89815261084c8a61311f565b601f196020830191013682375f5b8b8110610be25750604051915160208301929183915f5b818110610bc9575050509361097c9693604293836108a06109859b99956109769903601f1981018352826130fc565b5190209115610bb7576001600160a01b036108bf33945b8d3691613153565b60208151910120936040519360208501957f4b503a2e339bf072a489301f3eec7abaefc520266c462796ed9267bbcc6e407c8752604086015260608501528b608085015260643560a08501521660c083015260a43560e08301526101008201526101008152610930610120826130fc565b51902061093b613ff8565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015220923691613153565b90614114565b9092919261414e565b5f1960a43503610b20575b7fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315d7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5d6064357f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65d333014610b12576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610aea57610a5b93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610f32565b5f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d5b5f7fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315d5f7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5d5f7f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65d005b7f6f5ffb7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b610b1b93610f32565b610a7f565b6001600160a01b038116805f52600260205260405f2060a4355f5260205260ff60405f205416610b8f575f52600260205260405f2060a4355f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055610990565b7f1fb09b80000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b036108bf5f946108b7565b825184528f985060209384019390920191600101610871565b909192939450610bfd610bf6828d8d610f17565b3691613153565b60208151910120908351811015610c275760019160208260051b8601015201908b9493929161085a565b634e487b7160e01b5f52603260045260245ffd5b7f5bf6f916000000000000000000000000000000000000000000000000000000005f5260045ffd5b606060031936011261027d5760043567ffffffffffffffff811161027d57610c8f903690600401610e54565b60243567ffffffffffffffff811161027d57610caf903690600401610e82565b916044354211610c3b57333014610d40576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610aea57610d1b93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610f32565b5f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d005b61023793610f32565b604060031936011261027d5760043567ffffffffffffffff811161027d57610d75903690600401610e54565b60243567ffffffffffffffff811161027d57610d95903690600401610e82565b91333014610d40576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610aea57610d1b93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610f32565b3461027d57604060031936011261027d57600435906001600160a01b03821680920361027d576020915f526002825260405f206024355f52825260ff60405f20541615158152f35b35906001600160a01b038216820361027d57565b9181601f8401121561027d5782359167ffffffffffffffff831161027d576020838186019501011161027d57565b9181601f8401121561027d5782359167ffffffffffffffff831161027d576020808501948460051b01011161027d57565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90821015610c27570190565b903590601e198136030182121561027d570180359067ffffffffffffffff821161027d5760200191813603831361027d57565b90821015610c2757610f2e9160051b810190610ee4565b9091565b92908082036130b8579291905f915b848310610f4f575050505050565b9091929394610f5f848787610ed8565b3592610f6c858285610f17565b979092606097607f8760f81c1695600196602181105f14612ae657601081101561240157600881101561186a57806112fc5750610fae60208701359b876132c9565b95906080880135156112f5577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c9c5b610fe88935613609565b9d918881608052600160ff1b8314611282575b50505b604260a052602b600160ff1b82101561027d5760a0518f908a1061127c575030915b89821161027d576040916001600160a01b035f60805135956110f861108f6110a3856110658b60601c6017608051013560601c62ffffff8183109e60481c16916132f4565b16968a8614611261576401000276a49b5b878b519485938d602086015260608501906080516131b7565b91168b83015203601f1981018352826130fc565b8488519a8b98899788967f128acb080000000000000000000000000000000000000000000000000000000088521660048701528b6024870152604486015216606484015260a0608484015260a4830190610eb3565b03925af1908115611256575f905f9261121a575b61111c93501561121357506131a7565b60a05190969081106111635730908060171161027d576080805160170190527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90196610ffe565b50979396929a509794909893604090910135116111eb575b1590816111dc575b50611195575060010191909392610f41565b906111d86040519283927f2c4029e90000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190610eb3565b0390fd5b600160ff1b915016155f611183565b7f39d35496000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506131a7565b9150506040823d821161124e575b81611235604093836130fc565b8101031261027d5781602061111c93519101519161110c565b3d9150611228565b6040513d5f823e3d90fd5b73fffd8963efd1fc6a506488495d951d5263988d259b611076565b91611020565b601491925010610329576020602491604051928380926370a0823160e01b82523060048301523560601c5afa908115611256575f916112c4575b505f80610ffb565b90506020813d82116112ed575b816112de602093836130fc565b8101031261027d57515f6112bc565b3d91506112d1565b309c610fde565b6001819c929a97939b96999598949c145f14611419575090611323602082013592826132c9565b608083013515611412577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b604061135d8535613609565b9401357faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6925d600160ff1b85101561027d5761139b93610278866131a7565b9091901561140357506113ad906131a7565b036113db575f7faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6925d5b61117b565b7fd4e0248e000000000000000000000000000000000000000000000000000000005f5260045ffd5b61140d91506131a7565b6113ad565b3091611351565b6002810361146357506113d691604081013591507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c61145c6020830135613609565b913561371d565b9394919390929060038103611633575050508135820163ffffffff60208401351683019163ffffffff83351693602080850194860101910110611626577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c92604051926001600160a01b0360208501957f2a2d80d10000000000000000000000000000000000000000000000000000000087521660248501526060604485015260e48401928035601e198236030181121561027d5781016020813591019467ffffffffffffffff821161027d578160071b3603861361027d5781906060608489015252610104860194905f905b80821061160857505050936115bc5f969482946115ca946040896001600160a01b0361158060208e9d01610e40565b1660a4880152013560c48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8584030160648601526131b7565b03601f1981018352826130fc565b5190826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131d7565b9161117b565b9091956080808261161b6001948b613246565b019701920190611551565b633b99b53d5f526004601cfd5b919493909250906004810361176657506116506020820135613609565b906001600160a01b038060408301351691351680155f146116b95750479081106116915780611681575b505061117b565b61168a91613aa0565b5f8061167a565b7f6a12f104000000000000000000000000000000000000000000000000000000005f5260045ffd5b91604051916370a0823160e01b8352306004840152602083602481875afa928315611256575f93611733575b50821061170b57816116fa575b50505061117b565b61170392613f49565b5f80806116f2565b7f675cae38000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d821161175e575b8161174e602093836130fc565b8101031261027d5751915f6116e5565b3d9150611741565b6005810361178d57508060406113d6920135906117866020820135613609565b9035613683565b6006810361183f57506040810135906001600160a01b036117b16020830135613609565b913516806117cd57506117c76113d69247613f07565b90613aa0565b906040516370a0823160e01b8152306004820152602081602481865afa908115611256575f9161180c575b506113d69361180691613f07565b91613f49565b90506020813d8211611837575b81611826602093836130fc565b8101031261027d57516113d66117f8565b3d9150611819565b7fd76a1e9e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6008819c929a97939b96999598949c145f14611ab45750611890602083013591836135d1565b90608084013515611aad577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b6118c98535613609565b928215610c27576118d9826135f5565b8360011015610c27576118fb611943916118f5602086016135f5565b90614afa565b907f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614b18565b948581611a93575b5050505f1982018281116102e35761197461196f6001600160a01b03928585613666565b6135f5565b1693604051926370a0823160e01b84526001600160a01b038516928360048601526020856024818a5afa948515611256575f95611a56575b50946119bc929160209596613b5e565b6024604051809581936370a0823160e01b835260048301525afa918215611256575f92611a22575b5060406119f49293013592613676565b101561117b577f849eaf98000000000000000000000000000000000000000000000000000000005f5260045ffd5b91506020823d8211611a4e575b81611a3c602093836130fc565b8101031261027d5790519060406119e4565b3d9150611a2f565b92919450946020833d8211611a8b575b81611a73602093836130fc565b8101031261027d5791519194919390916119bc6119ac565b3d9150611a66565b611aa592611aa0856135f5565b613408565b5f808561194b565b30916118bf565b60098103611d9a5750611ac790826135d1565b608083013515611d93577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b611aff8435613609565b917f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000955f9560028510611d6b576020820135975f1986018681116102e3579190825b611bb957505050604001358611611b91578215610c27576113d69585611b8c92611aa0856135f5565b613b5e565b7f8ab0bc16000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919897505f198901978989116102e357611bdb61196f611bfd9a8989613666565b611bf2611bec61196f8d8b8b613666565b82614afa565b8185879d939d614b18565b90604051907f0902f1ac0000000000000000000000000000000000000000000000000000000082526060826004816001600160a01b0387165afa918215611256575f905f93611d1b575b506001600160a01b036dffffffffffffffffffffffffffff8082931694169d169116145f14611d155799905b9980158015611d0d575b611ce55782611c8b91613ed6565b916103e88302928084046103e814901517156102e357611caa91613676565b6103e58102908082046103e514901517156102e357611cc891613ee9565b600181018091116102e3579880156102e3575f1901919082611b63565b7f7b9c8916000000000000000000000000000000000000000000000000000000005f5260045ffd5b508115611c7d565b90611c73565b6dffffffffffffffffffffffffffff8094506001600160a01b039250611d58839260603d8111611d64575b611d5081836130fc565b810190613b28565b50959093505050611c47565b503d611d46565b7f20db8267000000000000000000000000000000000000000000000000000000005f5260045ffd5b3091611af5565b93949193909290600a8103611e815750505063ffffffff60c08301351682019063ffffffff82351690836020808501948401019101106116265760a06115ca5f946115bc86957f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c956040519586946001600160a01b0360208701997f2b67b570000000000000000000000000000000000000000000000000000000008b52166024870152611e4c6044870182613246565b6001600160a01b03611e6060808301610e40565b1660c4870152013560e48501526101006101048501526101248401916131b7565b91949390929091600b810361200c575050611ea160208201359135613609565b81600160ff1b8103611fdd57504791505b81611ebe57505061117b565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b1561027d576040517fd0e30db00000000000000000000000000000000000000000000000000000000081525f8160048185885af1801561125657611fcd575b50306001600160a01b03831603611f42575b5061167a565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152602482015290602090829060449082905f905af1801561125657611f9f575b8080611f3c565b611fbf9060203d8111611fc6575b611fb781836130fc565b81019061364e565b505f611f98565b503d611fad565b5f611fd7916130fc565b5f611f2a565b471015611eb2577f6a12f104000000000000000000000000000000000000000000000000000000005f5260045ffd5b600c81036121435750506120208135613609565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916370a0823160e01b8352306004840152602083602481855afa928315611256575f9361210f575b50602001358210611691578161208e5750505061117b565b803b1561027d575f80916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528760048401525af18015611256576120ff575b50306001600160a01b038316036120ef575b806116f2565b6120f891613aa0565b5f806120e9565b5f612109916130fc565b5f6120d7565b9092506020813d821161213b575b8161212a602093836130fc565b8101031261027d5751916020612076565b3d915061211d565b600d819c939c9b929597989b99949699145f1461232f57508a358b01988935946121756020808d019e8d0301876133fb565b11610329576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c169a935f5b86811015612201578c6001600160a01b036121cb60208f8560071b01016135f5565b16036121d9576001016121a9565b7fe7002877000000000000000000000000000000000000000000000000000000005f5260045ffd5b50989593979694929b919a5098506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690813b1561027d576040517f0d58b1db000000000000000000000000000000000000000000000000000000008152602060048201526024810184905292839160448301915f905b8082106122b55750505091815f81819503925af18015611256576122a5575b5061117b565b5f6122af916130fc565b5f61229f565b919350916080806001926001600160a01b036122d088610e40565b1681526001600160a01b036122e760208901610e40565b1660208201526001600160a01b0361230160408901610e40565b1660408201526001600160a01b0361231b60608901610e40565b166060820152019401920185939291612280565b80929b93989550600e919a97969450145f1461183f5750604051906370a0823160e01b82526001600160a01b0381351660048301526020826024816001600160a01b0384860135165afa918215611256575f926123cd575b50604001351115806113d65791506040517fa3281672000000000000000000000000000000000000000000000000000000006020820152600481526116026024826130fc565b9091506020813d82116123f9575b816123e8602093836130fc565b8101031261027d5751906040612387565b3d91506123db565b6010819c929a97939b96999598949c145f1461250f575061245a915f9160405193849283927f48c894910000000000000000000000000000000000000000000000000000000084526020600485015260248401916131b7565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561125657612499575061117b565b3d805f833e6124a881836130fc565b81019060208183031261027d5780519067ffffffffffffffff821161027d570181601f8201121561027d5780516124de81613137565b926124ec60405194856130fc565b8184526020828401011161027d575f928160208094018483015e0101525f61229f565b80929495506011919350145f146125e45750907fffffffff000000000000000000000000000000000000000000000000000000008135167f7ac2ff7b0000000000000000000000000000000000000000000000000000000081036125b95750815f92918392604051928392833781018381520390826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131d7565b7ff801e525000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b601281036128bc57507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c917fffffffff000000000000000000000000000000000000000000000000000000008135167f0c49ccbe0000000000000000000000000000000000000000000000000000000081148015612893575b801561286a575b156125b9575060048101356001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936040517f6352211e000000000000000000000000000000000000000000000000000000008152826004820152602081602481895afa908115611256576001600160a01b039182915f9161284c575b50169116908082149182156127c5575b8215612754575b505015612729575091815f809481946040519384928337810182815203925af1906116026131d7565b7fbb25d4c5000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b909150604051917fe985e9c500000000000000000000000000000000000000000000000000000000835260048301526024820152602081604481885afa908115611256575f916127a7575b505f80612700565b6127bf915060203d8111611fc657611fb781836130fc565b5f61279f565b91506040517f081812fc0000000000000000000000000000000000000000000000000000000081528360048201526020816024818a5afa9081156112565783916001600160a01b03915f9161281e575b501614916126f9565b61283f915060203d8111612845575b61283781836130fc565b810190613a81565b5f612815565b503d61282d565b612864915060203d81116128455761283781836130fc565b5f6126e9565b507f42966c68000000000000000000000000000000000000000000000000000000008114612665565b507ffc6f786500000000000000000000000000000000000000000000000000000000811461265e565b601381036129ad5750505f80916040516001600160a01b0360a060208301937f6276cbbe0000000000000000000000000000000000000000000000000000000085528261290882610e40565b1660248501528261291b60208301610e40565b16604485015262ffffff61293160408301613206565b16606485015261294360608201613216565b60020b60848501528261295860808301610e40565b1660a485015201351660c482015260c4815261297560e4826130fc565b5190826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131d7565b6014810361183f57507fffffffff000000000000000000000000000000000000000000000000000000008235167fdd46508f0000000000000000000000000000000000000000000000000000000081036125b957508060041161027d57612a24612a1e6003198301600485016132a1565b906132a1565b5f5b818110612a7b575050505f9182914791816040519283928337810184815203916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131d7565b612a86818385610ed8565b3560f81c8015908115612adb575b8115612ad0575b50612aa857600101612a26565b7f5d1d0f9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b60039150145f612a9b565b600181149150612a94565b90989591996040829c949c999699989598105f14612c2f57506021810361183f575090612b12916139e9565b612b556040959395519460208601967f24856bc30000000000000000000000000000000000000000000000000000000088526040602488015260648701916131b7565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc858503016044860152818452602084019160208160051b86010194845f90601e19813603015b848310612bd35750505050505050509181612bc45f9493859403601f1981018352826130fc565b519082305af1906116026131d7565b9091929394959697601f1985820301885288358281121561027d578301906020823592019167ffffffffffffffff811161027d57803603831361027d57612c1f60209283928b956131b7565b9a01980196959493019190612b9d565b949392906040810361183f575081019060208183031261027d5780359067ffffffffffffffff821161027d5701906101a08282031261027d57604051906101a0820182811067ffffffffffffffff8211176130a457604052612c9083610e40565b8252612c9e60208401610e40565b60208301908152612cb160408501610e40565b6040840152612cc1878501610e40565b8784015260808301926080850135845260a085013560a082015260c081019260c08601358452612cf360e08701610e40565b9560e08301968752612d0861010082016135c0565b610100840152612d1b61012082016135c0565b610120840152612d2e61014082016135c0565b61014084015261016081013567ffffffffffffffff811161027d5761018092612d58918301613189565b6101608401520135938415159081860361027d57610180830195865251945f91600160ff1b8714613022575b505115612ec3575083915b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016946001600160a01b0380845116925116926001600160a01b03604082015116956001600160a01b038c83015116986001600160a01b0360a0840151925191511663ffffffff610100850151169163ffffffff610120860151169361016063ffffffff61014088015116960151968c3b1561027d576040519d8e9c8d9b8c9b7f7b939232000000000000000000000000000000000000000000000000000000008d5260048d015260248c015260448b015260648a0152608489015260a488015260c487015260e4860152610104850152610124840152610144830152610164820161018090526101848201612eac91610eb3565b03915a945f95f18015611256576122a5575061117b565b916001600160a01b0360408301511660405160205f8183017f095ea7b3000000000000000000000000000000000000000000000000000000008152612f5d84612f4f8c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248401602090939291936001600160a01b0360408201951681520152565b03601f1981018652856130fc565b83519082865af1893d5f519083613005575b50505015612f7f575b5050612d8f565b612ffe91612ff96040517f095ea7b30000000000000000000000000000000000000000000000000000000060208201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201525f604482015260448152612ff36064826130fc565b82614a8d565b614a8d565b5f80612f78565b9192509061301c575050813b15155b895f80612f6f565b14613014565b909550156130335747945b5f612d84565b602460206001600160a01b03604085015116604051928380926370a0823160e01b82523060048301525afa908115611256575f91613073575b509461302d565b90506020813d821161309c575b8161308d602093836130fc565b8101031261027d57515f61306c565b3d9150613080565b634e487b7160e01b5f52604160045260245ffd5b7fff633a38000000000000000000000000000000000000000000000000000000005f5260045ffd5b60a0810190811067ffffffffffffffff8211176130a457604052565b90601f601f19910116810190811067ffffffffffffffff8211176130a457604052565b67ffffffffffffffff81116130a45760051b60200190565b67ffffffffffffffff81116130a457601f01601f191660200190565b92919261315f82613137565b9161316d60405193846130fc565b82948184528183011161027d578281602093845f960137010152565b9080601f8301121561027d578160206131a493359101613153565b90565b600160ff1b81146102e3575f0390565b601f8260209493601f1993818652868601375f8582860101520116010190565b3d15613201573d906131e882613137565b916131f660405193846130fc565b82523d5f602084013e565b606090565b359062ffffff8216820361027d57565b35908160020b820361027d57565b9081602091031261027d575190565b359065ffffffffffff8216820361027d57565b65ffffffffffff61329b606080936001600160a01b0361326582610e40565b1686526001600160a01b0361327c60208301610e40565b1660208701528361328f60408301613233565b16604087015201613233565b16910152565b909163ffffffff82351682019263ffffffff8435169260208086019585010191011061162657565b909163ffffffff60608301351682019263ffffffff8435169260208086019585010191011061162657565b906001600160a01b0392838216848416116133f3575b62ffffff908460405193816020860196168652166040840152166060820152606081526133386080826130fc565b5190206040517fff00000000000000000000000000000000000000000000000000000000000000602082019081527f000000000000000000000000000000000000000000000000000000000000000060601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201929092527f000000000000000000000000000000000000000000000000000000000000000060558201526133ec81607581016115bc565b5190201690565b90919061330a565b919082018092116102e357565b909291906001600160a01b0384163003613428576134269350613683565b565b91926001600160a01b03841161344b576001600160a01b0361342694169261371d565b7fc4bd89a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b939290602b8210610329578235938460601c92601785013560601c9380851094859760481c62ffffff16906134a7926132f4565b6001600160a01b031692845f146040966001600160a01b0380956135045f96613557956135a5576401000276a4925b846134f08e51978f948995602087015260608601916131b7565b91168d83015203601f1981018552846130fc565b89519b8c998a9889977f128acb080000000000000000000000000000000000000000000000000000000089521660048801526024870152604486015216606484015260a0608484015260a4830190610eb3565b03925af18015611256575f925f9161356e57509192565b9250506040823d60401161359d575b8161358a604093836130fc565b8101031261027d57602082519201519192565b3d915061357d565b73fffd8963efd1fc6a506488495d951d5263988d25926134d6565b359063ffffffff8216820361027d57565b9160608301358301916135ee6020843595818601950301856133fb565b1161032957565b356001600160a01b038116810361027d5790565b6001600160a01b038116600181036136425750507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90565b6002036131a457503090565b9081602091031261027d5751801515810361027d5790565b9190811015610c275760051b0190565b919082039182116102e357565b9091906001600160a01b03168061369e575061342691613aa0565b600160ff1b82146136b4575b9161342692613f49565b9050604051916370a0823160e01b8352306004840152602083602481855afa8015611256575f906136e9575b909250906136aa565b506020833d602011613715575b81613703602093836130fc565b8101031261027d5761342692516136e0565b3d91506136f6565b91926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b1561027d575f6001600160a01b039384829681608496816040519b8c9a8b997f36c78516000000000000000000000000000000000000000000000000000000008b521660048a01521660248801521660448601521660648401525af18015611256576137b55750565b5f613426916130fc565b60ff811461381e5760ff811690601f82116137f657604051916137e36040846130fc565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f80548060011c916001821691821561390f575b6020841083146138fb5783855284929081156138be5750600114613861575b6131a4925003826130fc565b505f80805290917f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8183106138a25750509060206131a492820101613855565b602091935080600191548385880101520191019091839261388a565b602092506131a49491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101613855565b634e487b7160e01b5f52602260045260245ffd5b92607f1692613836565b60ff811461393d5760ff811690601f82116137f657604051916137e36040846130fc565b506040515f6001548060011c91600182169182156139df575b6020841083146138fb5783855284929081156138be5750600114613980576131a4925003826130fc565b5060015f90815290917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b8183106139c35750509060206131a492820101613855565b60209193508060019154838588010152019101909183926139ab565b92607f1692613956565b604081351891606082019363ffffffff6040840135169363ffffffe0601f8601169060608201602086013518179084019260608401359463ffffffff861694641fffffffe0608082019760051b1680915f925b808410613a5457506080925001019101101761162657565b90916020809163ffffffe0601f60808089890101359b848d18179b88010135011601019301929190613a3c565b9081602091031261027d57516001600160a01b038116810361027d5790565b5f80809381935af115613aaf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152fd5b51906dffffffffffffffffffffffffffff8216820361027d57565b9081606091031261027d57613b3c81613b0d565b916040613b4b60208401613b0d565b92015163ffffffff8116810361027d5790565b9160028210613eae578115610c2757613b76836135f5565b8260011015610c2757613b92906118f5602086979596016135f5565b50925f198101937ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8201955f90602093601f198501965b888410613bdc5750505050505050505050565b613bea61196f858486613666565b946001600160a01b03613c0461196f600188018688613666565b921695604051917f0902f1ac0000000000000000000000000000000000000000000000000000000083526060836004818b5afa91821561125657895f945f94613e68575b506001600160a01b03806dffffffffffffffffffffffffffff80602496979816971693169416841494855f14613e625791935b604051938480926370a0823160e01b82528d60048301525afa918215611256575f92613e33575b5080820392811592838015613e2b575b611ce557826103e586029586046103e514911417156102e357613cd59084613ed6565b916103e882029182046103e81417156102e357613cfb92613cf5916133fb565b90613ee9565b9015613e24575f90915b8b861015613e1b5790613d26613d70926118f561196f60028a01888a613666565b8193917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614b18565b915b9660405190613d818a836130fc565b5f82528b368b840137803b1561027d57613def945f8094604051978895869485937f022c0d9f000000000000000000000000000000000000000000000000000000008552600485015260248401526001600160a01b0389166044840152608060648401526084830190610eb3565b03925af191821561125657600192613e0b575b50930192613bc9565b5f613e15916130fc565b5f613e02565b5087905f613d72565b5f91613d05565b508115613cb2565b9091508981813d8311613e5b575b613e4b81836130fc565b8101031261027d5751905f613ca2565b503d613e41565b93613c7b565b6dffffffffffffffffffffffffffff955060249394506001600160a01b0386613e9f829360603d8111611d6457611d5081836130fc565b50989098979650505050613c48565b7fae52ad0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b818102929181159184041417156102e357565b8115613ef3570490565b634e487b7160e01b5f52601260045260245ffd5b6127108211613f215761271091613f1d91613ed6565b0490565b7fdeaa01e6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f9182604492602095604051937fa9059cbb000000000000000000000000000000000000000000000000000000008552600485015260248401525af13d15601f3d1160015f511416171615613f9a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163014806140eb575b15614053577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526140e560c0826130fc565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461402a565b81519190604183036141445761413d9250602082015190606060408401519301515f1a90614be1565b9192909190565b50505f9160029190565b60048110156141f95780614160575050565b60018103614190577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b600281036141c457507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146141ce5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b929190600b8410156148bb57600784036144605761422c92935061504c565b602081019061423b828261505a565b5f93915080614249846135f5565b9261425660608601614fb9565b6fffffffffffffffffffffffffffffffff811615614449575b604086019161427e838861505a565b80151595869250908261443e575b5050614416575f9591949395945b84861061431d57505050505050506080016fffffffffffffffffffffffffffffffff806142c683614fb9565b1692169182106142d4575050565b6142ee6fffffffffffffffffffffffffffffffff91614fb9565b7f8b063d73000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b86985061437d6143786fffffffffffffffffffffffffffffffff9261435a6143538a61434d888f9e9c9d9e61505a565b90615090565b968761536a565b949091169361436c6080880188610ee4565b929091865f03916151e4565b615443565b9861439b575b50600161439089936135f5565b96019493959161429a565b6143c290670de0b6b3a76400006fffffffffffffffffffffffffffffffff8b169102613ee9565b6143d6876143d0868b61505a565b90613666565b358082116143e45750614383565b877fa9b7edf7000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7f947446a5000000000000000000000000000000000000000000000000000000005f5260045ffd5b14159050855f61428c565b5061445b61445685614c7b565b61519f565b61426f565b6006840361455757614473929350614faa565b61447f60c08201614fb9565b6fffffffffffffffffffffffffffffffff811615614506575b6144e961437860e0926144c86fffffffffffffffffffffffffffffffff6144c160a08801614fd6565b92166131a7565b906144d7610100870187610ee4565b9290916144e43689614fe3565b6151e4565b91016fffffffffffffffffffffffffffffffff806142c683614fb9565b5061451360a08201614fd6565b1561453d5760e06144e961437861453461445661452f866135f5565b614c7b565b92505050614498565b60e06144e961437861453461445661452f602087016135f5565b6009840361476e5761456a92935061504c565b6020810190614579828261505a565b90505f9261458960608401614fb9565b91614593846135f5565b926fffffffffffffffffffffffffffffffff81161561475c575b6040850190826145bd838861505a565b801515958692509082614751575b505061441657949093929493845b614658575050505050506080016fffffffffffffffffffffffffffffffff8061460183614fb9565b16921691821161460f575050565b6146296fffffffffffffffffffffffffffffffff91614fb9565b7f12bacdd3000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b8597506fffffffffffffffffffffffffffffffff6146bc6146b261435393614695614687898d9c9a9b9c61505a565b96905f198d01978891615090565b9490911693846146a86080890189610ee4565b93909215906151e4565b600f0b5f0361519f565b986146dc575b50505f196146d088926135f5565b950193929490846145d9565b61470290670de0b6b3a76400006fffffffffffffffffffffffffffffffff8b1602613ee9565b90614711816143d0868b61505a565b359081831161472057506146c2565b7fe6518043000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b14159050815f6145cb565b5061476961445684614f38565b6145ad565b600884146147a5575050505b7f5cda29d7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6147b0929350614faa565b6147bc60c08201614fb9565b6fffffffffffffffffffffffffffffffff811615614840575b61482361445661481b6fffffffffffffffffffffffffffffffff60e0946147fe60a08801614fd6565b61480c610100890189610ee4565b93909216906144e4368a614fe3565b600f0b6131a7565b91016fffffffffffffffffffffffffffffffff8061460183614fb9565b5061484d60a08201614fd6565b156148905760e061482361445661481b6fffffffffffffffffffffffffffffffff614885614456614880602089016135f5565b614f38565b9450505050506147d5565b60e061482361445661481b6fffffffffffffffffffffffffffffffff614885614456614880886135f5565b92600c810361493f57506148cf9192614f25565b906148d981614f38565b9180831161490f575090613426917f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90614db9565b90507f12bacdd3000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b600f81036149c257506149529192614f25565b9061495c81614c7b565b91808310614992575090613426917f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90614ce7565b90507f8b063d73000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b600b8103614a1b57506149d9906134269293614c63565b15614a1057614a0a827f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c92614d94565b91614db9565b614a0a823092614d94565b600e8103614a4e5750614a42614a38614a48926134269495614c63565b9282949291613609565b92614d80565b91614ce7565b9260108414614a5f5750505061477a565b613426929350614a75614a7e92614a4892614c63565b92919390613609565b91614a8884614c7b565b613f07565b905f602091828151910182855af115611256575f513d614af157506001600160a01b0381163b155b614abc5750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415614ab5565b6001600160a01b0382166001600160a01b038216105f14610f2e5791565b916133ec906001600160a01b03947fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519181602084019460601b16845260601b16603482015260288152614b6f6048826130fc565b5190206115bc604051938492602084019687917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614c58579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611256575f516001600160a01b03811615614c4e57905f905f90565b505f906001905f90565b5050505f9160039190565b90606011611626578035916040602083013592013590565b614ca681307f00000000000000000000000000000000000000000000000000000000000000006150d0565b905f8212614cb2575090565b6001600160a01b03907f4c085bf1000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90918015614d7b576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b1561027d575f92836064926001600160a01b03948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015611256576137b55750565b505050565b9081614d90576131a49150614c7b565b5090565b90600160ff1b8203614daa576131a4915061515d565b81614d90576131a49150614f38565b5f918315614f1f576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b1561027d576001600160a01b03604051917fa584119400000000000000000000000000000000000000000000000000000000835216908160048201525f8160248183885af1801561125657614f0a575b5080614ebd5750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af1908115614eb15750614e865750565b614ea79060203d602011614eaa575b614e9f81836130fc565b810190613224565b50565b503d614e95565b604051903d90823e3d90fd5b83948360209493614ecd93613408565b6004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af1908115614eb15750614e865750565b614f179194505f906130fc565b5f925f614e3e565b50505050565b9190604011611626576020823592013590565b614f6381307f00000000000000000000000000000000000000000000000000000000000000006150d0565b905f8213614f7557506131a4906131a7565b6001600160a01b03907f3351b260000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90610140116116265780350190565b356fffffffffffffffffffffffffffffffff8116810361027d5790565b35801515810361027d5790565b91908260a091031261027d57604051614ffb816130e0565b608061504781839561500c81610e40565b855261501a60208201610e40565b602086015261502b60408201613206565b604086015261503c60608201613216565b606086015201610e40565b910152565b9060a0116116265780350190565b903590601e198136030182121561027d570180359067ffffffffffffffff821161027d57602001918160051b3603831361027d57565b9190811015610c275760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618136030182121561027d570190565b6001600160a01b03809381602094165f52168252602460405f2060405194859384927ff135baaa0000000000000000000000000000000000000000000000000000000084526004840152165afa908115611256575f9161512e575090565b90506020813d602011615155575b81615149602093836130fc565b8101031261027d575190565b3d915061513c565b6001600160a01b03168061517057504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115611256575f9161512e575090565b906fffffffffffffffffffffffffffffffff82168092036151bc57565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b909290831561534f576401000276a4905b60405194606086019386851067ffffffffffffffff8611176130a4576001600160a01b0397886080956152ca946020986040521515998a8152888101908a82528360408201931683526040519c8d998a997ff3cd914c000000000000000000000000000000000000000000000000000000008b528281511660048c0152828d8201511660248c015262ffffff60408201511660448c0152606081015160020b60648c0152015116608489015251151560a48801525160c4870152511660e48501526101206101048501526101248401916131b7565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1928315611256575f9361531b575b505f130361531557600f0b90565b60801d90565b9092506020813d602011615347575b81615337602093836130fc565b8101031261027d5751915f615307565b3d915061532a565b73fffd8963efd1fc6a506488495d951d5263988d25906151f5565b905f608060405161537a816130e0565b828152826020820152826040820152826060820152015261539a826135f5565b6001600160a01b038216916001600160a01b0382168084105f1461543157506001600160a01b03905b1680921492602081013562ffffff811680910361027d576040820135918260020b80930361027d5760600135926001600160a01b03841680940361027d576001600160a01b039060405195615417876130e0565b865216602085015260408401526060830152608082015291565b9150506001600160a01b0382916153c3565b5f81600f0b126151bc576fffffffffffffffffffffffffffffffff169056fea164736f6c634300081a000a'; } } diff --git a/src/briefcase/deployers/util-contracts/ERC7914DetectorDeployer.sol b/src/briefcase/deployers/util-contracts/ERC7914DetectorDeployer.sol index 5ab5e62e..8c34211c 100644 --- a/src/briefcase/deployers/util-contracts/ERC7914DetectorDeployer.sol +++ b/src/briefcase/deployers/util-contracts/ERC7914DetectorDeployer.sol @@ -21,6 +21,7 @@ library ERC7914DetectorDeployer { * - evm_version: paris */ function initcode() internal pure returns (bytes memory) { - return hex'60a060405234801561001057600080fd5b506040516103c53803806103c583398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610335610090600039600081816068015260d301526103356000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806337e276381461003b57806385bb2fa814610063575b600080fd5b61004e6100493660046102b7565b6100a2565b60405190151581526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6000813b8082036100b65750600092915050565b6100bf83610135565b156101255760006100cf84610172565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610114575060019392505050565b61011d81610191565b949350505050565b61012e83610191565b9392505050565b60006017826001600160a01b03163b101561015257506000919050565b61ef0160f01b610161836102a6565b6001600160e81b0319161492915050565b60008061017e836102a6565b60481c6001600160a01b03169392505050565b6040805160006024820181905260448201819052606480830182905283518084039091018152608490920183526020820180516001600160e01b031663789ff70160e01b9081179091529251909291839182916001600160a01b038716916101f991906102e0565b600060405180830381855afa9150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b509150915081801561024c575080516020145b1561027f57600081806020019051810190610267919061030f565b90506001811161027d5750600195945050505050565b505b81801561028b57508051155b1561029b57506000949350505050565b506000949350505050565b60006017600080843c505060005190565b6000602082840312156102c957600080fd5b81356001600160a01b038116811461012e57600080fd5b6000825160005b8181101561030157602081860181015185830152016102e7565b506000920191825250919050565b60006020828403121561032157600080fd5b505191905056fea164736f6c6343000813000a'; + return + hex'60a060405234801561001057600080fd5b506040516103c53803806103c583398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610335610090600039600081816068015260d301526103356000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806337e276381461003b57806385bb2fa814610063575b600080fd5b61004e6100493660046102b7565b6100a2565b60405190151581526020015b60405180910390f35b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005a565b6000813b8082036100b65750600092915050565b6100bf83610135565b156101255760006100cf84610172565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610114575060019392505050565b61011d81610191565b949350505050565b61012e83610191565b9392505050565b60006017826001600160a01b03163b101561015257506000919050565b61ef0160f01b610161836102a6565b6001600160e81b0319161492915050565b60008061017e836102a6565b60481c6001600160a01b03169392505050565b6040805160006024820181905260448201819052606480830182905283518084039091018152608490920183526020820180516001600160e01b031663789ff70160e01b9081179091529251909291839182916001600160a01b038716916101f991906102e0565b600060405180830381855afa9150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b509150915081801561024c575080516020145b1561027f57600081806020019051810190610267919061030f565b90506001811161027d5750600195945050505050565b505b81801561028b57508051155b1561029b57506000949350505050565b506000949350505050565b60006017600080843c505060005190565b6000602082840312156102c957600080fd5b81356001600160a01b038116811461012e57600080fd5b6000825160005b8181101561030157602081860181015185830152016102e7565b506000920191825250919050565b60006020828403121561032157600080fd5b505191905056fea164736f6c6343000813000a'; } } diff --git a/src/briefcase/deployers/util-contracts/FeeCollectorDeployer.sol b/src/briefcase/deployers/util-contracts/FeeCollectorDeployer.sol index 6a74a07d..82fa6317 100644 --- a/src/briefcase/deployers/util-contracts/FeeCollectorDeployer.sol +++ b/src/briefcase/deployers/util-contracts/FeeCollectorDeployer.sol @@ -25,6 +25,7 @@ library FeeCollectorDeployer { * - evm_version: paris */ function initcode() internal pure returns (bytes memory) { - return hex'60c060405234801561001057600080fd5b50604051610d6d380380610d6d83398101604081905261002f916100bf565b600080546001600160a01b0319166001600160a01b03861690811782556040518692907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b0319166001600160a01b0394851617905582166080521660a05250610113565b80516001600160a01b03811681146100ba57600080fd5b919050565b600080600080608085870312156100d557600080fd5b6100de856100a3565b93506100ec602086016100a3565b92506100fa604086016100a3565b9150610108606086016100a3565b905092959194509250565b60805160a051610c1361015a6000396000818160ff01528181610414015281816105100152818161054601526106720152600081816101cd01526104ab0152610c136000f3fe6080604052600436106100e15760003560e01c80638da5cb5b1161007f578063b4a25ce711610059578063b4a25ce714610273578063bbf20c15146102a4578063d88d35de146102c4578063f2fde38b146102e457600080fd5b80638da5cb5b1461020f57806394a228b51461022f578063b2ef14e31461025357600080fd5b8063481fb142116100bb578063481fb14214610180578063628a4b2f1461019b578063647846a5146101bb57806365d82753146101ef57600080fd5b806312261ee7146100ed5780631ac169861461013e57806335a9e4df1461016057600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b506101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014a57600080fd5b5061015e61015936600461092a565b610304565b005b34801561016c57600080fd5b50600154610121906001600160a01b031681565b34801561018c57600080fd5b506101216001600160a01b0381565b3480156101a757600080fd5b5061015e6101b636600461098e565b610347565b3480156101c757600080fd5b506101217f000000000000000000000000000000000000000000000000000000000000000081565b3480156101fb57600080fd5b5061015e61020a3660046109f7565b6103da565b34801561021b57600080fd5b50600054610121906001600160a01b031681565b34801561023b57600080fd5b5061024560001981565b604051908152602001610135565b34801561025f57600080fd5b5061015e61026e366004610a39565b610474565b34801561027f57600080fd5b5061028d65ffffffffffff81565b60405165ffffffffffff9091168152602001610135565b3480156102b057600080fd5b5061015e6102bf366004610a65565b6104d6565b3480156102d057600080fd5b5061015e6102df366004610adf565b610631565b3480156102f057600080fd5b5061015e6102ff36600461098e565b6106df565b6000546001600160a01b031633146103375760405162461bcd60e51b815260040161032e90610b54565b60405180910390fd5b610342838383610754565b505050565b6000546001600160a01b031633146103715760405162461bcd60e51b815260040161032e90610b54565b600154604080516001600160a01b03928316815291831660208301527f736ee8e49f5bc52c4483e2bf96ce5c99a25af7c12037267ccde543b28ab63071910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146104045760405162461bcd60e51b815260040161032e90610b54565b60005b818110156103425761046c7f0000000000000000000000000000000000000000000000000000000000000000600085858581811061044757610447610b7a565b905060200201602081019061045c919061098e565b6001600160a01b031691906107e0565b600101610407565b6000546001600160a01b0316331461049e5760405162461bcd60e51b815260040161032e90610b54565b6104d26001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383610860565b5050565b6000546001600160a01b031633146105005760405162461bcd60e51b815260040161032e90610b54565b60005b8181101561061e576105447f000000000000000000000000000000000000000000000000000000000000000060001985858581811061044757610447610b7a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166387517c4584848481811061058557610585610b7a565b905060200201602081019061059a919061098e565b60015460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201529082166024820152604481019190915265ffffffffffff6064820152608401600060405180830381600087803b1580156105fa57600080fd5b505af115801561060e573d6000803e3d6000fd5b5050600190920191506105039050565b5061062a858585610754565b5050505050565b6000546001600160a01b0316331461065b5760405162461bcd60e51b815260040161032e90610b54565b60405163cc53287f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cc53287f906106a99085908590600401610b90565b600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146107095760405162461bcd60e51b815260040161032e90610b54565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001546040516000916001600160a01b03169083906107769087908790610bf6565b60006040518083038185875af1925050503d80600081146107b3576040519150601f19603f3d011682016040523d82523d6000602084013e6107b8565b606091505b50509050806107da5760405163cee8b77760e01b815260040160405180910390fd5b50505050565b600060405163095ea7b360e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806107da5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b604482015260640161032e565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806107da5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161032e565b60008083601f8401126108f357600080fd5b50813567ffffffffffffffff81111561090b57600080fd5b60208301915083602082850101111561092357600080fd5b9250929050565b60008060006040848603121561093f57600080fd5b833567ffffffffffffffff81111561095657600080fd5b610962868287016108e1565b909790965060209590950135949350505050565b6001600160a01b038116811461098b57600080fd5b50565b6000602082840312156109a057600080fd5b81356109ab81610976565b9392505050565b60008083601f8401126109c457600080fd5b50813567ffffffffffffffff8111156109dc57600080fd5b6020830191508360208260051b850101111561092357600080fd5b60008060208385031215610a0a57600080fd5b823567ffffffffffffffff811115610a2157600080fd5b610a2d858286016109b2565b90969095509350505050565b60008060408385031215610a4c57600080fd5b8235610a5781610976565b946020939093013593505050565b600080600080600060608688031215610a7d57600080fd5b853567ffffffffffffffff80821115610a9557600080fd5b610aa189838a016108e1565b9097509550602088013594506040880135915080821115610ac157600080fd5b50610ace888289016109b2565b969995985093965092949392505050565b60008060208385031215610af257600080fd5b823567ffffffffffffffff80821115610b0a57600080fd5b818501915085601f830112610b1e57600080fd5b813581811115610b2d57600080fd5b8660208260061b8501011115610b4257600080fd5b60209290920196919550909350505050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252818101839052600090604080840186845b87811015610be9578135610bb981610976565b6001600160a01b0390811684528286013590610bd482610976565b16838601529183019190830190600101610ba6565b5090979650505050505050565b818382376000910190815291905056fea164736f6c6343000813000a'; + return + hex'60c060405234801561001057600080fd5b50604051610d6d380380610d6d83398101604081905261002f916100bf565b600080546001600160a01b0319166001600160a01b03861690811782556040518692907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b0319166001600160a01b0394851617905582166080521660a05250610113565b80516001600160a01b03811681146100ba57600080fd5b919050565b600080600080608085870312156100d557600080fd5b6100de856100a3565b93506100ec602086016100a3565b92506100fa604086016100a3565b9150610108606086016100a3565b905092959194509250565b60805160a051610c1361015a6000396000818160ff01528181610414015281816105100152818161054601526106720152600081816101cd01526104ab0152610c136000f3fe6080604052600436106100e15760003560e01c80638da5cb5b1161007f578063b4a25ce711610059578063b4a25ce714610273578063bbf20c15146102a4578063d88d35de146102c4578063f2fde38b146102e457600080fd5b80638da5cb5b1461020f57806394a228b51461022f578063b2ef14e31461025357600080fd5b8063481fb142116100bb578063481fb14214610180578063628a4b2f1461019b578063647846a5146101bb57806365d82753146101ef57600080fd5b806312261ee7146100ed5780631ac169861461013e57806335a9e4df1461016057600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b506101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014a57600080fd5b5061015e61015936600461092a565b610304565b005b34801561016c57600080fd5b50600154610121906001600160a01b031681565b34801561018c57600080fd5b506101216001600160a01b0381565b3480156101a757600080fd5b5061015e6101b636600461098e565b610347565b3480156101c757600080fd5b506101217f000000000000000000000000000000000000000000000000000000000000000081565b3480156101fb57600080fd5b5061015e61020a3660046109f7565b6103da565b34801561021b57600080fd5b50600054610121906001600160a01b031681565b34801561023b57600080fd5b5061024560001981565b604051908152602001610135565b34801561025f57600080fd5b5061015e61026e366004610a39565b610474565b34801561027f57600080fd5b5061028d65ffffffffffff81565b60405165ffffffffffff9091168152602001610135565b3480156102b057600080fd5b5061015e6102bf366004610a65565b6104d6565b3480156102d057600080fd5b5061015e6102df366004610adf565b610631565b3480156102f057600080fd5b5061015e6102ff36600461098e565b6106df565b6000546001600160a01b031633146103375760405162461bcd60e51b815260040161032e90610b54565b60405180910390fd5b610342838383610754565b505050565b6000546001600160a01b031633146103715760405162461bcd60e51b815260040161032e90610b54565b600154604080516001600160a01b03928316815291831660208301527f736ee8e49f5bc52c4483e2bf96ce5c99a25af7c12037267ccde543b28ab63071910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146104045760405162461bcd60e51b815260040161032e90610b54565b60005b818110156103425761046c7f0000000000000000000000000000000000000000000000000000000000000000600085858581811061044757610447610b7a565b905060200201602081019061045c919061098e565b6001600160a01b031691906107e0565b600101610407565b6000546001600160a01b0316331461049e5760405162461bcd60e51b815260040161032e90610b54565b6104d26001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383610860565b5050565b6000546001600160a01b031633146105005760405162461bcd60e51b815260040161032e90610b54565b60005b8181101561061e576105447f000000000000000000000000000000000000000000000000000000000000000060001985858581811061044757610447610b7a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166387517c4584848481811061058557610585610b7a565b905060200201602081019061059a919061098e565b60015460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201529082166024820152604481019190915265ffffffffffff6064820152608401600060405180830381600087803b1580156105fa57600080fd5b505af115801561060e573d6000803e3d6000fd5b5050600190920191506105039050565b5061062a858585610754565b5050505050565b6000546001600160a01b0316331461065b5760405162461bcd60e51b815260040161032e90610b54565b60405163cc53287f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cc53287f906106a99085908590600401610b90565b600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146107095760405162461bcd60e51b815260040161032e90610b54565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001546040516000916001600160a01b03169083906107769087908790610bf6565b60006040518083038185875af1925050503d80600081146107b3576040519150601f19603f3d011682016040523d82523d6000602084013e6107b8565b606091505b50509050806107da5760405163cee8b77760e01b815260040160405180910390fd5b50505050565b600060405163095ea7b360e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806107da5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b604482015260640161032e565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806107da5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161032e565b60008083601f8401126108f357600080fd5b50813567ffffffffffffffff81111561090b57600080fd5b60208301915083602082850101111561092357600080fd5b9250929050565b60008060006040848603121561093f57600080fd5b833567ffffffffffffffff81111561095657600080fd5b610962868287016108e1565b909790965060209590950135949350505050565b6001600160a01b038116811461098b57600080fd5b50565b6000602082840312156109a057600080fd5b81356109ab81610976565b9392505050565b60008083601f8401126109c457600080fd5b50813567ffffffffffffffff8111156109dc57600080fd5b6020830191508360208260051b850101111561092357600080fd5b60008060208385031215610a0a57600080fd5b823567ffffffffffffffff811115610a2157600080fd5b610a2d858286016109b2565b90969095509350505050565b60008060408385031215610a4c57600080fd5b8235610a5781610976565b946020939093013593505050565b600080600080600060608688031215610a7d57600080fd5b853567ffffffffffffffff80821115610a9557600080fd5b610aa189838a016108e1565b9097509550602088013594506040880135915080821115610ac157600080fd5b50610ace888289016109b2565b969995985093965092949392505050565b60008060208385031215610af257600080fd5b823567ffffffffffffffff80821115610b0a57600080fd5b818501915085601f830112610b1e57600080fd5b813581811115610b2d57600080fd5b8660208260061b8501011115610b4257600080fd5b60209290920196919550909350505050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252818101839052600090604080840186845b87811015610be9578135610bb981610976565b6001600160a01b0390811684528286013590610bd482610976565b16838601529183019190830190600101610ba6565b5090979650505050505050565b818382376000910190815291905056fea164736f6c6343000813000a'; } } diff --git a/src/briefcase/deployers/util-contracts/FeeOnTransferDetectorDeployer.sol b/src/briefcase/deployers/util-contracts/FeeOnTransferDetectorDeployer.sol index bcde8b18..1345b6dd 100644 --- a/src/briefcase/deployers/util-contracts/FeeOnTransferDetectorDeployer.sol +++ b/src/briefcase/deployers/util-contracts/FeeOnTransferDetectorDeployer.sol @@ -21,6 +21,7 @@ library FeeOnTransferDetectorDeployer { * - evm_version: paris */ function initcode() internal pure returns (bytes memory) { - return hex'60a060405234801561001057600080fd5b5060405161145938038061145983398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516113c061009960003960008181610575015281816105fb0152610a0901526113c06000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806310d1e85c1461005c578063686dc35914610071578063aa3ad4e414610084578063ade44597146100ad578063da80e4dd146100cd575b600080fd5b61006f61006a366004610e46565b6100e0565b005b61006f61007f366004610edc565b6102da565b610097610092366004610edc565b6102f3565b6040516100a49190610f1d565b60405180910390f35b6100c06100bb366004610f5c565b61030e565b6040516100a49190610fe8565b61006f6100db366004611067565b6103da565b6000339050600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014a91906110ad565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ac91906110ad565b9150915060008088116101bf57816101c1565b825b90506000806101d2878901896110ca565b6040516370a0823160e01b8152306004820152919350915060009083906001600160a01b038616906370a0823190602401602060405180830381865afa158015610220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024491906110ec565b61024e919061111b565b9050600061025c838361053d565b905060008061026b878561055e565b9150915060008061027e8c8a8888610785565b9150915060006040518060a00160405280878152602001848152602001861515815260200185151581526020018315158152506040516020016102c19190610f1d565b6040516020818303038152906040529050805181602001fd5b6102ee6001600160a01b0384168383610941565b505050565b6102fb610e00565b6103068484846109c8565b949350505050565b60608367ffffffffffffffff8111156103295761032961112e565b60405190808252806020026020018201604052801561036257816020015b61034f610e00565b8152602001906001900390816103475790505b50905060005b848110156103d1576103a186868381811061038557610385611144565b905060200201602081019061039a919061115a565b85856109c8565b8282815181106103b3576103b3611144565b602002602001018190525080806103c990611177565b915050610368565b50949350505050565b60405163686dc35960e01b81526001600160a01b0380861660048301528416602482015260448101839052309063686dc35990606401600060405180830381600087803b15801561042a57600080fd5b505af192505050801561043b575060015b6104ba573d808015610469576040519150601f19603f3d011682016040523d82523d6000602084013e61046e565b606091505b5060448151101561047e57600080fd5b6004810190508080602001905181019061049891906111b4565b60405162461bcd60e51b81526004016104b1919061128d565b60405180910390fd5b6040516370a0823160e01b81526001600160a01b03848116600483015260009183918716906370a0823190602401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052991906110ec565b6040805192909114156020830152016102c1565b600061055761271084610550858261111b565b9190610c66565b9392505050565b6040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260009182918291908616906370a0823190602401602060405180830381865afa1580156105cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f091906110ec565b90503063da80e4dd867f00000000000000000000000000000000000000000000000000000000000000008761062581876112a0565b6040516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909216602484015260448301526064820152608401600060405180830381600087803b15801561067957600080fd5b505af192505050801561068a575060015b61077d573d8080156106b8576040519150601f19603f3d011682016040523d82523d6000602084013e6106bd565b606091505b50602081511115610764576004810190506000818060200190518101906106e491906111b4565b60408051808201909152600f81526e1514905394d1915497d19052531151608a1b6020918201528151908201209091507f74070f287f0ec8bf99f019cdcc4e806934e7ec77618231bede1aa47e84c9848e01610743576001935061075e565b80604051631fa44c4b60e21b81526004016104b1919061128d565b5061077b565b8080602001905181019061077891906112c3565b93505b505b509250929050565b6040516370a0823160e01b81526001600160a01b03858116600483015260009182918291908716906370a0823190602401602060405180830381865afa1580156107d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f791906110ec565b60405163686dc35960e01b81526001600160a01b0380891660048301528916602482015260448101879052909150309063686dc35990606401600060405180830381600087803b15801561084a57600080fd5b505af192505050801561085b575060015b61089c573d808015610889576040519150601f19603f3d011682016040523d82523d6000602084013e61088e565b606091505b508493506001925050610937565b6040516370a0823160e01b81526001600160a01b03888116600483015260009183918916906370a0823190602401602060405180830381865afa1580156108e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090b91906110ec565b610915919061111b565b90506000610923828861111b565b90506109328161271089610c66565b945050505b5094509492505050565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806109c25760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016104b1565b50505050565b6109d0610e00565b826001600160a01b0316846001600160a01b031603610a025760405163100dac0560e11b815260040160405180910390fd5b6000610a2f7f00000000000000000000000000000000000000000000000000000000000000008686610c8c565b60408051600481526024810182526020810180516001600160e01b0316630dfe168160e01b17905290519192506000916001600160a01b03841691610a73916112de565b600060405180830381855afa9150503d8060008114610aae576040519150601f19603f3d011682016040523d82523d6000602084013e610ab3565b606091505b509150508051600003610ad9576040516310df924f60e31b815260040160405180910390fd5b600081806020019051810190610aef91906110ad565b9050600080826001600160a01b0316896001600160a01b031614610b1557600087610b19565b8660005b6040516370a0823160e01b815230600482015291935091506000906001600160a01b038b16906370a0823190602401602060405180830381865afa158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8991906110ec565b90506000869050806001600160a01b031663022c0d9f858530868e604051602001610bbe929190918252602082015260400190565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401610bec94939291906112fa565b600060405180830381600087803b158015610c0657600080fd5b505af1925050508015610c17575060015b610c58573d808015610c45576040519150601f19603f3d011682016040523d82523d6000602084013e610c4a565b606091505b50610c5481610d65565b9850505b505050505050509392505050565b6000826000190484118302158202610c7d57600080fd5b50910281810615159190040190565b6000806000610c9b8585610d9d565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001610d439291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b610d6d610e00565b815160a014610d7e57815182602001fd5b81806020019051810190610d929190611331565b92915050565b919050565b600080826001600160a01b0316846001600160a01b031603610dbe57600080fd5b826001600160a01b0316846001600160a01b031610610dde578284610de1565b83835b90925090506001600160a01b038216610df957600080fd5b9250929050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b6001600160a01b0381168114610e4357600080fd5b50565b600080600080600060808688031215610e5e57600080fd5b8535610e6981610e2e565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e9457600080fd5b818801915088601f830112610ea857600080fd5b813581811115610eb757600080fd5b896020828501011115610ec957600080fd5b9699959850939650602001949392505050565b600080600060608486031215610ef157600080fd5b8335610efc81610e2e565b92506020840135610f0c81610e2e565b929592945050506040919091013590565b60a08101610d92828480518252602081015160208301526040810151151560408301526060810151151560608301526080810151151560808301525050565b60008060008060608587031215610f7257600080fd5b843567ffffffffffffffff80821115610f8a57600080fd5b818701915087601f830112610f9e57600080fd5b813581811115610fad57600080fd5b8860208260051b8501011115610fc257600080fd5b60209283019650945050850135610fd881610e2e565b9396929550929360400135925050565b6020808252825182820181905260009190848201906040850190845b8181101561105b5761104883855180518252602081015160208301526040810151151560408301526060810151151560608301526080810151151560808301525050565b9284019260a09290920191600101611004565b50909695505050505050565b6000806000806080858703121561107d57600080fd5b843561108881610e2e565b9350602085013561109881610e2e565b93969395505050506040820135916060013590565b6000602082840312156110bf57600080fd5b815161055781610e2e565b600080604083850312156110dd57600080fd5b50508035926020909101359150565b6000602082840312156110fe57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d9257610d92611105565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561116c57600080fd5b813561055781610e2e565b60006001820161118957611189611105565b5060010190565b60005b838110156111ab578181015183820152602001611193565b50506000910152565b6000602082840312156111c657600080fd5b815167ffffffffffffffff808211156111de57600080fd5b818401915084601f8301126111f257600080fd5b8151818111156112045761120461112e565b604051601f8201601f19908116603f0116810190838211818310171561122c5761122c61112e565b8160405282815287602084870101111561124557600080fd5b611256836020830160208801611190565b979650505050505050565b60008151808452611279816020860160208601611190565b601f01601f19169290920160200192915050565b6020815260006105576020830184611261565b80820180821115610d9257610d92611105565b80518015158114610d9857600080fd5b6000602082840312156112d557600080fd5b610557826112b3565b600082516112f0818460208701611190565b9190910192915050565b84815283602082015260018060a01b03831660408201526080606082015260006113276080830184611261565b9695505050505050565b600060a0828403121561134357600080fd5b60405160a0810181811067ffffffffffffffff821117156113665761136661112e565b80604052508251815260208301516020820152611385604084016112b3565b6040820152611396606084016112b3565b60608201526113a7608084016112b3565b6080820152939250505056fea164736f6c6343000813000a'; + return + hex'60a060405234801561001057600080fd5b5060405161145938038061145983398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516113c061009960003960008181610575015281816105fb0152610a0901526113c06000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806310d1e85c1461005c578063686dc35914610071578063aa3ad4e414610084578063ade44597146100ad578063da80e4dd146100cd575b600080fd5b61006f61006a366004610e46565b6100e0565b005b61006f61007f366004610edc565b6102da565b610097610092366004610edc565b6102f3565b6040516100a49190610f1d565b60405180910390f35b6100c06100bb366004610f5c565b61030e565b6040516100a49190610fe8565b61006f6100db366004611067565b6103da565b6000339050600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014a91906110ad565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ac91906110ad565b9150915060008088116101bf57816101c1565b825b90506000806101d2878901896110ca565b6040516370a0823160e01b8152306004820152919350915060009083906001600160a01b038616906370a0823190602401602060405180830381865afa158015610220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024491906110ec565b61024e919061111b565b9050600061025c838361053d565b905060008061026b878561055e565b9150915060008061027e8c8a8888610785565b9150915060006040518060a00160405280878152602001848152602001861515815260200185151581526020018315158152506040516020016102c19190610f1d565b6040516020818303038152906040529050805181602001fd5b6102ee6001600160a01b0384168383610941565b505050565b6102fb610e00565b6103068484846109c8565b949350505050565b60608367ffffffffffffffff8111156103295761032961112e565b60405190808252806020026020018201604052801561036257816020015b61034f610e00565b8152602001906001900390816103475790505b50905060005b848110156103d1576103a186868381811061038557610385611144565b905060200201602081019061039a919061115a565b85856109c8565b8282815181106103b3576103b3611144565b602002602001018190525080806103c990611177565b915050610368565b50949350505050565b60405163686dc35960e01b81526001600160a01b0380861660048301528416602482015260448101839052309063686dc35990606401600060405180830381600087803b15801561042a57600080fd5b505af192505050801561043b575060015b6104ba573d808015610469576040519150601f19603f3d011682016040523d82523d6000602084013e61046e565b606091505b5060448151101561047e57600080fd5b6004810190508080602001905181019061049891906111b4565b60405162461bcd60e51b81526004016104b1919061128d565b60405180910390fd5b6040516370a0823160e01b81526001600160a01b03848116600483015260009183918716906370a0823190602401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052991906110ec565b6040805192909114156020830152016102c1565b600061055761271084610550858261111b565b9190610c66565b9392505050565b6040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260009182918291908616906370a0823190602401602060405180830381865afa1580156105cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f091906110ec565b90503063da80e4dd867f00000000000000000000000000000000000000000000000000000000000000008761062581876112a0565b6040516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909216602484015260448301526064820152608401600060405180830381600087803b15801561067957600080fd5b505af192505050801561068a575060015b61077d573d8080156106b8576040519150601f19603f3d011682016040523d82523d6000602084013e6106bd565b606091505b50602081511115610764576004810190506000818060200190518101906106e491906111b4565b60408051808201909152600f81526e1514905394d1915497d19052531151608a1b6020918201528151908201209091507f74070f287f0ec8bf99f019cdcc4e806934e7ec77618231bede1aa47e84c9848e01610743576001935061075e565b80604051631fa44c4b60e21b81526004016104b1919061128d565b5061077b565b8080602001905181019061077891906112c3565b93505b505b509250929050565b6040516370a0823160e01b81526001600160a01b03858116600483015260009182918291908716906370a0823190602401602060405180830381865afa1580156107d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f791906110ec565b60405163686dc35960e01b81526001600160a01b0380891660048301528916602482015260448101879052909150309063686dc35990606401600060405180830381600087803b15801561084a57600080fd5b505af192505050801561085b575060015b61089c573d808015610889576040519150601f19603f3d011682016040523d82523d6000602084013e61088e565b606091505b508493506001925050610937565b6040516370a0823160e01b81526001600160a01b03888116600483015260009183918916906370a0823190602401602060405180830381865afa1580156108e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090b91906110ec565b610915919061111b565b90506000610923828861111b565b90506109328161271089610c66565b945050505b5094509492505050565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806109c25760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016104b1565b50505050565b6109d0610e00565b826001600160a01b0316846001600160a01b031603610a025760405163100dac0560e11b815260040160405180910390fd5b6000610a2f7f00000000000000000000000000000000000000000000000000000000000000008686610c8c565b60408051600481526024810182526020810180516001600160e01b0316630dfe168160e01b17905290519192506000916001600160a01b03841691610a73916112de565b600060405180830381855afa9150503d8060008114610aae576040519150601f19603f3d011682016040523d82523d6000602084013e610ab3565b606091505b509150508051600003610ad9576040516310df924f60e31b815260040160405180910390fd5b600081806020019051810190610aef91906110ad565b9050600080826001600160a01b0316896001600160a01b031614610b1557600087610b19565b8660005b6040516370a0823160e01b815230600482015291935091506000906001600160a01b038b16906370a0823190602401602060405180830381865afa158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8991906110ec565b90506000869050806001600160a01b031663022c0d9f858530868e604051602001610bbe929190918252602082015260400190565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401610bec94939291906112fa565b600060405180830381600087803b158015610c0657600080fd5b505af1925050508015610c17575060015b610c58573d808015610c45576040519150601f19603f3d011682016040523d82523d6000602084013e610c4a565b606091505b50610c5481610d65565b9850505b505050505050509392505050565b6000826000190484118302158202610c7d57600080fd5b50910281810615159190040190565b6000806000610c9b8585610d9d565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001610d439291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b610d6d610e00565b815160a014610d7e57815182602001fd5b81806020019051810190610d929190611331565b92915050565b919050565b600080826001600160a01b0316846001600160a01b031603610dbe57600080fd5b826001600160a01b0316846001600160a01b031610610dde578284610de1565b83835b90925090506001600160a01b038216610df957600080fd5b9250929050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b6001600160a01b0381168114610e4357600080fd5b50565b600080600080600060808688031215610e5e57600080fd5b8535610e6981610e2e565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610e9457600080fd5b818801915088601f830112610ea857600080fd5b813581811115610eb757600080fd5b896020828501011115610ec957600080fd5b9699959850939650602001949392505050565b600080600060608486031215610ef157600080fd5b8335610efc81610e2e565b92506020840135610f0c81610e2e565b929592945050506040919091013590565b60a08101610d92828480518252602081015160208301526040810151151560408301526060810151151560608301526080810151151560808301525050565b60008060008060608587031215610f7257600080fd5b843567ffffffffffffffff80821115610f8a57600080fd5b818701915087601f830112610f9e57600080fd5b813581811115610fad57600080fd5b8860208260051b8501011115610fc257600080fd5b60209283019650945050850135610fd881610e2e565b9396929550929360400135925050565b6020808252825182820181905260009190848201906040850190845b8181101561105b5761104883855180518252602081015160208301526040810151151560408301526060810151151560608301526080810151151560808301525050565b9284019260a09290920191600101611004565b50909695505050505050565b6000806000806080858703121561107d57600080fd5b843561108881610e2e565b9350602085013561109881610e2e565b93969395505050506040820135916060013590565b6000602082840312156110bf57600080fd5b815161055781610e2e565b600080604083850312156110dd57600080fd5b50508035926020909101359150565b6000602082840312156110fe57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d9257610d92611105565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561116c57600080fd5b813561055781610e2e565b60006001820161118957611189611105565b5060010190565b60005b838110156111ab578181015183820152602001611193565b50506000910152565b6000602082840312156111c657600080fd5b815167ffffffffffffffff808211156111de57600080fd5b818401915084601f8301126111f257600080fd5b8151818111156112045761120461112e565b604051601f8201601f19908116603f0116810190838211818310171561122c5761122c61112e565b8160405282815287602084870101111561124557600080fd5b611256836020830160208801611190565b979650505050505050565b60008151808452611279816020860160208601611190565b601f01601f19169290920160200192915050565b6020815260006105576020830184611261565b80820180821115610d9257610d92611105565b80518015158114610d9857600080fd5b6000602082840312156112d557600080fd5b610557826112b3565b600082516112f0818460208701611190565b9190910192915050565b84815283602082015260018060a01b03831660408201526080606082015260006113276080830184611261565b9695505050505050565b600060a0828403121561134357600080fd5b60405160a0810181811067ffffffffffffffff821117156113665761136661112e565b80604052508251815260208301516020820152611385604084016112b3565b6040820152611396606084016112b3565b60608201526113a7608084016112b3565b6080820152939250505056fea164736f6c6343000813000a'; } } diff --git a/src/briefcase/deployers/v2-core/UniswapV2FactoryDeployer.sol b/src/briefcase/deployers/v2-core/UniswapV2FactoryDeployer.sol index 2b5d6a0b..0108f99c 100644 --- a/src/briefcase/deployers/v2-core/UniswapV2FactoryDeployer.sol +++ b/src/briefcase/deployers/v2-core/UniswapV2FactoryDeployer.sol @@ -13,7 +13,8 @@ library UniswapV2FactoryDeployer { /// @dev this is the init code of the previously deployed v2 factory instances with a different metadata hash. Using this version ensures the correct pool init code hash function legacyInitcode() internal pure returns (bytes memory) { - return hex'608060405234801561001057600080fd5b506040516136863803806136868339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055613623806100636000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a2e74af61161005b578063a2e74af6146100fd578063c9c6539614610132578063e6a439051461016d578063f46901ed146101a857610088565b8063017e7e581461008d578063094b7415146100be5780631e3dd18b146100c6578063574f2ba3146100e3575b600080fd5b6100956101db565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100956101f7565b610095600480360360208110156100dc57600080fd5b5035610213565b6100eb610247565b60408051918252519081900360200190f35b6101306004803603602081101561011357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661024d565b005b6100956004803603604081101561014857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661031a565b6100956004803603604081101561018357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661076d565b610130600480360360208110156101be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107a0565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061022057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60035490565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056323a204944454e544943414c5f4144445245535345530000604482015290519081900360640190fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106103f45783856103f7565b84845b909250905073ffffffffffffffffffffffffffffffffffffffff821661047e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f556e697377617056323a205a45524f5f41444452455353000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82811660009081526002602090815260408083208585168452909152902054161561051f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f556e697377617056323a20504149525f45584953545300000000000000000000604482015290519081900360640190fd5b6060604051806020016105319061086d565b6020820181038252601f19601f82011660405250905060008383604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f5604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff84811660008181526002602081815260408084208987168086529083528185208054978d167fffffffffffffffffffffffff000000000000000000000000000000000000000098891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b600260209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16331461082657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612d748061087b8339019056fe60806040526001600c5534801561001557600080fd5b506040514690806052612d228239604080519182900360520182208282018252600a8352692ab734b9bbb0b8102b1960b11b6020938401528151808301835260018152603160f81b908401528151808401919091527fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612c1d806101056000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610d57565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610d90565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610de5565b604080519115158252519081900360200190f35b61036a610dfc565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610e18565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e1e565b61039b610efd565b610400610f21565b6040805160ff9092168252519081900360200190f35b61039b610f26565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610f2c565b61039b611005565b61039b61100b565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611011565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113cb565b61039b6113dd565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113e3565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f5565b6040805192835260208301919091528051918290030190f35b610261611892565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356118cb565b61039b6118d8565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118de565b61036a611ad4565b61036a611af0565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b0c565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611dd8565b610257611df5565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612b2f6025913960400191505060405180910390fd5b600080610767610d90565b5091509150816dffffffffffffffffffffffffffff168710801561079a5750806dffffffffffffffffffffffffffff1686105b6107ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b786021913960400191505060405180910390fd5b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061085457508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6108bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f556e697377617056323a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8a156108d0576108d0828a8d611fdb565b89156108e1576108e1818a8c611fdb565b86156109c3578873ffffffffffffffffffffffffffffffffffffffff166310d1e85c338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d6020811015610a5957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610acb57600080fd5b505afa158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610b1f576000610b35565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610b59576000610b6f565b89856dffffffffffffffffffffffffffff160383035b90506000821180610b805750600081115b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612b546024913960400191505060405180910390fd5b6000610c09610beb84600363ffffffff6121e816565b610bfd876103e863ffffffff6121e816565b9063ffffffff61226e16565b90506000610c21610beb84600363ffffffff6121e816565b9050610c59620f4240610c4d6dffffffffffffffffffffffffffff8b8116908b1663ffffffff6121e816565b9063ffffffff6121e816565b610c69838363ffffffff6121e816565b1015610cd657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e697377617056323a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610ce4848488886122e0565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a81526020017f556e69737761702056320000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610df233848461259c565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610ee85773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610eb6908363ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610ef384848461260b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314610fb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461108457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611094610d90565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561110e57600080fd5b505afa158015611122573d6000803e3d6000fd5b505050506040513d602081101561113857600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156111b157600080fd5b505afa1580156111c5573d6000803e3d6000fd5b505050506040513d60208110156111db57600080fd5b505190506000611201836dffffffffffffffffffffffffffff871663ffffffff61226e16565b90506000611225836dffffffffffffffffffffffffffff871663ffffffff61226e16565b9050600061123387876126ec565b600054909150806112705761125c6103e8610bfd611257878763ffffffff6121e816565b612878565b985061126b60006103e86128ca565b6112cd565b6112ca6dffffffffffffffffffffffffffff8916611294868463ffffffff6121e816565b8161129b57fe5b046dffffffffffffffffffffffffffff89166112bd868563ffffffff6121e816565b816112c457fe5b0461297a565b98505b60008911611326576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612bc16028913960400191505060405180910390fd5b6113308a8a6128ca565b61133c86868a8a6122e0565b811561137e5760085461137a906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461146957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611479610d90565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b1580156114fb57600080fd5b505afa15801561150f573d6000803e3d6000fd5b505050506040513d602081101561152557600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b15801561159957600080fd5b505afa1580156115ad573d6000803e3d6000fd5b505050506040513d60208110156115c357600080fd5b5051306000908152600160205260408120549192506115e288886126ec565b600054909150806115f9848763ffffffff6121e816565b8161160057fe5b049a5080611614848663ffffffff6121e816565b8161161b57fe5b04995060008b11801561162e575060008a115b611683576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612b996028913960400191505060405180910390fd5b61168d3084612992565b611698878d8d611fdb565b6116a3868d8c611fdb565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561170f57600080fd5b505afa158015611723573d6000803e3d6000fd5b505050506040513d602081101561173957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505193506117e585858b8b6122e0565b811561182757600854611823906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600681526020017f554e492d5632000000000000000000000000000000000000000000000000000081525081565b6000610df233848461260b565b6103e881565b600c5460011461194f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611a2b9285928792611a26926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b505afa158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b50519063ffffffff61226e16565b611fdb565b600854604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611aca9284928792611a26926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611b7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e697377617056323a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611cdc573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611d5757508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611dcd89898961259c565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611fd49273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611edd57600080fd5b505afa158015611ef1573d6000803e3d6000fd5b505050506040513d6020811015611f0757600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b158015611f7a57600080fd5b505afa158015611f8e573d6000803e3d6000fd5b505050506040513d6020811015611fa457600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166122e0565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106120e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120a4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612143576040519150601f19603f3d011682016040523d82523d6000602084013e612148565b606091505b5091509150818015612176575080511580612176575080806020019051602081101561217357600080fd5b50515b6121e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b60008115806122035750508082028282828161220057fe5b04145b610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061230c57506dffffffffffffffffffffffffffff8311155b61237757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e697377617056323a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906123c757506dffffffffffffffffffffffffffff841615155b80156123e257506dffffffffffffffffffffffffffff831615155b15612492578063ffffffff16612425856123fb86612a57565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff612a7b16565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612465846123fb87612a57565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612641908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612683908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561275757600080fd5b505afa15801561276b573d6000803e3d6000fd5b505050506040513d602081101561278157600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061286457801561285f5760006127d86112576dffffffffffffffffffffffffffff88811690881663ffffffff6121e816565b905060006127e583612878565b90508082111561285c576000612813612804848463ffffffff61226e16565b6000549063ffffffff6121e816565b905060006128388361282c86600563ffffffff6121e816565b9063ffffffff612abc16565b9050600081838161284557fe5b04905080156128585761285887826128ca565b5050505b50505b612870565b8015612870576000600b555b505092915050565b600060038211156128bb575080600160028204015b818110156128b5578091506002818285816128a457fe5b0401816128ad57fe5b04905061288d565b506128c5565b81156128c5575060015b919050565b6000546128dd908263ffffffff612abc16565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054612915908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310612989578161298b565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546129c8908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612a02908263ffffffff61226e16565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612ab457fe5b049392505050565b80820182811015610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a723158207dca18479e58487606bf70c79e44d8dee62353c9ee6d01f9a9d70885b8765f2264736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a265627a7a723158202760f92d7fa1db6f5aa16307bad65df4ebcc8550c4b1f03755ab8dfd830c178f64736f6c63430005100032'; + return + hex'608060405234801561001057600080fd5b506040516136863803806136868339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055613623806100636000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a2e74af61161005b578063a2e74af6146100fd578063c9c6539614610132578063e6a439051461016d578063f46901ed146101a857610088565b8063017e7e581461008d578063094b7415146100be5780631e3dd18b146100c6578063574f2ba3146100e3575b600080fd5b6100956101db565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100956101f7565b610095600480360360208110156100dc57600080fd5b5035610213565b6100eb610247565b60408051918252519081900360200190f35b6101306004803603602081101561011357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661024d565b005b6100956004803603604081101561014857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661031a565b6100956004803603604081101561018357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661076d565b610130600480360360208110156101be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107a0565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061022057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60035490565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056323a204944454e544943414c5f4144445245535345530000604482015290519081900360640190fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106103f45783856103f7565b84845b909250905073ffffffffffffffffffffffffffffffffffffffff821661047e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f556e697377617056323a205a45524f5f41444452455353000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82811660009081526002602090815260408083208585168452909152902054161561051f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f556e697377617056323a20504149525f45584953545300000000000000000000604482015290519081900360640190fd5b6060604051806020016105319061086d565b6020820181038252601f19601f82011660405250905060008383604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f5604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff84811660008181526002602081815260408084208987168086529083528185208054978d167fffffffffffffffffffffffff000000000000000000000000000000000000000098891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b600260209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16331461082657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612d748061087b8339019056fe60806040526001600c5534801561001557600080fd5b506040514690806052612d228239604080519182900360520182208282018252600a8352692ab734b9bbb0b8102b1960b11b6020938401528151808301835260018152603160f81b908401528151808401919091527fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612c1d806101056000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610d57565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610d90565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610de5565b604080519115158252519081900360200190f35b61036a610dfc565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610e18565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e1e565b61039b610efd565b610400610f21565b6040805160ff9092168252519081900360200190f35b61039b610f26565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610f2c565b61039b611005565b61039b61100b565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611011565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113cb565b61039b6113dd565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113e3565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f5565b6040805192835260208301919091528051918290030190f35b610261611892565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356118cb565b61039b6118d8565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118de565b61036a611ad4565b61036a611af0565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b0c565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611dd8565b610257611df5565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612b2f6025913960400191505060405180910390fd5b600080610767610d90565b5091509150816dffffffffffffffffffffffffffff168710801561079a5750806dffffffffffffffffffffffffffff1686105b6107ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b786021913960400191505060405180910390fd5b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061085457508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6108bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f556e697377617056323a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8a156108d0576108d0828a8d611fdb565b89156108e1576108e1818a8c611fdb565b86156109c3578873ffffffffffffffffffffffffffffffffffffffff166310d1e85c338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d6020811015610a5957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610acb57600080fd5b505afa158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610b1f576000610b35565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610b59576000610b6f565b89856dffffffffffffffffffffffffffff160383035b90506000821180610b805750600081115b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612b546024913960400191505060405180910390fd5b6000610c09610beb84600363ffffffff6121e816565b610bfd876103e863ffffffff6121e816565b9063ffffffff61226e16565b90506000610c21610beb84600363ffffffff6121e816565b9050610c59620f4240610c4d6dffffffffffffffffffffffffffff8b8116908b1663ffffffff6121e816565b9063ffffffff6121e816565b610c69838363ffffffff6121e816565b1015610cd657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e697377617056323a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610ce4848488886122e0565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a81526020017f556e69737761702056320000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610df233848461259c565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610ee85773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610eb6908363ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610ef384848461260b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314610fb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461108457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611094610d90565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561110e57600080fd5b505afa158015611122573d6000803e3d6000fd5b505050506040513d602081101561113857600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156111b157600080fd5b505afa1580156111c5573d6000803e3d6000fd5b505050506040513d60208110156111db57600080fd5b505190506000611201836dffffffffffffffffffffffffffff871663ffffffff61226e16565b90506000611225836dffffffffffffffffffffffffffff871663ffffffff61226e16565b9050600061123387876126ec565b600054909150806112705761125c6103e8610bfd611257878763ffffffff6121e816565b612878565b985061126b60006103e86128ca565b6112cd565b6112ca6dffffffffffffffffffffffffffff8916611294868463ffffffff6121e816565b8161129b57fe5b046dffffffffffffffffffffffffffff89166112bd868563ffffffff6121e816565b816112c457fe5b0461297a565b98505b60008911611326576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612bc16028913960400191505060405180910390fd5b6113308a8a6128ca565b61133c86868a8a6122e0565b811561137e5760085461137a906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461146957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611479610d90565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b1580156114fb57600080fd5b505afa15801561150f573d6000803e3d6000fd5b505050506040513d602081101561152557600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b15801561159957600080fd5b505afa1580156115ad573d6000803e3d6000fd5b505050506040513d60208110156115c357600080fd5b5051306000908152600160205260408120549192506115e288886126ec565b600054909150806115f9848763ffffffff6121e816565b8161160057fe5b049a5080611614848663ffffffff6121e816565b8161161b57fe5b04995060008b11801561162e575060008a115b611683576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612b996028913960400191505060405180910390fd5b61168d3084612992565b611698878d8d611fdb565b6116a3868d8c611fdb565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561170f57600080fd5b505afa158015611723573d6000803e3d6000fd5b505050506040513d602081101561173957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505193506117e585858b8b6122e0565b811561182757600854611823906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600681526020017f554e492d5632000000000000000000000000000000000000000000000000000081525081565b6000610df233848461260b565b6103e881565b600c5460011461194f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611a2b9285928792611a26926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b505afa158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b50519063ffffffff61226e16565b611fdb565b600854604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611aca9284928792611a26926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611b7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e697377617056323a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611cdc573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611d5757508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611dcd89898961259c565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611fd49273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611edd57600080fd5b505afa158015611ef1573d6000803e3d6000fd5b505050506040513d6020811015611f0757600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b158015611f7a57600080fd5b505afa158015611f8e573d6000803e3d6000fd5b505050506040513d6020811015611fa457600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166122e0565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106120e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120a4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612143576040519150601f19603f3d011682016040523d82523d6000602084013e612148565b606091505b5091509150818015612176575080511580612176575080806020019051602081101561217357600080fd5b50515b6121e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b60008115806122035750508082028282828161220057fe5b04145b610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061230c57506dffffffffffffffffffffffffffff8311155b61237757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e697377617056323a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906123c757506dffffffffffffffffffffffffffff841615155b80156123e257506dffffffffffffffffffffffffffff831615155b15612492578063ffffffff16612425856123fb86612a57565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff612a7b16565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612465846123fb87612a57565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612641908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612683908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561275757600080fd5b505afa15801561276b573d6000803e3d6000fd5b505050506040513d602081101561278157600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061286457801561285f5760006127d86112576dffffffffffffffffffffffffffff88811690881663ffffffff6121e816565b905060006127e583612878565b90508082111561285c576000612813612804848463ffffffff61226e16565b6000549063ffffffff6121e816565b905060006128388361282c86600563ffffffff6121e816565b9063ffffffff612abc16565b9050600081838161284557fe5b04905080156128585761285887826128ca565b5050505b50505b612870565b8015612870576000600b555b505092915050565b600060038211156128bb575080600160028204015b818110156128b5578091506002818285816128a457fe5b0401816128ad57fe5b04905061288d565b506128c5565b81156128c5575060015b919050565b6000546128dd908263ffffffff612abc16565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054612915908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310612989578161298b565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546129c8908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612a02908263ffffffff61226e16565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612ab457fe5b049392505050565b80820182811015610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a723158207dca18479e58487606bf70c79e44d8dee62353c9ee6d01f9a9d70885b8765f2264736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a265627a7a723158202760f92d7fa1db6f5aa16307bad65df4ebcc8550c4b1f03755ab8dfd830c178f64736f6c63430005100032'; } /** @@ -27,6 +28,7 @@ library UniswapV2FactoryDeployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'608060405234801561001057600080fd5b506040516136863803806136868339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055613623806100636000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a2e74af61161005b578063a2e74af6146100fd578063c9c6539614610132578063e6a439051461016d578063f46901ed146101a857610088565b8063017e7e581461008d578063094b7415146100be5780631e3dd18b146100c6578063574f2ba3146100e3575b600080fd5b6100956101db565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100956101f7565b610095600480360360208110156100dc57600080fd5b5035610213565b6100eb610247565b60408051918252519081900360200190f35b6101306004803603602081101561011357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661024d565b005b6100956004803603604081101561014857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661031a565b6100956004803603604081101561018357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661076d565b610130600480360360208110156101be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107a0565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061022057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60035490565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056323a204944454e544943414c5f4144445245535345530000604482015290519081900360640190fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106103f45783856103f7565b84845b909250905073ffffffffffffffffffffffffffffffffffffffff821661047e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f556e697377617056323a205a45524f5f41444452455353000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82811660009081526002602090815260408083208585168452909152902054161561051f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f556e697377617056323a20504149525f45584953545300000000000000000000604482015290519081900360640190fd5b6060604051806020016105319061086d565b6020820181038252601f19601f82011660405250905060008383604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f5604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff84811660008181526002602081815260408084208987168086529083528185208054978d167fffffffffffffffffffffffff000000000000000000000000000000000000000098891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b600260209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16331461082657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612d748061087b8339019056fe60806040526001600c5534801561001557600080fd5b506040514690806052612d228239604080519182900360520182208282018252600a8352692ab734b9bbb0b8102b1960b11b6020938401528151808301835260018152603160f81b908401528151808401919091527fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612c1d806101056000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610d57565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610d90565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610de5565b604080519115158252519081900360200190f35b61036a610dfc565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610e18565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e1e565b61039b610efd565b610400610f21565b6040805160ff9092168252519081900360200190f35b61039b610f26565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610f2c565b61039b611005565b61039b61100b565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611011565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113cb565b61039b6113dd565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113e3565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f5565b6040805192835260208301919091528051918290030190f35b610261611892565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356118cb565b61039b6118d8565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118de565b61036a611ad4565b61036a611af0565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b0c565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611dd8565b610257611df5565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612b2f6025913960400191505060405180910390fd5b600080610767610d90565b5091509150816dffffffffffffffffffffffffffff168710801561079a5750806dffffffffffffffffffffffffffff1686105b6107ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b786021913960400191505060405180910390fd5b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061085457508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6108bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f556e697377617056323a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8a156108d0576108d0828a8d611fdb565b89156108e1576108e1818a8c611fdb565b86156109c3578873ffffffffffffffffffffffffffffffffffffffff166310d1e85c338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d6020811015610a5957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610acb57600080fd5b505afa158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610b1f576000610b35565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610b59576000610b6f565b89856dffffffffffffffffffffffffffff160383035b90506000821180610b805750600081115b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612b546024913960400191505060405180910390fd5b6000610c09610beb84600363ffffffff6121e816565b610bfd876103e863ffffffff6121e816565b9063ffffffff61226e16565b90506000610c21610beb84600363ffffffff6121e816565b9050610c59620f4240610c4d6dffffffffffffffffffffffffffff8b8116908b1663ffffffff6121e816565b9063ffffffff6121e816565b610c69838363ffffffff6121e816565b1015610cd657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e697377617056323a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610ce4848488886122e0565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a81526020017f556e69737761702056320000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610df233848461259c565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610ee85773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610eb6908363ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610ef384848461260b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314610fb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461108457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611094610d90565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561110e57600080fd5b505afa158015611122573d6000803e3d6000fd5b505050506040513d602081101561113857600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156111b157600080fd5b505afa1580156111c5573d6000803e3d6000fd5b505050506040513d60208110156111db57600080fd5b505190506000611201836dffffffffffffffffffffffffffff871663ffffffff61226e16565b90506000611225836dffffffffffffffffffffffffffff871663ffffffff61226e16565b9050600061123387876126ec565b600054909150806112705761125c6103e8610bfd611257878763ffffffff6121e816565b612878565b985061126b60006103e86128ca565b6112cd565b6112ca6dffffffffffffffffffffffffffff8916611294868463ffffffff6121e816565b8161129b57fe5b046dffffffffffffffffffffffffffff89166112bd868563ffffffff6121e816565b816112c457fe5b0461297a565b98505b60008911611326576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612bc16028913960400191505060405180910390fd5b6113308a8a6128ca565b61133c86868a8a6122e0565b811561137e5760085461137a906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461146957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611479610d90565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b1580156114fb57600080fd5b505afa15801561150f573d6000803e3d6000fd5b505050506040513d602081101561152557600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b15801561159957600080fd5b505afa1580156115ad573d6000803e3d6000fd5b505050506040513d60208110156115c357600080fd5b5051306000908152600160205260408120549192506115e288886126ec565b600054909150806115f9848763ffffffff6121e816565b8161160057fe5b049a5080611614848663ffffffff6121e816565b8161161b57fe5b04995060008b11801561162e575060008a115b611683576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612b996028913960400191505060405180910390fd5b61168d3084612992565b611698878d8d611fdb565b6116a3868d8c611fdb565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561170f57600080fd5b505afa158015611723573d6000803e3d6000fd5b505050506040513d602081101561173957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505193506117e585858b8b6122e0565b811561182757600854611823906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600681526020017f554e492d5632000000000000000000000000000000000000000000000000000081525081565b6000610df233848461260b565b6103e881565b600c5460011461194f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611a2b9285928792611a26926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b505afa158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b50519063ffffffff61226e16565b611fdb565b600854604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611aca9284928792611a26926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611b7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e697377617056323a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611cdc573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611d5757508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611dcd89898961259c565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611fd49273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611edd57600080fd5b505afa158015611ef1573d6000803e3d6000fd5b505050506040513d6020811015611f0757600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b158015611f7a57600080fd5b505afa158015611f8e573d6000803e3d6000fd5b505050506040513d6020811015611fa457600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166122e0565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106120e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120a4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612143576040519150601f19603f3d011682016040523d82523d6000602084013e612148565b606091505b5091509150818015612176575080511580612176575080806020019051602081101561217357600080fd5b50515b6121e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b60008115806122035750508082028282828161220057fe5b04145b610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061230c57506dffffffffffffffffffffffffffff8311155b61237757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e697377617056323a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906123c757506dffffffffffffffffffffffffffff841615155b80156123e257506dffffffffffffffffffffffffffff831615155b15612492578063ffffffff16612425856123fb86612a57565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff612a7b16565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612465846123fb87612a57565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612641908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612683908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561275757600080fd5b505afa15801561276b573d6000803e3d6000fd5b505050506040513d602081101561278157600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061286457801561285f5760006127d86112576dffffffffffffffffffffffffffff88811690881663ffffffff6121e816565b905060006127e583612878565b90508082111561285c576000612813612804848463ffffffff61226e16565b6000549063ffffffff6121e816565b905060006128388361282c86600563ffffffff6121e816565b9063ffffffff612abc16565b9050600081838161284557fe5b04905080156128585761285887826128ca565b5050505b50505b612870565b8015612870576000600b555b505092915050565b600060038211156128bb575080600160028204015b818110156128b5578091506002818285816128a457fe5b0401816128ad57fe5b04905061288d565b506128c5565b81156128c5575060015b919050565b6000546128dd908263ffffffff612abc16565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054612915908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310612989578161298b565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546129c8908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612a02908263ffffffff61226e16565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612ab457fe5b049392505050565b80820182811015610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a72315820c55e7857202066d6d03d830e1920a8020bd7492e5937141fe8dd7df87c990f7564736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a265627a7a72315820dca363fa18835d7f3677b33930847dbcc4a134ed4bd3c8000333352cd3bbb5a564736f6c63430005100032'; + return + hex'608060405234801561001057600080fd5b506040516136863803806136868339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055613623806100636000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a2e74af61161005b578063a2e74af6146100fd578063c9c6539614610132578063e6a439051461016d578063f46901ed146101a857610088565b8063017e7e581461008d578063094b7415146100be5780631e3dd18b146100c6578063574f2ba3146100e3575b600080fd5b6100956101db565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100956101f7565b610095600480360360208110156100dc57600080fd5b5035610213565b6100eb610247565b60408051918252519081900360200190f35b6101306004803603602081101561011357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661024d565b005b6100956004803603604081101561014857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661031a565b6100956004803603604081101561018357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661076d565b610130600480360360208110156101be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107a0565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061022057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60035490565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056323a204944454e544943414c5f4144445245535345530000604482015290519081900360640190fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106103f45783856103f7565b84845b909250905073ffffffffffffffffffffffffffffffffffffffff821661047e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f556e697377617056323a205a45524f5f41444452455353000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82811660009081526002602090815260408083208585168452909152902054161561051f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f556e697377617056323a20504149525f45584953545300000000000000000000604482015290519081900360640190fd5b6060604051806020016105319061086d565b6020820181038252601f19601f82011660405250905060008383604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f5604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff84811660008181526002602081815260408084208987168086529083528185208054978d167fffffffffffffffffffffffff000000000000000000000000000000000000000098891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b600260209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16331461082657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612d748061087b8339019056fe60806040526001600c5534801561001557600080fd5b506040514690806052612d228239604080519182900360520182208282018252600a8352692ab734b9bbb0b8102b1960b11b6020938401528151808301835260018152603160f81b908401528151808401919091527fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612c1d806101056000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610d57565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610d90565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610de5565b604080519115158252519081900360200190f35b61036a610dfc565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610e18565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e1e565b61039b610efd565b610400610f21565b6040805160ff9092168252519081900360200190f35b61039b610f26565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610f2c565b61039b611005565b61039b61100b565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611011565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113cb565b61039b6113dd565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113e3565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f5565b6040805192835260208301919091528051918290030190f35b610261611892565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356118cb565b61039b6118d8565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118de565b61036a611ad4565b61036a611af0565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b0c565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611dd8565b610257611df5565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612b2f6025913960400191505060405180910390fd5b600080610767610d90565b5091509150816dffffffffffffffffffffffffffff168710801561079a5750806dffffffffffffffffffffffffffff1686105b6107ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b786021913960400191505060405180910390fd5b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061085457508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6108bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f556e697377617056323a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8a156108d0576108d0828a8d611fdb565b89156108e1576108e1818a8c611fdb565b86156109c3578873ffffffffffffffffffffffffffffffffffffffff166310d1e85c338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d6020811015610a5957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610acb57600080fd5b505afa158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610b1f576000610b35565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610b59576000610b6f565b89856dffffffffffffffffffffffffffff160383035b90506000821180610b805750600081115b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612b546024913960400191505060405180910390fd5b6000610c09610beb84600363ffffffff6121e816565b610bfd876103e863ffffffff6121e816565b9063ffffffff61226e16565b90506000610c21610beb84600363ffffffff6121e816565b9050610c59620f4240610c4d6dffffffffffffffffffffffffffff8b8116908b1663ffffffff6121e816565b9063ffffffff6121e816565b610c69838363ffffffff6121e816565b1015610cd657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e697377617056323a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610ce4848488886122e0565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a81526020017f556e69737761702056320000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610df233848461259c565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610ee85773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610eb6908363ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610ef384848461260b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314610fb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461108457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611094610d90565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561110e57600080fd5b505afa158015611122573d6000803e3d6000fd5b505050506040513d602081101561113857600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156111b157600080fd5b505afa1580156111c5573d6000803e3d6000fd5b505050506040513d60208110156111db57600080fd5b505190506000611201836dffffffffffffffffffffffffffff871663ffffffff61226e16565b90506000611225836dffffffffffffffffffffffffffff871663ffffffff61226e16565b9050600061123387876126ec565b600054909150806112705761125c6103e8610bfd611257878763ffffffff6121e816565b612878565b985061126b60006103e86128ca565b6112cd565b6112ca6dffffffffffffffffffffffffffff8916611294868463ffffffff6121e816565b8161129b57fe5b046dffffffffffffffffffffffffffff89166112bd868563ffffffff6121e816565b816112c457fe5b0461297a565b98505b60008911611326576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612bc16028913960400191505060405180910390fd5b6113308a8a6128ca565b61133c86868a8a6122e0565b811561137e5760085461137a906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461146957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611479610d90565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b1580156114fb57600080fd5b505afa15801561150f573d6000803e3d6000fd5b505050506040513d602081101561152557600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b15801561159957600080fd5b505afa1580156115ad573d6000803e3d6000fd5b505050506040513d60208110156115c357600080fd5b5051306000908152600160205260408120549192506115e288886126ec565b600054909150806115f9848763ffffffff6121e816565b8161160057fe5b049a5080611614848663ffffffff6121e816565b8161161b57fe5b04995060008b11801561162e575060008a115b611683576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612b996028913960400191505060405180910390fd5b61168d3084612992565b611698878d8d611fdb565b6116a3868d8c611fdb565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561170f57600080fd5b505afa158015611723573d6000803e3d6000fd5b505050506040513d602081101561173957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505193506117e585858b8b6122e0565b811561182757600854611823906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600681526020017f554e492d5632000000000000000000000000000000000000000000000000000081525081565b6000610df233848461260b565b6103e881565b600c5460011461194f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611a2b9285928792611a26926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b505afa158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b50519063ffffffff61226e16565b611fdb565b600854604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611aca9284928792611a26926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611b7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e697377617056323a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611cdc573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611d5757508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611dcd89898961259c565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611fd49273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611edd57600080fd5b505afa158015611ef1573d6000803e3d6000fd5b505050506040513d6020811015611f0757600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b158015611f7a57600080fd5b505afa158015611f8e573d6000803e3d6000fd5b505050506040513d6020811015611fa457600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166122e0565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106120e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120a4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612143576040519150601f19603f3d011682016040523d82523d6000602084013e612148565b606091505b5091509150818015612176575080511580612176575080806020019051602081101561217357600080fd5b50515b6121e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b60008115806122035750508082028282828161220057fe5b04145b610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061230c57506dffffffffffffffffffffffffffff8311155b61237757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e697377617056323a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906123c757506dffffffffffffffffffffffffffff841615155b80156123e257506dffffffffffffffffffffffffffff831615155b15612492578063ffffffff16612425856123fb86612a57565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff612a7b16565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612465846123fb87612a57565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612641908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612683908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561275757600080fd5b505afa15801561276b573d6000803e3d6000fd5b505050506040513d602081101561278157600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061286457801561285f5760006127d86112576dffffffffffffffffffffffffffff88811690881663ffffffff6121e816565b905060006127e583612878565b90508082111561285c576000612813612804848463ffffffff61226e16565b6000549063ffffffff6121e816565b905060006128388361282c86600563ffffffff6121e816565b9063ffffffff612abc16565b9050600081838161284557fe5b04905080156128585761285887826128ca565b5050505b50505b612870565b8015612870576000600b555b505092915050565b600060038211156128bb575080600160028204015b818110156128b5578091506002818285816128a457fe5b0401816128ad57fe5b04905061288d565b506128c5565b81156128c5575060015b919050565b6000546128dd908263ffffffff612abc16565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054612915908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310612989578161298b565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546129c8908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612a02908263ffffffff61226e16565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612ab457fe5b049392505050565b80820182811015610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a72315820c55e7857202066d6d03d830e1920a8020bd7492e5937141fe8dd7df87c990f7564736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a265627a7a72315820dca363fa18835d7f3677b33930847dbcc4a134ed4bd3c8000333352cd3bbb5a564736f6c63430005100032'; } } diff --git a/src/briefcase/deployers/v2-periphery/UniswapV2Router01Deployer.sol b/src/briefcase/deployers/v2-periphery/UniswapV2Router01Deployer.sol index b810f270..80ff1f79 100644 --- a/src/briefcase/deployers/v2-periphery/UniswapV2Router01Deployer.sol +++ b/src/briefcase/deployers/v2-periphery/UniswapV2Router01Deployer.sol @@ -22,6 +22,7 @@ library UniswapV2Router02Deployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'60c060405234801561001057600080fd5b506040516140fe3803806140fe8339818101604052604081101561003357600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c613fc261013c600039806101655280610b235280610b5e5280610c9b5280610f5e52806113b852806115e65280611799528061182e5280611afd5280611eb352806121e9528061223f528061227352806122f4528061250e52806126be5280612753525080610d8d5280610e8b5280611031528061106a528061121552806114aa52806116cc528061186d5280611a335280611ba65280611e385280611e615280611e91528061206e528061221d52806125f452806127925280613211528061325452806137e752806138c852806139485250613fc26000f3fe6080604052600436106101485760003560e01c80638803dbee116100c0578063d06ca61f11610074578063e8e3370011610059578063e8e3370014610937578063f305d719146109c4578063fb3bdb4114610a175761018e565b8063d06ca61f14610800578063ded9382a146108b75761018e565b8063ad615dec116100a5578063ad615dec1461074b578063baa2abde14610781578063c45a0155146107eb5761018e565b80638803dbee14610668578063ad5c46481461070d5761018e565b80632195995c116101175780634a25d94a116100fc5780634a25d94a146105305780637ff36ab5146105d557806385f8c2591461020c5761018e565b80632195995c1461040057806338ed17391461048b5761018e565b806302751cec14610193578063054d50d41461020c57806318cbafe5146102545780631f00ca74146103495761018e565b3661018e573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461018c57fe5b005b600080fd5b34801561019f57600080fd5b506101f3600480360360c08110156101b657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610aaa565b6040805192835260208301919091528051918290030190f35b34801561021857600080fd5b506102426004803603606081101561022f57600080fd5b5080359060208101359060400135610bfd565b60408051918252519081900360200190f35b34801561026057600080fd5b506102f9600480360360a081101561027757600080fd5b81359160208101359181019060608101604082013564010000000081111561029e57600080fd5b8201836020820111156102b057600080fd5b803590602001918460208302840111640100000000831117156102d257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c12565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561033557818101518382015260200161031d565b505050509050019250505060405180910390f35b34801561035557600080fd5b506102f96004803603604081101561036c57600080fd5b8135919081019060408101602082013564010000000081111561038e57600080fd5b8201836020820111156103a057600080fd5b803590602001918460208302840111640100000000831117156103c257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061102a945050505050565b34801561040c57600080fd5b506101f3600480360361016081101561042457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611060565b34801561049757600080fd5b506102f9600480360360a08110156104ae57600080fd5b8135916020810135918101906060810160408201356401000000008111156104d557600080fd5b8201836020820111156104e757600080fd5b8035906020019184602083028401116401000000008311171561050957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561119e565b34801561053c57600080fd5b506102f9600480360360a081101561055357600080fd5b81359160208101359181019060608101604082013564010000000081111561057a57600080fd5b82018360208201111561058c57600080fd5b803590602001918460208302840111640100000000831117156105ae57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561132f565b6102f9600480360360808110156105eb57600080fd5b8135919081019060408101602082013564010000000081111561060d57600080fd5b82018360208201111561061f57600080fd5b8035906020019184602083028401116401000000008311171561064157600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611572565b34801561067457600080fd5b506102f9600480360360a081101561068b57600080fd5b8135916020810135918101906060810160408201356401000000008111156106b257600080fd5b8201836020820111156106c457600080fd5b803590602001918460208302840111640100000000831117156106e657600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119bc565b34801561071957600080fd5b50610722611afb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561075757600080fd5b506102426004803603606081101561076e57600080fd5b5080359060208101359060400135611b1f565b34801561078d57600080fd5b506101f3600480360360e08110156107a457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135611b2c565b3480156107f757600080fd5b50610722611e36565b34801561080c57600080fd5b506102f96004803603604081101561082357600080fd5b8135919081019060408101602082013564010000000081111561084557600080fd5b82018360208201111561085757600080fd5b8035906020019184602083028401116401000000008311171561087957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611e5a945050505050565b3480156108c357600080fd5b506101f360048036036101408110156108db57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611e87565b34801561094357600080fd5b506109a6600480360361010081101561095b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135611fdf565b60408051938452602084019290925282820152519081900360600190f35b6109a6600480360360c08110156109da57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a0013561216e565b6102f960048036036080811015610a2d57600080fd5b81359190810190604081016020820135640100000000811115610a4f57600080fd5b820183602082011115610a6157600080fd5b80359060200191846020830284011164010000000083111715610a8357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561249a565b6000808242811015610b1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b610b4c897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a611b2c565b9093509150610b5c8986856128e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bcf57600080fd5b505af1158015610be3573d6000803e3d6000fd5b50505050610bf18583612ac6565b50965096945050505050565b6000610c0a848484612c03565b949350505050565b60608142811015610c8457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110610ce957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d8857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b610de67f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d2792505050565b91508682600184510381518110610df957fe5b60200260200101511015610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f3c602b913960400191505060405180910390fd5b610f1d86866000818110610e6857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633610f037f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610eb757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b6001818110610ee157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612e8d565b85600081518110610f1057fe5b6020026020010151612f78565b610f5c82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613148915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d83600185510381518110610fa857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fe657600080fd5b505af1158015610ffa573d6000803e3d6000fd5b5050505061101f848360018551038151811061101257fe5b6020026020010151612ac6565b509695505050505050565b60606110577f000000000000000000000000000000000000000000000000000000000000000084846133cf565b90505b92915050565b60008060006110907f00000000000000000000000000000000000000000000000000000000000000008f8f612e8d565b905060008761109f578c6110c1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b505050506111848f8f8f8f8f8f8f611b2c565b809450819550505050509b509b9950505050505050505050565b6060814281101561121057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61126e7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d2792505050565b9150868260018451038151811061128157fe5b602002602001015110156112e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f3c602b913960400191505060405180910390fd5b6112f086866000818110610e6857fe5b61101f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613148915050565b606081428110156113a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061140657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6115037f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133cf92505050565b9150868260008151811061151357fe5b60200260200101511115610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ecc6027913960400191505060405180910390fd5b606081428110156115e457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061162857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6117257f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d2792505050565b9150868260018451038151811061173857fe5b60200260200101511015611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f3c602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836000815181106117e057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561181357600080fd5b505af1158015611827573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6118c37f00000000000000000000000000000000000000000000000000000000000000008989600081811061189957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a6001818110610ee157fe5b846000815181106118d057fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561194157600080fd5b505af1158015611955573d6000803e3d6000fd5b505050506040513d602081101561196b57600080fd5b505161197357fe5b6119b282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613148915050565b5095945050505050565b60608142811015611a2e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b611a8c7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133cf92505050565b91508682600081518110611a9c57fe5b602002602001015111156112e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ecc6027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610c0a84848461355d565b6000808242811015611b9f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6000611bcc7f00000000000000000000000000000000000000000000000000000000000000008c8c612e8d565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b505050506040513d6020811015611c7757600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015611cea57600080fd5b505af1158015611cfe573d6000803e3d6000fd5b505050506040513d6040811015611d1457600080fd5b50805160209091015190925090506000611d2e8e8e61363d565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614611d6b578183611d6e565b82825b90975095508a871015611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613ef36026913960400191505060405180910390fd5b89861015611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e596026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606110577f00000000000000000000000000000000000000000000000000000000000000008484612d27565b6000806000611ed77f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000612e8d565b9050600087611ee6578c611f08565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b158015611fa457600080fd5b505af1158015611fb8573d6000803e3d6000fd5b50505050611fca8e8e8e8e8e8e610aaa565b909f909e509c50505050505050505050505050565b6000806000834281101561205457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6120628c8c8c8c8c8c613790565b909450925060006120947f00000000000000000000000000000000000000000000000000000000000000008e8e612e8d565b90506120a28d338388612f78565b6120ae8c338387612f78565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561212d57600080fd5b505af1158015612141573d6000803e3d6000fd5b505050506040513d602081101561215757600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156121e357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6122118a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613790565b909450925060006122637f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000612e8d565b90506122718b338388612f78565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122d957600080fd5b505af11580156122ed573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561239957600080fd5b505af11580156123ad573d6000803e3d6000fd5b505050506040513d60208110156123c357600080fd5b50516123cb57fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561244a57600080fd5b505af115801561245e573d6000803e3d6000fd5b505050506040513d602081101561247457600080fd5b505192503484101561248c5761248c33853403612ac6565b505096509650969350505050565b6060814281101561250c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061255057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b61264d7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133cf92505050565b9150348260008151811061265d57fe5b602002602001015111156126bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ecc6027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061270557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561273857600080fd5b505af115801561274c573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6127be7f00000000000000000000000000000000000000000000000000000000000000008989600081811061189957fe5b846000815181106127cb57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561283c57600080fd5b505af1158015612850573d6000803e3d6000fd5b505050506040513d602081101561286657600080fd5b505161286e57fe5b6128ad82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613148915050565b816000815181106128ba57fe5b60200260200101513411156119b2576119b233836000815181106128da57fe5b60200260200101513403612ac6565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106129bf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612982565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a21576040519150601f19603f3d011682016040523d82523d6000602084013e612a26565b606091505b5091509150818015612a54575080511580612a545750808060200190516020811015612a5157600080fd5b50515b612abf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310612b3d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612b00565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612b9f576040519150601f19603f3d011682016040523d82523d6000602084013e612ba4565b606091505b5050905080612bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613f196023913960400191505060405180910390fd5b505050565b6000808411612c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f8b602b913960400191505060405180910390fd5b600083118015612c6d5750600082115b612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b6000612cd6856103e563ffffffff613a9116565b90506000612cea828563ffffffff613a9116565b90506000612d1083612d04886103e863ffffffff613a9116565b9063ffffffff613b1716565b9050808281612d1b57fe5b04979650505050505050565b6060600282511015612d9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015612db257600080fd5b50604051908082528060200260200182016040528015612ddc578160200160208202803683370190505b5090508281600081518110612ded57fe5b60200260200101818152505060005b6001835103811015612e8557600080612e3f87868581518110612e1b57fe5b6020026020010151878660010181518110612e3257fe5b6020026020010151613b89565b91509150612e61848481518110612e5257fe5b60200260200101518383612c03565b848460010181518110612e7057fe5b60209081029190910101525050600101612dfc565b509392505050565b6000806000612e9c858561363d565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061305657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613019565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130b8576040519150601f19603f3d011682016040523d82523d6000602084013e6130bd565b606091505b50915091508180156130eb5750805115806130eb57508080602001905160208110156130e857600080fd5b50515b613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f676024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156133c95760008084838151811061316657fe5b602002602001015185846001018151811061317d57fe5b6020026020010151915091506000613195838361363d565b50905060008785600101815181106131a957fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146131f1578260006131f5565b6000835b91509150600060028a5103881061320c578861324d565b61324d7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061324057fe5b6020026020010151612e8d565b905061327a7f00000000000000000000000000000000000000000000000000000000000000008888612e8d565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156132c4576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561334f578181015183820152602001613337565b50505050905090810190601f16801561337c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561339e57600080fd5b505af11580156133b2573d6000803e3d6000fd5b50506001909901985061314b975050505050505050565b50505050565b606060028251101561344257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561345a57600080fd5b50604051908082528060200260200182016040528015613484578160200160208202803683370190505b509050828160018351038151811061349857fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015612e85576000806134f8878660018603815181106134e457fe5b6020026020010151878681518110612e3257fe5b9150915061351a84848151811061350b57fe5b60200260200101518383613c71565b84600185038151811061352957fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016134c8565b60008084116135b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613ea76025913960400191505060405180910390fd5b6000831180156135c75750600082115b61361c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b8261362d858463ffffffff613a9116565b8161363457fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156136c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613e346025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106136ff578284613702565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661378957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561383057600080fd5b505afa158015613844573d6000803e3d6000fd5b505050506040513d602081101561385a57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561394057604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561391357600080fd5b505af1158015613927573d6000803e3d6000fd5b505050506040513d602081101561393d57600080fd5b50505b60008061396e7f00000000000000000000000000000000000000000000000000000000000000008b8b613b89565b91509150816000148015613980575080155b1561399057879350869250613a84565b600061399d89848461355d565b9050878111613a0a57858110156139ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e596026913960400191505060405180910390fd5b889450925082613a82565b6000613a1789848661355d565b905089811115613a2357fe5b87811015613a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613ef36026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580613aac57505080820282828281613aa957fe5b04145b61105a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561105a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000613b98858561363d565b509050600080613ba9888888612e8d565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613bee57600080fd5b505afa158015613c02573d6000803e3d6000fd5b505050506040513d6060811015613c1857600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614613c5f578082613c62565b81815b90999098509650505050505050565b6000808411613ccb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613e08602c913960400191505060405180910390fd5b600083118015613cdb5750600082115b613d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b6000613d546103e8613d48868863ffffffff613a9116565b9063ffffffff613a9116565b90506000613d6e6103e5613d48868963ffffffff613d9516565b9050613d8b6001828481613d7e57fe5b049063ffffffff613b1716565b9695505050505050565b8082038281111561105a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fdfe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a164736f6c6343000606000a'; + return + hex'60c060405234801561001057600080fd5b506040516140fe3803806140fe8339818101604052604081101561003357600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c613fc261013c600039806101655280610b235280610b5e5280610c9b5280610f5e52806113b852806115e65280611799528061182e5280611afd5280611eb352806121e9528061223f528061227352806122f4528061250e52806126be5280612753525080610d8d5280610e8b5280611031528061106a528061121552806114aa52806116cc528061186d5280611a335280611ba65280611e385280611e615280611e91528061206e528061221d52806125f452806127925280613211528061325452806137e752806138c852806139485250613fc26000f3fe6080604052600436106101485760003560e01c80638803dbee116100c0578063d06ca61f11610074578063e8e3370011610059578063e8e3370014610937578063f305d719146109c4578063fb3bdb4114610a175761018e565b8063d06ca61f14610800578063ded9382a146108b75761018e565b8063ad615dec116100a5578063ad615dec1461074b578063baa2abde14610781578063c45a0155146107eb5761018e565b80638803dbee14610668578063ad5c46481461070d5761018e565b80632195995c116101175780634a25d94a116100fc5780634a25d94a146105305780637ff36ab5146105d557806385f8c2591461020c5761018e565b80632195995c1461040057806338ed17391461048b5761018e565b806302751cec14610193578063054d50d41461020c57806318cbafe5146102545780631f00ca74146103495761018e565b3661018e573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461018c57fe5b005b600080fd5b34801561019f57600080fd5b506101f3600480360360c08110156101b657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610aaa565b6040805192835260208301919091528051918290030190f35b34801561021857600080fd5b506102426004803603606081101561022f57600080fd5b5080359060208101359060400135610bfd565b60408051918252519081900360200190f35b34801561026057600080fd5b506102f9600480360360a081101561027757600080fd5b81359160208101359181019060608101604082013564010000000081111561029e57600080fd5b8201836020820111156102b057600080fd5b803590602001918460208302840111640100000000831117156102d257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c12565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561033557818101518382015260200161031d565b505050509050019250505060405180910390f35b34801561035557600080fd5b506102f96004803603604081101561036c57600080fd5b8135919081019060408101602082013564010000000081111561038e57600080fd5b8201836020820111156103a057600080fd5b803590602001918460208302840111640100000000831117156103c257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061102a945050505050565b34801561040c57600080fd5b506101f3600480360361016081101561042457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611060565b34801561049757600080fd5b506102f9600480360360a08110156104ae57600080fd5b8135916020810135918101906060810160408201356401000000008111156104d557600080fd5b8201836020820111156104e757600080fd5b8035906020019184602083028401116401000000008311171561050957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561119e565b34801561053c57600080fd5b506102f9600480360360a081101561055357600080fd5b81359160208101359181019060608101604082013564010000000081111561057a57600080fd5b82018360208201111561058c57600080fd5b803590602001918460208302840111640100000000831117156105ae57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561132f565b6102f9600480360360808110156105eb57600080fd5b8135919081019060408101602082013564010000000081111561060d57600080fd5b82018360208201111561061f57600080fd5b8035906020019184602083028401116401000000008311171561064157600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611572565b34801561067457600080fd5b506102f9600480360360a081101561068b57600080fd5b8135916020810135918101906060810160408201356401000000008111156106b257600080fd5b8201836020820111156106c457600080fd5b803590602001918460208302840111640100000000831117156106e657600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119bc565b34801561071957600080fd5b50610722611afb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561075757600080fd5b506102426004803603606081101561076e57600080fd5b5080359060208101359060400135611b1f565b34801561078d57600080fd5b506101f3600480360360e08110156107a457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135611b2c565b3480156107f757600080fd5b50610722611e36565b34801561080c57600080fd5b506102f96004803603604081101561082357600080fd5b8135919081019060408101602082013564010000000081111561084557600080fd5b82018360208201111561085757600080fd5b8035906020019184602083028401116401000000008311171561087957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611e5a945050505050565b3480156108c357600080fd5b506101f360048036036101408110156108db57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611e87565b34801561094357600080fd5b506109a6600480360361010081101561095b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135611fdf565b60408051938452602084019290925282820152519081900360600190f35b6109a6600480360360c08110156109da57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a0013561216e565b6102f960048036036080811015610a2d57600080fd5b81359190810190604081016020820135640100000000811115610a4f57600080fd5b820183602082011115610a6157600080fd5b80359060200191846020830284011164010000000083111715610a8357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561249a565b6000808242811015610b1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b610b4c897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a611b2c565b9093509150610b5c8986856128e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bcf57600080fd5b505af1158015610be3573d6000803e3d6000fd5b50505050610bf18583612ac6565b50965096945050505050565b6000610c0a848484612c03565b949350505050565b60608142811015610c8457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110610ce957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d8857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b610de67f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d2792505050565b91508682600184510381518110610df957fe5b60200260200101511015610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f3c602b913960400191505060405180910390fd5b610f1d86866000818110610e6857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633610f037f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610eb757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b6001818110610ee157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612e8d565b85600081518110610f1057fe5b6020026020010151612f78565b610f5c82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613148915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d83600185510381518110610fa857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fe657600080fd5b505af1158015610ffa573d6000803e3d6000fd5b5050505061101f848360018551038151811061101257fe5b6020026020010151612ac6565b509695505050505050565b60606110577f000000000000000000000000000000000000000000000000000000000000000084846133cf565b90505b92915050565b60008060006110907f00000000000000000000000000000000000000000000000000000000000000008f8f612e8d565b905060008761109f578c6110c1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b505050506111848f8f8f8f8f8f8f611b2c565b809450819550505050509b509b9950505050505050505050565b6060814281101561121057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61126e7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d2792505050565b9150868260018451038151811061128157fe5b602002602001015110156112e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f3c602b913960400191505060405180910390fd5b6112f086866000818110610e6857fe5b61101f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613148915050565b606081428110156113a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061140657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6115037f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133cf92505050565b9150868260008151811061151357fe5b60200260200101511115610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ecc6027913960400191505060405180910390fd5b606081428110156115e457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061162857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6117257f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d2792505050565b9150868260018451038151811061173857fe5b60200260200101511015611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f3c602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836000815181106117e057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561181357600080fd5b505af1158015611827573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6118c37f00000000000000000000000000000000000000000000000000000000000000008989600081811061189957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a6001818110610ee157fe5b846000815181106118d057fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561194157600080fd5b505af1158015611955573d6000803e3d6000fd5b505050506040513d602081101561196b57600080fd5b505161197357fe5b6119b282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613148915050565b5095945050505050565b60608142811015611a2e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b611a8c7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133cf92505050565b91508682600081518110611a9c57fe5b602002602001015111156112e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ecc6027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610c0a84848461355d565b6000808242811015611b9f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6000611bcc7f00000000000000000000000000000000000000000000000000000000000000008c8c612e8d565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b505050506040513d6020811015611c7757600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015611cea57600080fd5b505af1158015611cfe573d6000803e3d6000fd5b505050506040513d6040811015611d1457600080fd5b50805160209091015190925090506000611d2e8e8e61363d565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614611d6b578183611d6e565b82825b90975095508a871015611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613ef36026913960400191505060405180910390fd5b89861015611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e596026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606110577f00000000000000000000000000000000000000000000000000000000000000008484612d27565b6000806000611ed77f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000612e8d565b9050600087611ee6578c611f08565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b158015611fa457600080fd5b505af1158015611fb8573d6000803e3d6000fd5b50505050611fca8e8e8e8e8e8e610aaa565b909f909e509c50505050505050505050505050565b6000806000834281101561205457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6120628c8c8c8c8c8c613790565b909450925060006120947f00000000000000000000000000000000000000000000000000000000000000008e8e612e8d565b90506120a28d338388612f78565b6120ae8c338387612f78565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561212d57600080fd5b505af1158015612141573d6000803e3d6000fd5b505050506040513d602081101561215757600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156121e357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6122118a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613790565b909450925060006122637f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000612e8d565b90506122718b338388612f78565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122d957600080fd5b505af11580156122ed573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561239957600080fd5b505af11580156123ad573d6000803e3d6000fd5b505050506040513d60208110156123c357600080fd5b50516123cb57fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561244a57600080fd5b505af115801561245e573d6000803e3d6000fd5b505050506040513d602081101561247457600080fd5b505192503484101561248c5761248c33853403612ac6565b505096509650969350505050565b6060814281101561250c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061255057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b61264d7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133cf92505050565b9150348260008151811061265d57fe5b602002602001015111156126bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ecc6027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061270557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561273857600080fd5b505af115801561274c573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6127be7f00000000000000000000000000000000000000000000000000000000000000008989600081811061189957fe5b846000815181106127cb57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561283c57600080fd5b505af1158015612850573d6000803e3d6000fd5b505050506040513d602081101561286657600080fd5b505161286e57fe5b6128ad82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613148915050565b816000815181106128ba57fe5b60200260200101513411156119b2576119b233836000815181106128da57fe5b60200260200101513403612ac6565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106129bf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612982565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a21576040519150601f19603f3d011682016040523d82523d6000602084013e612a26565b606091505b5091509150818015612a54575080511580612a545750808060200190516020811015612a5157600080fd5b50515b612abf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310612b3d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612b00565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612b9f576040519150601f19603f3d011682016040523d82523d6000602084013e612ba4565b606091505b5050905080612bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613f196023913960400191505060405180910390fd5b505050565b6000808411612c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f8b602b913960400191505060405180910390fd5b600083118015612c6d5750600082115b612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b6000612cd6856103e563ffffffff613a9116565b90506000612cea828563ffffffff613a9116565b90506000612d1083612d04886103e863ffffffff613a9116565b9063ffffffff613b1716565b9050808281612d1b57fe5b04979650505050505050565b6060600282511015612d9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015612db257600080fd5b50604051908082528060200260200182016040528015612ddc578160200160208202803683370190505b5090508281600081518110612ded57fe5b60200260200101818152505060005b6001835103811015612e8557600080612e3f87868581518110612e1b57fe5b6020026020010151878660010181518110612e3257fe5b6020026020010151613b89565b91509150612e61848481518110612e5257fe5b60200260200101518383612c03565b848460010181518110612e7057fe5b60209081029190910101525050600101612dfc565b509392505050565b6000806000612e9c858561363d565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061305657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613019565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130b8576040519150601f19603f3d011682016040523d82523d6000602084013e6130bd565b606091505b50915091508180156130eb5750805115806130eb57508080602001905160208110156130e857600080fd5b50515b613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f676024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156133c95760008084838151811061316657fe5b602002602001015185846001018151811061317d57fe5b6020026020010151915091506000613195838361363d565b50905060008785600101815181106131a957fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146131f1578260006131f5565b6000835b91509150600060028a5103881061320c578861324d565b61324d7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061324057fe5b6020026020010151612e8d565b905061327a7f00000000000000000000000000000000000000000000000000000000000000008888612e8d565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156132c4576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561334f578181015183820152602001613337565b50505050905090810190601f16801561337c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561339e57600080fd5b505af11580156133b2573d6000803e3d6000fd5b50506001909901985061314b975050505050505050565b50505050565b606060028251101561344257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561345a57600080fd5b50604051908082528060200260200182016040528015613484578160200160208202803683370190505b509050828160018351038151811061349857fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015612e85576000806134f8878660018603815181106134e457fe5b6020026020010151878681518110612e3257fe5b9150915061351a84848151811061350b57fe5b60200260200101518383613c71565b84600185038151811061352957fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016134c8565b60008084116135b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613ea76025913960400191505060405180910390fd5b6000831180156135c75750600082115b61361c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b8261362d858463ffffffff613a9116565b8161363457fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156136c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613e346025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106136ff578284613702565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661378957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561383057600080fd5b505afa158015613844573d6000803e3d6000fd5b505050506040513d602081101561385a57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561394057604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561391357600080fd5b505af1158015613927573d6000803e3d6000fd5b505050506040513d602081101561393d57600080fd5b50505b60008061396e7f00000000000000000000000000000000000000000000000000000000000000008b8b613b89565b91509150816000148015613980575080155b1561399057879350869250613a84565b600061399d89848461355d565b9050878111613a0a57858110156139ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e596026913960400191505060405180910390fd5b889450925082613a82565b6000613a1789848661355d565b905089811115613a2357fe5b87811015613a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613ef36026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580613aac57505080820282828281613aa957fe5b04145b61105a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561105a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000613b98858561363d565b509050600080613ba9888888612e8d565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613bee57600080fd5b505afa158015613c02573d6000803e3d6000fd5b505050506040513d6060811015613c1857600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614613c5f578082613c62565b81815b90999098509650505050505050565b6000808411613ccb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613e08602c913960400191505060405180910390fd5b600083118015613cdb5750600082115b613d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b6000613d546103e8613d48868863ffffffff613a9116565b9063ffffffff613a9116565b90506000613d6e6103e5613d48868963ffffffff613d9516565b9050613d8b6001828481613d7e57fe5b049063ffffffff613b1716565b9695505050505050565b8082038281111561105a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fdfe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a164736f6c6343000606000a'; } } diff --git a/src/briefcase/deployers/v2-periphery/UniswapV2Router02Deployer.sol b/src/briefcase/deployers/v2-periphery/UniswapV2Router02Deployer.sol index 710cd17d..522bc9a6 100644 --- a/src/briefcase/deployers/v2-periphery/UniswapV2Router02Deployer.sol +++ b/src/briefcase/deployers/v2-periphery/UniswapV2Router02Deployer.sol @@ -22,6 +22,7 @@ library UniswapV2Router02Deployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'60c06040523480156200001157600080fd5b506040516200571538038062005715833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61558e62000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb528061444a528061448d52806147ed52806149ce5280614f49528061502a52806150aa525061558e6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b1565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614381915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614608565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b1565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614796915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2916565b1015611d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614796915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b5095945050505050565b6000610f44848484614b9b565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614cbf565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614796915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d9f565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154bf6026913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154256026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614ef2565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d3383886141b1565b6132e78c3383876141b1565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614ef2565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b3383886141b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6138867f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154e56023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615557602b913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b6000613f0f856103e563ffffffff6151f316565b90506000613f23828563ffffffff6151f316565b90506000613f4983613f3d886103e863ffffffff6151f316565b9063ffffffff61527916565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b60200260200101516152eb565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614d9f565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614252565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b5091509150818015614324575080511580614324575080806020019051602081101561432157600080fd5b50515b614379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155336024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146025760008084838151811061439f57fe5b60200260200101518584600101815181106143b657fe5b60200260200101519150915060006143ce8383614d9f565b50905060008785600101815181106143e257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461442a5782600061442e565b6000835b91509150600060028a510388106144455788614486565b6144867f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061447957fe5b60200260200101516140c6565b90506144b37f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fd576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614588578181015183820152602001614570565b50505050905090810190601f1680156145b55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d757600080fd5b505af11580156145eb573d6000803e3d6000fd5b505060019099019850614384975050505050505050565b50505050565b606060028251101561467b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469357600080fd5b506040519080825280602002602001820160405280156146bd578160200160208202803683370190505b50905082816001835103815181106146d157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147318786600186038151811061471d57fe5b602002602001015187868151811061406b57fe5b9150915061475384848151811061474457fe5b60200260200101518383614b9b565b84600185038151811061476257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614701565b60005b6001835103811015613e37576000808483815181106147b457fe5b60200260200101518584600101815181106147cb57fe5b60200260200101519150915060006147e38383614d9f565b50905060006148137f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486157600080fd5b505afa158015614875573d6000803e3d6000fd5b505050506040513d606081101561488b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d55782846148d8565b83835b9150915061495d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b955061496a868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ae578260006149b2565b6000835b91509150600060028c51038a106149c9578a6149fd565b6149fd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061447957fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aad578181015183820152602001614a95565b50505050905090810190601f168015614ada5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afc57600080fd5b505af1158015614b10573d6000803e3d6000fd5b50506001909b019a506147999950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806153d4602c913960400191505060405180910390fd5b600083118015614c055750600082115b614c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b6000614c7e6103e8614c72868863ffffffff6151f316565b9063ffffffff6151f316565b90506000614c986103e5614c72868963ffffffff614b2916565b9050614cb56001828481614ca857fe5b049063ffffffff61527916565b9695505050505050565b6000808411614d19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154736025913960400191505060405180910390fd5b600083118015614d295750600082115b614d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b82614d8f858463ffffffff6151f316565b81614d9657fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154006025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e61578284614e64565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614eeb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f9257600080fd5b505afa158015614fa6573d6000803e3d6000fd5b505050506040513d6020811015614fbc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150a257604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561507557600080fd5b505af1158015615089573d6000803e3d6000fd5b505050506040513d602081101561509f57600080fd5b50505b6000806150d07f00000000000000000000000000000000000000000000000000000000000000008b8b6152eb565b915091508160001480156150e2575080155b156150f2578793508692506151e6565b60006150ff898484614cbf565b905087811161516c5785811015615161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154256026913960400191505060405180910390fd5b8894509250826151e4565b6000615179898486614cbf565b90508981111561518557fe5b878110156151de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154bf6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061520e5750508082028282828161520b57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152fa8585614d9f565b50905060008061530b8888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561535057600080fd5b505afa158015615364573d6000803e3d6000fd5b505050506040513d606081101561537a57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153c15780826153c4565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a164736f6c6343000606000a'; + return + hex'60c06040523480156200001157600080fd5b506040516200571538038062005715833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61558e62000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb528061444a528061448d52806147ed52806149ce5280614f49528061502a52806150aa525061558e6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b1565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614381915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614608565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b1565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614796915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2916565b1015611d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614796915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b5095945050505050565b6000610f44848484614b9b565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614cbf565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614796915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d9f565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154bf6026913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154256026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614ef2565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d3383886141b1565b6132e78c3383876141b1565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614ef2565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b3383886141b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6138867f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154e56023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615557602b913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b6000613f0f856103e563ffffffff6151f316565b90506000613f23828563ffffffff6151f316565b90506000613f4983613f3d886103e863ffffffff6151f316565b9063ffffffff61527916565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b60200260200101516152eb565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614d9f565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614252565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b5091509150818015614324575080511580614324575080806020019051602081101561432157600080fd5b50515b614379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155336024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146025760008084838151811061439f57fe5b60200260200101518584600101815181106143b657fe5b60200260200101519150915060006143ce8383614d9f565b50905060008785600101815181106143e257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461442a5782600061442e565b6000835b91509150600060028a510388106144455788614486565b6144867f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061447957fe5b60200260200101516140c6565b90506144b37f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fd576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614588578181015183820152602001614570565b50505050905090810190601f1680156145b55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d757600080fd5b505af11580156145eb573d6000803e3d6000fd5b505060019099019850614384975050505050505050565b50505050565b606060028251101561467b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469357600080fd5b506040519080825280602002602001820160405280156146bd578160200160208202803683370190505b50905082816001835103815181106146d157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147318786600186038151811061471d57fe5b602002602001015187868151811061406b57fe5b9150915061475384848151811061474457fe5b60200260200101518383614b9b565b84600185038151811061476257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614701565b60005b6001835103811015613e37576000808483815181106147b457fe5b60200260200101518584600101815181106147cb57fe5b60200260200101519150915060006147e38383614d9f565b50905060006148137f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486157600080fd5b505afa158015614875573d6000803e3d6000fd5b505050506040513d606081101561488b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d55782846148d8565b83835b9150915061495d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b955061496a868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ae578260006149b2565b6000835b91509150600060028c51038a106149c9578a6149fd565b6149fd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061447957fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aad578181015183820152602001614a95565b50505050905090810190601f168015614ada5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afc57600080fd5b505af1158015614b10573d6000803e3d6000fd5b50506001909b019a506147999950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806153d4602c913960400191505060405180910390fd5b600083118015614c055750600082115b614c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b6000614c7e6103e8614c72868863ffffffff6151f316565b9063ffffffff6151f316565b90506000614c986103e5614c72868963ffffffff614b2916565b9050614cb56001828481614ca857fe5b049063ffffffff61527916565b9695505050505050565b6000808411614d19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154736025913960400191505060405180910390fd5b600083118015614d295750600082115b614d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b82614d8f858463ffffffff6151f316565b81614d9657fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154006025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e61578284614e64565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614eeb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f9257600080fd5b505afa158015614fa6573d6000803e3d6000fd5b505050506040513d6020811015614fbc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150a257604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561507557600080fd5b505af1158015615089573d6000803e3d6000fd5b505050506040513d602081101561509f57600080fd5b50505b6000806150d07f00000000000000000000000000000000000000000000000000000000000000008b8b6152eb565b915091508160001480156150e2575080155b156150f2578793508692506151e6565b60006150ff898484614cbf565b905087811161516c5785811015615161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154256026913960400191505060405180910390fd5b8894509250826151e4565b6000615179898486614cbf565b90508981111561518557fe5b878110156151de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154bf6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061520e5750508082028282828161520b57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152fa8585614d9f565b50905060008061530b8888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561535057600080fd5b505afa158015615364573d6000803e3d6000fd5b505050506040513d606081101561537a57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153c15780826153c4565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a164736f6c6343000606000a'; } } diff --git a/src/briefcase/deployers/v3-core/UniswapV3FactoryDeployer.sol b/src/briefcase/deployers/v3-core/UniswapV3FactoryDeployer.sol index 918735f1..09644bf8 100644 --- a/src/briefcase/deployers/v3-core/UniswapV3FactoryDeployer.sol +++ b/src/briefcase/deployers/v3-core/UniswapV3FactoryDeployer.sol @@ -21,6 +21,7 @@ library UniswapV3FactoryDeployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'60a060405234801561001057600080fd5b503060601b608052600380546001600160a01b031916339081179091556040516000907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c908290a36101f4600081815260046020527ffb8cf1d12598d1a039dd1d106665851a96aadf67d0d9ed76fceea282119208b7805462ffffff1916600a90811790915560405190929160008051602061614b83398151915291a3610bb8600081815260046020527f72dffa9b822156d9cf4b0090fa0b656bcb9cc2b2c60eb6acfc20a34f54b31743805462ffffff1916603c90811790915560405190929160008051602061614b83398151915291a3612710600081815260046020527f8cc740d51daa94ff54f33bd779c2d20149f524c340519b49181be5a08615f829805462ffffff191660c890811790915560405190929160008051602061614b83398151915291a360805160601c615fd7610174600039806105515250615fd76000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063890357301161005b578063890357301461013b5780638a7c195f146101855780638da5cb5b146101b0578063a1671295146101b85761007d565b806313af4035146100825780631698ee82146100aa57806322afcccb14610102575b600080fd5b6100a86004803603602081101561009857600080fd5b50356001600160a01b03166101f4565b005b6100e6600480360360608110156100c057600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff16610267565b604080516001600160a01b039092168252519081900360200190f35b6101246004803603602081101561011857600080fd5b503562ffffff16610293565b6040805160029290920b8252519081900360200190f35b6101436102a8565b604080516001600160a01b0396871681529486166020860152929094168383015262ffffff16606083015260029290920b608082015290519081900360a00190f35b6100a86004803603604081101561019b57600080fd5b5062ffffff813516906020013560020b6102de565b6100e66103a1565b6100e6600480360360608110156101ce57600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff166103b0565b6003546001600160a01b0316331461020b57600080fd5b6003546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60056020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b60046020526000908152604090205460020b81565b600054600154600280546001600160a01b03938416939283169281169162ffffff600160a01b83041691600160b81b9004900b85565b6003546001600160a01b031633146102f557600080fd5b620f42408262ffffff161061030957600080fd5b60008160020b13801561032057506140008160020b125b61032957600080fd5b62ffffff8216600090815260046020526040902054600290810b900b1561034f57600080fd5b62ffffff828116600081815260046020526040808220805462ffffff1916600287900b958616179055517fc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc9190a35050565b6003546001600160a01b031681565b60006103ba610546565b826001600160a01b0316846001600160a01b031614156103d957600080fd5b600080846001600160a01b0316866001600160a01b0316106103fc5784866103ff565b85855b90925090506001600160a01b03821661041757600080fd5b62ffffff8416600090815260046020526040902054600290810b9081900b61043e57600080fd5b6001600160a01b0383811660009081526005602090815260408083208685168452825280832062ffffff8a168452909152902054161561047d57600080fd5b61048a308484888561057d565b6001600160a01b03808516600081815260056020818152604080842089871680865290835281852062ffffff8e168087529084528286208054988a166001600160a01b0319998a1681179091558287529484528286208787528452828620818752845294829020805490971684179096558051600289900b815291820192909252815195995091947f783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b71189281900390910190a45050509392505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461057b57600080fd5b565b6040805160a0810182526001600160a01b03878116808352878216602080850182905292881684860181905262ffffff888116606080880182905260028a810b6080998a01819052600080546001600160a01b03199081169099178155600180548a1689179055825490981686177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff16600160a01b8502177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b91830b9095160293909317909255875180870194909452838801929092528281019190915285518083039091018152930193849052825192909101919091209091610686906106f5565b8190604051809103906000f59050801580156106a6573d6000803e3d6000fd5b50600080546001600160a01b0319908116909155600180549091169055600280547fffffffffffff00000000000000000000000000000000000000000000000000001690559695505050505050565b6158c8806107038339019056fe6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002b8417901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61567e6200024a60003980611fee5280614b5f5280614b96525080610c0052806128fd5280614bca5280614bfc525080610cef52806119cb5280611a0252806129455250806111c75280611a855280611ef4528061244452806129215280613e6b5250806108d252806112f55280611a545280611e8e52806123be5280613d2252508061207b528061227d52806128d9525080612bfb525061567e6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806370cf754a116100ee578063c45a015511610097578063ddca3f4311610071578063ddca3f4314610800578063f305839914610820578063f30dba9314610828578063f637731d146108aa576101ae565b8063c45a0155146107d1578063d0c93a7c146107d9578063d21220a7146107f8576101ae565b8063883bdbfd116100c8578063883bdbfd14610633578063a34123a71461073c578063a38807f214610776576101ae565b806370cf754a146105c65780638206a4d1146105ce57806385b66729146105f6576101ae565b80633850c7bd1161015b578063490e6cbc11610135578063490e6cbc146104705780634f1eb3d8146104fc578063514ea4bf1461054d5780635339c296146105a6576101ae565b80633850c7bd1461035b5780633c8a7d8d146103b45780634614131914610456576101ae565b80631ad8b03b1161018c5780631ad8b03b146102aa578063252c09d7146102e157806332148f6714610338576101ae565b80630dfe1681146101b3578063128acb08146101d75780631a68650214610286575b600080fd5b6101bb6108d0565b604080516001600160a01b039092168252519081900360200190f35b61026d600480360360a08110156101ed57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184600183028401116401000000008311171561026257600080fd5b5090925090506108f4565b6040805192835260208301919091528051918290030190f35b61028e6114ad565b604080516001600160801b039092168252519081900360200190f35b6102b26114bc565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102fe600480360360208110156102f757600080fd5b50356114d6565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103596004803603602081101561034e57600080fd5b503561ffff1661151c565b005b610363611616565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61026d600480360360a08110156103ca57600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a08101608082013564010000000081111561041757600080fd5b82018360208201111561042957600080fd5b8035906020019184600183028401116401000000008311171561044b57600080fd5b509092509050611666565b61045e611922565b60408051918252519081900360200190f35b6103596004803603608081101561048657600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156104bd57600080fd5b8201836020820111156104cf57600080fd5b803590602001918460018302840111640100000000831117156104f157600080fd5b509092509050611928565b6102b2600480360360a081101561051257600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d83565b61056a6004803603602081101561056357600080fd5b5035611f9d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61045e600480360360208110156105bc57600080fd5b503560010b611fda565b61028e611fec565b610359600480360360408110156105e457600080fd5b5060ff81358116916020013516612010565b6102b26004803603606081101561060c57600080fd5b506001600160a01b03813516906001600160801b036020820135811691604001351661220f565b6106a36004803603602081101561064957600080fd5b81019060208101813564010000000081111561066457600080fd5b82018360208201111561067657600080fd5b8035906020019184602083028401116401000000008311171561069857600080fd5b5090925090506124dc565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106e75781810151838201526020016106cf565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561072657818101518382015260200161070e565b5050505090500194505050505060405180910390f35b61026d6004803603606081101561075257600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612569565b6107a06004803603604081101561078c57600080fd5b508035600290810b9160200135900b6126e0565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b6101bb6128d7565b6107e16128fb565b6040805160029290920b8252519081900360200190f35b6101bb61291f565b610808612943565b6040805162ffffff9092168252519081900360200190f35b61045e612967565b6108486004803603602081101561083e57600080fd5b503560020b61296d565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b610359600480360360208110156108c057600080fd5b50356001600160a01b03166129db565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108ff612bf0565b85610936576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109ef576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610a3a5780600001516001600160a01b0316866001600160a01b0316118015610a35575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a6c565b80600001516001600160a01b0316866001600160a01b0316108015610a6c57506401000276a36001600160a01b038716115b610aa3576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610ad25760048460a0015160ff16901c610ae5565b60108460a0015160ff1681610ae357fe5b065b60ff1681526004546001600160801b03166020820152604001610b06612c27565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b8257600254610b86565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610bd55750886001600160a01b031681604001516001600160a01b031614155b15610f9f57610be261560e565b60408201516001600160a01b031681526060820151610c25906006907f00000000000000000000000000000000000000000000000000000000000000008f612c2b565b15156040830152600290810b810b60208301819052620d89e719910b1215610c5657620d89e7196020820152610c75565b6020810151620d89e860029190910b1315610c7557620d89e860208201525b610c828160200151612d6d565b6001600160a01b031660608201526040820151610d13908d610cbc578b6001600160a01b031683606001516001600160a01b031611610cd6565b8b6001600160a01b031683606001516001600160a01b0316105b610ce4578260600151610ce6565b8b5b60c085015185517f000000000000000000000000000000000000000000000000000000000000000061309f565b60c085015260a084015260808301526001600160a01b031660408301528215610d7557610d498160c00151826080015101613291565b825103825260a0810151610d6b90610d6090613291565b6020840151906132a7565b6020830152610db0565b610d828160a00151613291565b825101825260c08101516080820151610daa91610d9f9101613291565b6020840151906132c3565b60208301525b835160ff1615610df6576000846000015160ff168260c0015181610dd057fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e3557610e298160c00151600160801b8460c001516001600160801b03166132d9565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f5e57806040015115610f35578360a00151610ebf57610e9d846040015160008760200151886040015188602001518a606001516008613389909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610f0b82602001518e610ed657600154610edc565b84608001515b8f610eeb578560800151610eef565b6002545b608089015160608a015160408b0151600595949392919061351c565b90508c15610f17576000035b610f258360c00151826135ef565b6001600160801b031660c0840152505b8b610f44578060200151610f4d565b60018160200151035b600290810b900b6060830152610f99565b80600001516001600160a01b031682604001516001600160a01b031614610f9957610f8c82604001516136a5565b600290810b900b60608301525b50610baf565b836020015160020b816060015160020b1461107a57600080610fed86604001518660400151886020015188602001518a606001518b6080015160086139d1909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b93909316929092029190911773ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116179055506110ac9050565b60408101516000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110f25760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561114257608081015160015560a08101516001600160801b03161561113d5760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b611188565b608081015160025560a08101516001600160801b0316156111885760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b1515146111a157602081015181518b036111ae565b80600001518a0381602001515b90965094508a156112e75760008512156111f0576111f07f00000000000000000000000000000000000000000000000000000000000000008d87600003613b86565b60006111fa613cd4565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561127e57600080fd5b505af1158015611292573d6000803e3d6000fd5b5050505061129e613cd4565b6112a88289613e0d565b11156112e1576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611411565b600086121561131e5761131e7f00000000000000000000000000000000000000000000000000000000000000008d88600003613b86565b6000611328613e1d565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156113ac57600080fd5b505af11580156113c0573d6000803e3d6000fd5b505050506113cc613e1d565b6113d68288613e0d565b111561140f576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114e757600080fd5b015463ffffffff81169150640100000000810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff16611560576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611575612bf0565b60008054600160d81b900461ffff169061159160088385613eb5565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115fe576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff166116ad576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b0385166116cd57600080fd5b60008061171b60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016117118a6001600160801b0316613f58565b600f0b9052613f69565b9250925050819350809250600080600086111561173d5761173a613cd4565b91505b841561174e5761174b613e1d565b90505b336001600160a01b031663d348799787878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b50505050600086111561183b576117f9613cd4565b6118038388613e0d565b111561183b576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561188b57611849613e1d565b6118538287613e0d565b111561188b576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff1661196c576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611981612bf0565b6004546001600160801b0316806119c3576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119f8867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a2f867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a3b613cd4565b90506000611a47613e1d565b90508815611a7a57611a7a7f00000000000000000000000000000000000000000000000000000000000000008b8b613b86565b8715611aab57611aab7f00000000000000000000000000000000000000000000000000000000000000008b8a613b86565b336001600160a01b031663e9cbafb085858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b505050506000611b4f613cd4565b90506000611b5b613e1d565b905081611b688588613e0d565b1115611ba0576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611bab8487613e0d565b1115611be3576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c725760008054600160e81b9004600f16908115611c16578160ff168481611c1057fe5b04611c19565b60005b90506001600160801b03811615611c4c57600380546001600160801b038082168401166001600160801b03199091161790555b611c66818503600160801b8d6001600160801b03166132d9565b60018054909101905550505b8015611cfd5760008054600160e81b900460041c600f16908115611ca2578160ff168381611c9c57fe5b04611ca5565b60005b90506001600160801b03811615611cd757600380546001600160801b03600160801b8083048216850182160291161790555b611cf1818403600160801b8d6001600160801b03166132d9565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611dca576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611de460073389896141e3565b60038101549091506001600160801b0390811690861611611e055784611e14565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611e3c5783611e52565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611eb7576003810180546001600160801b031981166001600160801b03918216869003821617909155611eb7907f0000000000000000000000000000000000000000000000000000000000000000908a908616613b86565b6001600160801b03821615611f1d576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611f1d907f0000000000000000000000000000000000000000000000000000000000000000908a908516613b86565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612054576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156120c157600080fd5b505afa1580156120d5573d6000803e3d6000fd5b505050506040513d60208110156120eb57600080fd5b50516001600160a01b0316331461210157600080fd5b60ff82161580612124575060048260ff16101580156121245750600a8260ff1611155b801561214e575060ff8116158061214e575060048160ff161015801561214e5750600a8160ff1611155b61215757600080fd5b60008054610ff0600484901b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff16612256576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b50516001600160a01b0316331461230357600080fd5b6003546001600160801b039081169085161161231f578361232c565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116123525782612366565b600354600160801b90046001600160801b03165b90506001600160801b038216156123e7576003546001600160801b038381169116141561239557600019909101905b600380546001600160801b031981166001600160801b039182168590038216179091556123e7907f00000000000000000000000000000000000000000000000000000000000000009087908516613b86565b6001600160801b0381161561246d576003546001600160801b03828116600160801b90920416141561241857600019015b600380546001600160801b03600160801b80830482168590038216029181169190911790915561246d907f00000000000000000000000000000000000000000000000000000000000000009087908416613b86565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b6060806124e7612bf0565b61255e6124f2612c27565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416614247565b915091509250929050565b600080548190600160f01b900460ff166125b0576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b918101919091528190819061260990606081016125fc6001600160801b038a16613f58565b600003600f0b9052613f69565b925092509250816000039450806000039350600085118061262a5750600084115b15612669576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b60008060006126ed612bf0565b6126f785856143a1565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b9367010000000000000082046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff168061275f57600080fd5b6003820154600681900b985067010000000000000081046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff16806127a457600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b1215905061284d575093909403965090039350900390506128d0565b8a60020b816020015160020b12156128c1576000612869612c27565b602083015160408401516004546060860151939450600093849361289f936008938893879392916001600160801b031690613389565b9a9003989098039b5050949096039290920396509091030392506128d0915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b9067010000000000000081046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b031615612a1e576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612a29826136a5565b9050600080612a41612a39612c27565b60089061446a565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b73ffffffffffffffffffffffffffffffffffffffff19909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9091021761ffff60d81b1916600160d81b909602959095177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612b9957fe5b05029050600083600281900b620d89e881612bb057fe5b0502905060008460020b83830360020b81612bc757fe5b0560010190508062ffffff166001600160801b03801681612be457fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c2557600080fd5b565b4290565b60008060008460020b8660020b81612c3f57fe5b05905060008660020b128015612c6657508460020b8660020b81612c5f57fe5b0760020b15155b15612c7057600019015b8315612ce557600080612c82836144b6565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612cc757888360ff16860302612cda565b88612cd1826144c8565b840360ff168603025b965050505050612d63565b600080612cf4836001016144b6565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612d4657888360ff0360ff16866001010102612d5c565b8883612d5183614568565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612d84578260020b612d8c565b8260020b6000035b9050620d89e8811115612dca576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612dde57600160801b612df0565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612e24576ffff97272373d413259a46990580e213a0260801c5b6004821615612e43576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e62576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e81576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612ea0576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ebf576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612ede576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612efe576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f1e576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f3e576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f5e576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f7e576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612f9e576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fbe576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fde576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612fff576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561301f576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561303e576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561305b576b048a170391f7dc42444e8fa20260801c5b60008460020b131561307657806000198161307257fe5b0490505b64010000000081061561308a57600161308d565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906131245760006130d88989620f42400362ffffff16620f42406132d9565b9050826130f1576130ec8c8c8c6001614652565b6130fe565b6130fe8b8d8c60016146cd565b955085811061310f578a965061311e565b61311b8c8b838661478a565b96505b5061316e565b8161313b576131368b8b8b60006146cd565b613148565b6131488a8c8b6000614652565b935083886000031061315c5789955061316e565b61316b8b8a8a600003856147d6565b95505b6001600160a01b038a81169087161482156131d15780801561318d5750815b6131a35761319e878d8c60016146cd565b6131a5565b855b95508080156131b2575081155b6131c8576131c3878d8c6000614652565b6131ca565b845b945061321b565b8080156131db5750815b6131f1576131ec8c888c6001614652565b6131f3565b855b9550808015613200575081155b613216576132118c888c60006146cd565b613218565b845b94505b8115801561322b57508860000385115b15613237578860000394505b81801561325657508a6001600160a01b0316876001600160a01b031614155b15613265578589039350613282565b61327f868962ffffff168a620f42400362ffffff166141a9565b93505b50505095509550955095915050565b6000600160ff1b82106132a357600080fd5b5090565b808203828113156000831215146132bd57600080fd5b92915050565b818101828112156000831215146132bd57600080fd5b600080806000198587098686029250828110908390030390508061330f576000841161330457600080fd5b508290049050613382565b80841161331b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613430576000898661ffff1661ffff81106133aa57fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461341c57613419818a8988614822565b90505b806020015181604001519250925050613510565b8688036000806134458c8c858c8c8c8c6148d2565b91509150816000015163ffffffff168363ffffffff161415613477578160200151826040015194509450505050613510565b805163ffffffff8481169116141561349f578060200151816040015194509450505050613510565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b816134cd57fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816134ff57fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561365457826001600160801b03168260000384039150816001600160801b03161061364f576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6132bd565b826001600160801b03168284019150816001600160801b031610156132bd576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906136e1575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613716576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106137b757607f810383901c91506137c1565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146139c257886001600160a01b03166139a682612d6d565b6001600160a01b031611156139bb57816139bd565b805b6139c4565b815b9998505050505050505050565b6000806000898961ffff1661ffff81106139e757fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415613a575788859250925050613510565b8461ffff168461ffff16118015613a7857506001850361ffff168961ffff16145b15613a8557839150613a89565b8491505b8161ffff168960010161ffff1681613a9d57fe5b069250613aac81898989614822565b8a8461ffff1661ffff8110613abd57fe5b825191018054602084015160408501516060909501511515600160f81b027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16640100000000026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613c025780518252601f199092019160209182019101613be3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c64576040519150601f19603f3d011682016040523d82523d6000602084013e613c69565b606091505b5091509150818015613c97575080511580613c975750808060200190516020811015613c9457600080fd5b50515b613ccd576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613d6d5780518252601f199092019160209182019101613d4e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613dcd576040519150601f19603f3d011682016040523d82523d6000602084013e613dd2565b606091505b5091509150818015613de657506020815110155b613def57600080fd5b808060200190516020811015613e0457600080fd5b50519250505090565b808201828110156132bd57600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613d6d5780518252601f199092019160209182019101613d4e565b6000808361ffff1611613ef3576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613f09575081613382565b825b8261ffff168161ffff161015613f4f576001858261ffff1661ffff8110613f2e57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613f0b565b50909392505050565b80600f81900b8114612beb57600080fd5b6000806000613f76612bf0565b613f88846020015185604001516143a1565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c08501528851908901519489015192890151939461402c9491939092909190614acf565b93508460600151600f0b6000146141a157846020015160020b816020015160020b12156140815761407a6140638660200151612d6d565b6140708760400151612d6d565b8760600151614c84565b92506141a1565b846040015160020b816020015160020b12156141775760045460408201516001600160801b03909116906140d3906140b7612c27565b60208501516060860151608087015160089493929187916139d1565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614123919061411990612d6d565b8860600151614c84565b93506141416141358760200151612d6d565b83516060890151614cc8565b92506141518187606001516135ef565b600480546001600160801b0319166001600160801b0392909216919091179055506141a1565b61419e6141878660200151612d6d565b6141948760400151612d6d565b8760600151614cc8565b91505b509193909250565b60006141b68484846132d9565b9050600082806141c257fe5b84860911156133825760001981106141d957600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614287576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561429f57600080fd5b506040519080825280602002602001820160405280156142c9578160200160208202803683370190505b509150865167ffffffffffffffff811180156142e457600080fd5b5060405190808252806020026020018201604052801561430e578160200160208202803683370190505b50905060005b87518110156143945761433f8a8a8a848151811061432e57fe5b60200260200101518a8a8a8a613389565b84838151811061434b57fe5b6020026020010184848151811061435e57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614314565b5097509795505050505050565b8060020b8260020b126143e1576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614424576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614466576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b60008082116144d657600080fd5b600160801b82106144e957608091821c91015b68010000000000000000821061450157604091821c91015b640100000000821061451557602091821c91015b62010000821061452757601091821c91015b610100821061453857600891821c91015b6010821061454857600491821c91015b6004821061455857600291821c91015b60028210612beb57600101919050565b600080821161457657600080fd5b5060ff6001600160801b0382161561459157607f1901614599565b608082901c91505b67ffffffffffffffff8216156145b257603f19016145ba565b604082901c91505b63ffffffff8216156145cf57601f19016145d7565b602082901c91505b61ffff8216156145ea57600f19016145f2565b601082901c91505b60ff821615614604576007190161460c565b600882901c91505b600f82161561461e5760031901614626565b600482901c91505b60038216156146385760011901614640565b600282901c91505b6001821615612beb5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614672579293925b8161469f5761469a836001600160801b03168686036001600160a01b0316600160601b6132d9565b6146c2565b6146c2836001600160801b03168686036001600160a01b0316600160601b6141a9565b90505b949350505050565b6000836001600160a01b0316856001600160a01b031611156146ed579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b03868603811690871661472957600080fd5b8361475957866001600160a01b031661474c8383896001600160a01b03166132d9565b8161475357fe5b0461477f565b61477f6147708383896001600160a01b03166141a9565b886001600160a01b0316614cf7565b979650505050505050565b600080856001600160a01b0316116147a157600080fd5b6000846001600160801b0316116147b757600080fd5b816147c95761469a8585856001614d02565b6146c28585856001614de3565b600080856001600160a01b0316116147ed57600080fd5b6000846001600160801b03161161480357600080fd5b816148155761469a8585856000614de3565b6146c28585856000614d02565b61482a61564a565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b03161161487e576001614880565b845b6001600160801b031673ffffffff00000000000000000000000000000000608085901b16816148ab57fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b6148da61564a565b6148e261564a565b888561ffff1661ffff81106148f357fe5b60408051608081018252919092015463ffffffff81168083526401000000008204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff1615156060820152925061495890899089614ed8565b15614990578663ffffffff16826000015163ffffffff16141561497a57613510565b8161498783898988614822565b91509150613510565b888361ffff168660010161ffff16816149a557fe5b0661ffff1661ffff81106149b557fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614a6c57604080516080810182528a5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614a7b88836000015189614ed8565b614ab2576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614abf8989898887614f9b565b9150915097509795505050505050565b6000614ade60078787876141e3565b60015460025491925090600080600f87900b15614c24576000614aff612c27565b6000805460045492935090918291614b499160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b900416613389565b9092509050614b8360058d8b8d8b8b87898b60007f000000000000000000000000000000000000000000000000000000000000000061513b565b9450614bba60058c8b8d8b8b87898b60017f000000000000000000000000000000000000000000000000000000000000000061513b565b93508415614bee57614bee60068d7f0000000000000000000000000000000000000000000000000000000000000000615325565b8315614c2057614c2060068c7f0000000000000000000000000000000000000000000000000000000000000000615325565b5050505b600080614c3660058c8c8b8a8a61538b565b9092509050614c47878a8484615437565b600089600f0b1215614c75578315614c6457614c6460058c6155cc565b8215614c7557614c7560058b6155cc565b50505050505095945050505050565b60008082600f0b12614caa57614ca5614ca085858560016146cd565b613291565b6146c5565b614cbd614ca085858560000360006146cd565b600003949350505050565b60008082600f0b12614ce457614ca5614ca08585856001614652565b614cbd614ca08585856000036000614652565b808204910615150190565b60008115614d755760006001600160a01b03841115614d3857614d3384600160601b876001600160801b03166132d9565b614d50565b6001600160801b038516606085901b81614d4e57fe5b045b9050614d6d614d686001600160a01b03881683613e0d565b6155f8565b9150506146c5565b60006001600160a01b03841115614da357614d9e84600160601b876001600160801b03166141a9565b614dba565b614dba606085901b6001600160801b038716614cf7565b905080866001600160a01b031611614dd157600080fd5b6001600160a01b0386160390506146c5565b600082614df15750836146c5565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215614e91576001600160a01b03861684810290858281614e3157fe5b041415614e6257818101828110614e6057614e5683896001600160a01b0316836141a9565b93505050506146c5565b505b614e8882614e83878a6001600160a01b03168681614e7c57fe5b0490613e0d565b614cf7565b925050506146c5565b6001600160a01b03861684810290858281614ea857fe5b04148015614eb557508082115b614ebe57600080fd5b808203614e56614d68846001600160a01b038b16846141a9565b60008363ffffffff168363ffffffff1611158015614f0257508363ffffffff168263ffffffff1611155b15614f1e578163ffffffff168363ffffffff1611159050613382565b60008463ffffffff168463ffffffff1611614f46578363ffffffff1664010000000001614f4e565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614f7f578363ffffffff1664010000000001614f87565b8363ffffffff165b64ffffffffff169091111595945050505050565b614fa361564a565b614fab61564a565b60008361ffff168560010161ffff1681614fc157fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff87168281614fee57fe5b0661ffff8110614ffa57fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061506557806001019250614fd9565b898661ffff16826001018161507657fe5b0661ffff811061508257fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094506000906150ed908b908b614ed8565b905080801561510657506151068a8a8760000151614ed8565b15615111575061512e565b8061512157600182039250615128565b8160010193505b50614fd9565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b031682615166828d6135ef565b9050846001600160801b0316816001600160801b031611156151b4576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b03828116159082161581141594501561528a578c60020b8e60020b1361525a57600183018b9055600283018a90556003830180547fffffffffff0000000000000000000000000000000000000000ffffffffffffff166701000000000000006001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b038216178355856152d35782546152ce906152c990600160801b9004600f90810b810b908f900b6132c3565b613f58565b6152f4565b82546152f4906152c990600160801b9004600f90810b810b908f900b6132a7565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b8161533457fe5b0760020b1561534257600080fd5b60008061535d8360020b8560020b8161535757fe5b056144b6565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b126153d1575050600182015460028301546153e4565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561540657505060018301546002840154615419565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6154d65781516001600160801b03166154ce576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b5080516154e5565b81516154e290866135ef565b90505b60006155098360200151860384600001516001600160801b0316600160801b6132d9565b9050600061552f8460400151860385600001516001600160801b0316600160801b6132d9565b905086600f0b6000146155565787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061558457506000816001600160801b0316115b156155c2576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612beb57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000aa164736f6c6343000706000ac66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc'; + return + hex'60a060405234801561001057600080fd5b503060601b608052600380546001600160a01b031916339081179091556040516000907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c908290a36101f4600081815260046020527ffb8cf1d12598d1a039dd1d106665851a96aadf67d0d9ed76fceea282119208b7805462ffffff1916600a90811790915560405190929160008051602061614b83398151915291a3610bb8600081815260046020527f72dffa9b822156d9cf4b0090fa0b656bcb9cc2b2c60eb6acfc20a34f54b31743805462ffffff1916603c90811790915560405190929160008051602061614b83398151915291a3612710600081815260046020527f8cc740d51daa94ff54f33bd779c2d20149f524c340519b49181be5a08615f829805462ffffff191660c890811790915560405190929160008051602061614b83398151915291a360805160601c615fd7610174600039806105515250615fd76000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063890357301161005b578063890357301461013b5780638a7c195f146101855780638da5cb5b146101b0578063a1671295146101b85761007d565b806313af4035146100825780631698ee82146100aa57806322afcccb14610102575b600080fd5b6100a86004803603602081101561009857600080fd5b50356001600160a01b03166101f4565b005b6100e6600480360360608110156100c057600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff16610267565b604080516001600160a01b039092168252519081900360200190f35b6101246004803603602081101561011857600080fd5b503562ffffff16610293565b6040805160029290920b8252519081900360200190f35b6101436102a8565b604080516001600160a01b0396871681529486166020860152929094168383015262ffffff16606083015260029290920b608082015290519081900360a00190f35b6100a86004803603604081101561019b57600080fd5b5062ffffff813516906020013560020b6102de565b6100e66103a1565b6100e6600480360360608110156101ce57600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff166103b0565b6003546001600160a01b0316331461020b57600080fd5b6003546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60056020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b60046020526000908152604090205460020b81565b600054600154600280546001600160a01b03938416939283169281169162ffffff600160a01b83041691600160b81b9004900b85565b6003546001600160a01b031633146102f557600080fd5b620f42408262ffffff161061030957600080fd5b60008160020b13801561032057506140008160020b125b61032957600080fd5b62ffffff8216600090815260046020526040902054600290810b900b1561034f57600080fd5b62ffffff828116600081815260046020526040808220805462ffffff1916600287900b958616179055517fc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc9190a35050565b6003546001600160a01b031681565b60006103ba610546565b826001600160a01b0316846001600160a01b031614156103d957600080fd5b600080846001600160a01b0316866001600160a01b0316106103fc5784866103ff565b85855b90925090506001600160a01b03821661041757600080fd5b62ffffff8416600090815260046020526040902054600290810b9081900b61043e57600080fd5b6001600160a01b0383811660009081526005602090815260408083208685168452825280832062ffffff8a168452909152902054161561047d57600080fd5b61048a308484888561057d565b6001600160a01b03808516600081815260056020818152604080842089871680865290835281852062ffffff8e168087529084528286208054988a166001600160a01b0319998a1681179091558287529484528286208787528452828620818752845294829020805490971684179096558051600289900b815291820192909252815195995091947f783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b71189281900390910190a45050509392505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461057b57600080fd5b565b6040805160a0810182526001600160a01b03878116808352878216602080850182905292881684860181905262ffffff888116606080880182905260028a810b6080998a01819052600080546001600160a01b03199081169099178155600180548a1689179055825490981686177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff16600160a01b8502177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b91830b9095160293909317909255875180870194909452838801929092528281019190915285518083039091018152930193849052825192909101919091209091610686906106f5565b8190604051809103906000f59050801580156106a6573d6000803e3d6000fd5b50600080546001600160a01b0319908116909155600180549091169055600280547fffffffffffff00000000000000000000000000000000000000000000000000001690559695505050505050565b6158c8806107038339019056fe6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002b8417901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61567e6200024a60003980611fee5280614b5f5280614b96525080610c0052806128fd5280614bca5280614bfc525080610cef52806119cb5280611a0252806129455250806111c75280611a855280611ef4528061244452806129215280613e6b5250806108d252806112f55280611a545280611e8e52806123be5280613d2252508061207b528061227d52806128d9525080612bfb525061567e6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806370cf754a116100ee578063c45a015511610097578063ddca3f4311610071578063ddca3f4314610800578063f305839914610820578063f30dba9314610828578063f637731d146108aa576101ae565b8063c45a0155146107d1578063d0c93a7c146107d9578063d21220a7146107f8576101ae565b8063883bdbfd116100c8578063883bdbfd14610633578063a34123a71461073c578063a38807f214610776576101ae565b806370cf754a146105c65780638206a4d1146105ce57806385b66729146105f6576101ae565b80633850c7bd1161015b578063490e6cbc11610135578063490e6cbc146104705780634f1eb3d8146104fc578063514ea4bf1461054d5780635339c296146105a6576101ae565b80633850c7bd1461035b5780633c8a7d8d146103b45780634614131914610456576101ae565b80631ad8b03b1161018c5780631ad8b03b146102aa578063252c09d7146102e157806332148f6714610338576101ae565b80630dfe1681146101b3578063128acb08146101d75780631a68650214610286575b600080fd5b6101bb6108d0565b604080516001600160a01b039092168252519081900360200190f35b61026d600480360360a08110156101ed57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184600183028401116401000000008311171561026257600080fd5b5090925090506108f4565b6040805192835260208301919091528051918290030190f35b61028e6114ad565b604080516001600160801b039092168252519081900360200190f35b6102b26114bc565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102fe600480360360208110156102f757600080fd5b50356114d6565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103596004803603602081101561034e57600080fd5b503561ffff1661151c565b005b610363611616565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61026d600480360360a08110156103ca57600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a08101608082013564010000000081111561041757600080fd5b82018360208201111561042957600080fd5b8035906020019184600183028401116401000000008311171561044b57600080fd5b509092509050611666565b61045e611922565b60408051918252519081900360200190f35b6103596004803603608081101561048657600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156104bd57600080fd5b8201836020820111156104cf57600080fd5b803590602001918460018302840111640100000000831117156104f157600080fd5b509092509050611928565b6102b2600480360360a081101561051257600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d83565b61056a6004803603602081101561056357600080fd5b5035611f9d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61045e600480360360208110156105bc57600080fd5b503560010b611fda565b61028e611fec565b610359600480360360408110156105e457600080fd5b5060ff81358116916020013516612010565b6102b26004803603606081101561060c57600080fd5b506001600160a01b03813516906001600160801b036020820135811691604001351661220f565b6106a36004803603602081101561064957600080fd5b81019060208101813564010000000081111561066457600080fd5b82018360208201111561067657600080fd5b8035906020019184602083028401116401000000008311171561069857600080fd5b5090925090506124dc565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106e75781810151838201526020016106cf565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561072657818101518382015260200161070e565b5050505090500194505050505060405180910390f35b61026d6004803603606081101561075257600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612569565b6107a06004803603604081101561078c57600080fd5b508035600290810b9160200135900b6126e0565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b6101bb6128d7565b6107e16128fb565b6040805160029290920b8252519081900360200190f35b6101bb61291f565b610808612943565b6040805162ffffff9092168252519081900360200190f35b61045e612967565b6108486004803603602081101561083e57600080fd5b503560020b61296d565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b610359600480360360208110156108c057600080fd5b50356001600160a01b03166129db565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108ff612bf0565b85610936576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109ef576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610a3a5780600001516001600160a01b0316866001600160a01b0316118015610a35575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a6c565b80600001516001600160a01b0316866001600160a01b0316108015610a6c57506401000276a36001600160a01b038716115b610aa3576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610ad25760048460a0015160ff16901c610ae5565b60108460a0015160ff1681610ae357fe5b065b60ff1681526004546001600160801b03166020820152604001610b06612c27565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b8257600254610b86565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610bd55750886001600160a01b031681604001516001600160a01b031614155b15610f9f57610be261560e565b60408201516001600160a01b031681526060820151610c25906006907f00000000000000000000000000000000000000000000000000000000000000008f612c2b565b15156040830152600290810b810b60208301819052620d89e719910b1215610c5657620d89e7196020820152610c75565b6020810151620d89e860029190910b1315610c7557620d89e860208201525b610c828160200151612d6d565b6001600160a01b031660608201526040820151610d13908d610cbc578b6001600160a01b031683606001516001600160a01b031611610cd6565b8b6001600160a01b031683606001516001600160a01b0316105b610ce4578260600151610ce6565b8b5b60c085015185517f000000000000000000000000000000000000000000000000000000000000000061309f565b60c085015260a084015260808301526001600160a01b031660408301528215610d7557610d498160c00151826080015101613291565b825103825260a0810151610d6b90610d6090613291565b6020840151906132a7565b6020830152610db0565b610d828160a00151613291565b825101825260c08101516080820151610daa91610d9f9101613291565b6020840151906132c3565b60208301525b835160ff1615610df6576000846000015160ff168260c0015181610dd057fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e3557610e298160c00151600160801b8460c001516001600160801b03166132d9565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f5e57806040015115610f35578360a00151610ebf57610e9d846040015160008760200151886040015188602001518a606001516008613389909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610f0b82602001518e610ed657600154610edc565b84608001515b8f610eeb578560800151610eef565b6002545b608089015160608a015160408b0151600595949392919061351c565b90508c15610f17576000035b610f258360c00151826135ef565b6001600160801b031660c0840152505b8b610f44578060200151610f4d565b60018160200151035b600290810b900b6060830152610f99565b80600001516001600160a01b031682604001516001600160a01b031614610f9957610f8c82604001516136a5565b600290810b900b60608301525b50610baf565b836020015160020b816060015160020b1461107a57600080610fed86604001518660400151886020015188602001518a606001518b6080015160086139d1909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b93909316929092029190911773ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116179055506110ac9050565b60408101516000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110f25760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561114257608081015160015560a08101516001600160801b03161561113d5760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b611188565b608081015160025560a08101516001600160801b0316156111885760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b1515146111a157602081015181518b036111ae565b80600001518a0381602001515b90965094508a156112e75760008512156111f0576111f07f00000000000000000000000000000000000000000000000000000000000000008d87600003613b86565b60006111fa613cd4565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561127e57600080fd5b505af1158015611292573d6000803e3d6000fd5b5050505061129e613cd4565b6112a88289613e0d565b11156112e1576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611411565b600086121561131e5761131e7f00000000000000000000000000000000000000000000000000000000000000008d88600003613b86565b6000611328613e1d565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156113ac57600080fd5b505af11580156113c0573d6000803e3d6000fd5b505050506113cc613e1d565b6113d68288613e0d565b111561140f576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114e757600080fd5b015463ffffffff81169150640100000000810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff16611560576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611575612bf0565b60008054600160d81b900461ffff169061159160088385613eb5565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115fe576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff166116ad576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b0385166116cd57600080fd5b60008061171b60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016117118a6001600160801b0316613f58565b600f0b9052613f69565b9250925050819350809250600080600086111561173d5761173a613cd4565b91505b841561174e5761174b613e1d565b90505b336001600160a01b031663d348799787878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b50505050600086111561183b576117f9613cd4565b6118038388613e0d565b111561183b576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561188b57611849613e1d565b6118538287613e0d565b111561188b576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff1661196c576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611981612bf0565b6004546001600160801b0316806119c3576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119f8867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a2f867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a3b613cd4565b90506000611a47613e1d565b90508815611a7a57611a7a7f00000000000000000000000000000000000000000000000000000000000000008b8b613b86565b8715611aab57611aab7f00000000000000000000000000000000000000000000000000000000000000008b8a613b86565b336001600160a01b031663e9cbafb085858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b505050506000611b4f613cd4565b90506000611b5b613e1d565b905081611b688588613e0d565b1115611ba0576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611bab8487613e0d565b1115611be3576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c725760008054600160e81b9004600f16908115611c16578160ff168481611c1057fe5b04611c19565b60005b90506001600160801b03811615611c4c57600380546001600160801b038082168401166001600160801b03199091161790555b611c66818503600160801b8d6001600160801b03166132d9565b60018054909101905550505b8015611cfd5760008054600160e81b900460041c600f16908115611ca2578160ff168381611c9c57fe5b04611ca5565b60005b90506001600160801b03811615611cd757600380546001600160801b03600160801b8083048216850182160291161790555b611cf1818403600160801b8d6001600160801b03166132d9565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611dca576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611de460073389896141e3565b60038101549091506001600160801b0390811690861611611e055784611e14565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611e3c5783611e52565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611eb7576003810180546001600160801b031981166001600160801b03918216869003821617909155611eb7907f0000000000000000000000000000000000000000000000000000000000000000908a908616613b86565b6001600160801b03821615611f1d576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611f1d907f0000000000000000000000000000000000000000000000000000000000000000908a908516613b86565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612054576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156120c157600080fd5b505afa1580156120d5573d6000803e3d6000fd5b505050506040513d60208110156120eb57600080fd5b50516001600160a01b0316331461210157600080fd5b60ff82161580612124575060048260ff16101580156121245750600a8260ff1611155b801561214e575060ff8116158061214e575060048160ff161015801561214e5750600a8160ff1611155b61215757600080fd5b60008054610ff0600484901b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff16612256576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b50516001600160a01b0316331461230357600080fd5b6003546001600160801b039081169085161161231f578361232c565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116123525782612366565b600354600160801b90046001600160801b03165b90506001600160801b038216156123e7576003546001600160801b038381169116141561239557600019909101905b600380546001600160801b031981166001600160801b039182168590038216179091556123e7907f00000000000000000000000000000000000000000000000000000000000000009087908516613b86565b6001600160801b0381161561246d576003546001600160801b03828116600160801b90920416141561241857600019015b600380546001600160801b03600160801b80830482168590038216029181169190911790915561246d907f00000000000000000000000000000000000000000000000000000000000000009087908416613b86565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b6060806124e7612bf0565b61255e6124f2612c27565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416614247565b915091509250929050565b600080548190600160f01b900460ff166125b0576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b918101919091528190819061260990606081016125fc6001600160801b038a16613f58565b600003600f0b9052613f69565b925092509250816000039450806000039350600085118061262a5750600084115b15612669576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b60008060006126ed612bf0565b6126f785856143a1565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b9367010000000000000082046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff168061275f57600080fd5b6003820154600681900b985067010000000000000081046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff16806127a457600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b1215905061284d575093909403965090039350900390506128d0565b8a60020b816020015160020b12156128c1576000612869612c27565b602083015160408401516004546060860151939450600093849361289f936008938893879392916001600160801b031690613389565b9a9003989098039b5050949096039290920396509091030392506128d0915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b9067010000000000000081046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b031615612a1e576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612a29826136a5565b9050600080612a41612a39612c27565b60089061446a565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b73ffffffffffffffffffffffffffffffffffffffff19909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9091021761ffff60d81b1916600160d81b909602959095177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612b9957fe5b05029050600083600281900b620d89e881612bb057fe5b0502905060008460020b83830360020b81612bc757fe5b0560010190508062ffffff166001600160801b03801681612be457fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c2557600080fd5b565b4290565b60008060008460020b8660020b81612c3f57fe5b05905060008660020b128015612c6657508460020b8660020b81612c5f57fe5b0760020b15155b15612c7057600019015b8315612ce557600080612c82836144b6565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612cc757888360ff16860302612cda565b88612cd1826144c8565b840360ff168603025b965050505050612d63565b600080612cf4836001016144b6565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612d4657888360ff0360ff16866001010102612d5c565b8883612d5183614568565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612d84578260020b612d8c565b8260020b6000035b9050620d89e8811115612dca576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612dde57600160801b612df0565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612e24576ffff97272373d413259a46990580e213a0260801c5b6004821615612e43576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e62576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e81576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612ea0576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ebf576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612ede576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612efe576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f1e576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f3e576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f5e576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f7e576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612f9e576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fbe576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fde576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612fff576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561301f576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561303e576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561305b576b048a170391f7dc42444e8fa20260801c5b60008460020b131561307657806000198161307257fe5b0490505b64010000000081061561308a57600161308d565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906131245760006130d88989620f42400362ffffff16620f42406132d9565b9050826130f1576130ec8c8c8c6001614652565b6130fe565b6130fe8b8d8c60016146cd565b955085811061310f578a965061311e565b61311b8c8b838661478a565b96505b5061316e565b8161313b576131368b8b8b60006146cd565b613148565b6131488a8c8b6000614652565b935083886000031061315c5789955061316e565b61316b8b8a8a600003856147d6565b95505b6001600160a01b038a81169087161482156131d15780801561318d5750815b6131a35761319e878d8c60016146cd565b6131a5565b855b95508080156131b2575081155b6131c8576131c3878d8c6000614652565b6131ca565b845b945061321b565b8080156131db5750815b6131f1576131ec8c888c6001614652565b6131f3565b855b9550808015613200575081155b613216576132118c888c60006146cd565b613218565b845b94505b8115801561322b57508860000385115b15613237578860000394505b81801561325657508a6001600160a01b0316876001600160a01b031614155b15613265578589039350613282565b61327f868962ffffff168a620f42400362ffffff166141a9565b93505b50505095509550955095915050565b6000600160ff1b82106132a357600080fd5b5090565b808203828113156000831215146132bd57600080fd5b92915050565b818101828112156000831215146132bd57600080fd5b600080806000198587098686029250828110908390030390508061330f576000841161330457600080fd5b508290049050613382565b80841161331b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613430576000898661ffff1661ffff81106133aa57fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461341c57613419818a8988614822565b90505b806020015181604001519250925050613510565b8688036000806134458c8c858c8c8c8c6148d2565b91509150816000015163ffffffff168363ffffffff161415613477578160200151826040015194509450505050613510565b805163ffffffff8481169116141561349f578060200151816040015194509450505050613510565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b816134cd57fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816134ff57fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561365457826001600160801b03168260000384039150816001600160801b03161061364f576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6132bd565b826001600160801b03168284019150816001600160801b031610156132bd576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906136e1575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613716576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106137b757607f810383901c91506137c1565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146139c257886001600160a01b03166139a682612d6d565b6001600160a01b031611156139bb57816139bd565b805b6139c4565b815b9998505050505050505050565b6000806000898961ffff1661ffff81106139e757fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415613a575788859250925050613510565b8461ffff168461ffff16118015613a7857506001850361ffff168961ffff16145b15613a8557839150613a89565b8491505b8161ffff168960010161ffff1681613a9d57fe5b069250613aac81898989614822565b8a8461ffff1661ffff8110613abd57fe5b825191018054602084015160408501516060909501511515600160f81b027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16640100000000026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613c025780518252601f199092019160209182019101613be3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c64576040519150601f19603f3d011682016040523d82523d6000602084013e613c69565b606091505b5091509150818015613c97575080511580613c975750808060200190516020811015613c9457600080fd5b50515b613ccd576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613d6d5780518252601f199092019160209182019101613d4e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613dcd576040519150601f19603f3d011682016040523d82523d6000602084013e613dd2565b606091505b5091509150818015613de657506020815110155b613def57600080fd5b808060200190516020811015613e0457600080fd5b50519250505090565b808201828110156132bd57600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613d6d5780518252601f199092019160209182019101613d4e565b6000808361ffff1611613ef3576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613f09575081613382565b825b8261ffff168161ffff161015613f4f576001858261ffff1661ffff8110613f2e57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613f0b565b50909392505050565b80600f81900b8114612beb57600080fd5b6000806000613f76612bf0565b613f88846020015185604001516143a1565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c08501528851908901519489015192890151939461402c9491939092909190614acf565b93508460600151600f0b6000146141a157846020015160020b816020015160020b12156140815761407a6140638660200151612d6d565b6140708760400151612d6d565b8760600151614c84565b92506141a1565b846040015160020b816020015160020b12156141775760045460408201516001600160801b03909116906140d3906140b7612c27565b60208501516060860151608087015160089493929187916139d1565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614123919061411990612d6d565b8860600151614c84565b93506141416141358760200151612d6d565b83516060890151614cc8565b92506141518187606001516135ef565b600480546001600160801b0319166001600160801b0392909216919091179055506141a1565b61419e6141878660200151612d6d565b6141948760400151612d6d565b8760600151614cc8565b91505b509193909250565b60006141b68484846132d9565b9050600082806141c257fe5b84860911156133825760001981106141d957600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614287576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561429f57600080fd5b506040519080825280602002602001820160405280156142c9578160200160208202803683370190505b509150865167ffffffffffffffff811180156142e457600080fd5b5060405190808252806020026020018201604052801561430e578160200160208202803683370190505b50905060005b87518110156143945761433f8a8a8a848151811061432e57fe5b60200260200101518a8a8a8a613389565b84838151811061434b57fe5b6020026020010184848151811061435e57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614314565b5097509795505050505050565b8060020b8260020b126143e1576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614424576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614466576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b60008082116144d657600080fd5b600160801b82106144e957608091821c91015b68010000000000000000821061450157604091821c91015b640100000000821061451557602091821c91015b62010000821061452757601091821c91015b610100821061453857600891821c91015b6010821061454857600491821c91015b6004821061455857600291821c91015b60028210612beb57600101919050565b600080821161457657600080fd5b5060ff6001600160801b0382161561459157607f1901614599565b608082901c91505b67ffffffffffffffff8216156145b257603f19016145ba565b604082901c91505b63ffffffff8216156145cf57601f19016145d7565b602082901c91505b61ffff8216156145ea57600f19016145f2565b601082901c91505b60ff821615614604576007190161460c565b600882901c91505b600f82161561461e5760031901614626565b600482901c91505b60038216156146385760011901614640565b600282901c91505b6001821615612beb5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614672579293925b8161469f5761469a836001600160801b03168686036001600160a01b0316600160601b6132d9565b6146c2565b6146c2836001600160801b03168686036001600160a01b0316600160601b6141a9565b90505b949350505050565b6000836001600160a01b0316856001600160a01b031611156146ed579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b03868603811690871661472957600080fd5b8361475957866001600160a01b031661474c8383896001600160a01b03166132d9565b8161475357fe5b0461477f565b61477f6147708383896001600160a01b03166141a9565b886001600160a01b0316614cf7565b979650505050505050565b600080856001600160a01b0316116147a157600080fd5b6000846001600160801b0316116147b757600080fd5b816147c95761469a8585856001614d02565b6146c28585856001614de3565b600080856001600160a01b0316116147ed57600080fd5b6000846001600160801b03161161480357600080fd5b816148155761469a8585856000614de3565b6146c28585856000614d02565b61482a61564a565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b03161161487e576001614880565b845b6001600160801b031673ffffffff00000000000000000000000000000000608085901b16816148ab57fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b6148da61564a565b6148e261564a565b888561ffff1661ffff81106148f357fe5b60408051608081018252919092015463ffffffff81168083526401000000008204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff1615156060820152925061495890899089614ed8565b15614990578663ffffffff16826000015163ffffffff16141561497a57613510565b8161498783898988614822565b91509150613510565b888361ffff168660010161ffff16816149a557fe5b0661ffff1661ffff81106149b557fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614a6c57604080516080810182528a5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614a7b88836000015189614ed8565b614ab2576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614abf8989898887614f9b565b9150915097509795505050505050565b6000614ade60078787876141e3565b60015460025491925090600080600f87900b15614c24576000614aff612c27565b6000805460045492935090918291614b499160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b900416613389565b9092509050614b8360058d8b8d8b8b87898b60007f000000000000000000000000000000000000000000000000000000000000000061513b565b9450614bba60058c8b8d8b8b87898b60017f000000000000000000000000000000000000000000000000000000000000000061513b565b93508415614bee57614bee60068d7f0000000000000000000000000000000000000000000000000000000000000000615325565b8315614c2057614c2060068c7f0000000000000000000000000000000000000000000000000000000000000000615325565b5050505b600080614c3660058c8c8b8a8a61538b565b9092509050614c47878a8484615437565b600089600f0b1215614c75578315614c6457614c6460058c6155cc565b8215614c7557614c7560058b6155cc565b50505050505095945050505050565b60008082600f0b12614caa57614ca5614ca085858560016146cd565b613291565b6146c5565b614cbd614ca085858560000360006146cd565b600003949350505050565b60008082600f0b12614ce457614ca5614ca08585856001614652565b614cbd614ca08585856000036000614652565b808204910615150190565b60008115614d755760006001600160a01b03841115614d3857614d3384600160601b876001600160801b03166132d9565b614d50565b6001600160801b038516606085901b81614d4e57fe5b045b9050614d6d614d686001600160a01b03881683613e0d565b6155f8565b9150506146c5565b60006001600160a01b03841115614da357614d9e84600160601b876001600160801b03166141a9565b614dba565b614dba606085901b6001600160801b038716614cf7565b905080866001600160a01b031611614dd157600080fd5b6001600160a01b0386160390506146c5565b600082614df15750836146c5565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215614e91576001600160a01b03861684810290858281614e3157fe5b041415614e6257818101828110614e6057614e5683896001600160a01b0316836141a9565b93505050506146c5565b505b614e8882614e83878a6001600160a01b03168681614e7c57fe5b0490613e0d565b614cf7565b925050506146c5565b6001600160a01b03861684810290858281614ea857fe5b04148015614eb557508082115b614ebe57600080fd5b808203614e56614d68846001600160a01b038b16846141a9565b60008363ffffffff168363ffffffff1611158015614f0257508363ffffffff168263ffffffff1611155b15614f1e578163ffffffff168363ffffffff1611159050613382565b60008463ffffffff168463ffffffff1611614f46578363ffffffff1664010000000001614f4e565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614f7f578363ffffffff1664010000000001614f87565b8363ffffffff165b64ffffffffff169091111595945050505050565b614fa361564a565b614fab61564a565b60008361ffff168560010161ffff1681614fc157fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff87168281614fee57fe5b0661ffff8110614ffa57fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061506557806001019250614fd9565b898661ffff16826001018161507657fe5b0661ffff811061508257fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094506000906150ed908b908b614ed8565b905080801561510657506151068a8a8760000151614ed8565b15615111575061512e565b8061512157600182039250615128565b8160010193505b50614fd9565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b031682615166828d6135ef565b9050846001600160801b0316816001600160801b031611156151b4576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b03828116159082161581141594501561528a578c60020b8e60020b1361525a57600183018b9055600283018a90556003830180547fffffffffff0000000000000000000000000000000000000000ffffffffffffff166701000000000000006001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b038216178355856152d35782546152ce906152c990600160801b9004600f90810b810b908f900b6132c3565b613f58565b6152f4565b82546152f4906152c990600160801b9004600f90810b810b908f900b6132a7565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b8161533457fe5b0760020b1561534257600080fd5b60008061535d8360020b8560020b8161535757fe5b056144b6565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b126153d1575050600182015460028301546153e4565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561540657505060018301546002840154615419565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6154d65781516001600160801b03166154ce576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b5080516154e5565b81516154e290866135ef565b90505b60006155098360200151860384600001516001600160801b0316600160801b6132d9565b9050600061552f8460400151860385600001516001600160801b0316600160801b6132d9565b905086600f0b6000146155565787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061558457506000816001600160801b0316115b156155c2576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612beb57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000aa164736f6c6343000706000ac66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc'; } } diff --git a/src/briefcase/deployers/v3-periphery/NFTDescriptorDeployer.sol b/src/briefcase/deployers/v3-periphery/NFTDescriptorDeployer.sol index 300640e2..df624d4d 100644 --- a/src/briefcase/deployers/v3-periphery/NFTDescriptorDeployer.sol +++ b/src/briefcase/deployers/v3-periphery/NFTDescriptorDeployer.sol @@ -21,6 +21,7 @@ library NFTDescriptorDeployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'615fdb610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063c49917d71461003a575b600080fd5b61004d610048366004613f06565b610063565b60405161005a9190614648565b60405180910390f35b6060600061007e83610079856101800151610170565b6103d1565b905060006100b2610092856060015161048c565b61009f866080015161048c565b6100ad876101a00151610644565b61065a565b905060006101006100c6866000015161068c565b6100d3876080015161048c565b6100e08860200151610644565b6100ed8960400151610644565b6100fb8a6101800151610170565b610767565b905060006101156101108761079d565b6109d8565b90506101458484848460405160200161013194939291906142c3565b6040516020818303038152906040526109d8565b6040516020016101559190614603565b6040516020818303038152906040529450505050505b919050565b606062ffffff82166101b6575060408051808201909152600281527f3025000000000000000000000000000000000000000000000000000000000000602082015261016b565b816000805b62ffffff8316156102065760ff8116156101d7576001016101f0565b600a62ffffff84160662ffffff166000146101f0576001015b600190910190600a62ffffff84160492506101bb565b61020e613e00565b60006005841061030357600060046102298660ff8716610b5b565b1015610236576001610239565b60005b60ff908116915061024d9085166001610b5b565b610258866005610b5b565b106102845761027f61026e60ff86166001610b5b565b610279876005610b5b565b90610b5b565b610287565b60005b60ff8516608085018190529092506102a6906001906102799085610bb8565b60ff90811660a085015260808401516102cd9183916102c791166001610b5b565b90610bb8565b60ff90811660408501526102f59082906102c7906102ee9088166001610bb8565b8590610bb8565b60ff16602084015250610373565b61030e600585610b5b565b60026080840181905290915061032c90600190610279908490610bb8565b60ff90811660a084015261034e906103479085166002610bb8565b8290610bb8565b60ff1660208301819052610363906002610b5b565b60ff166040830152600160c08301525b6103926103838560ff8616610b5b565b62ffffff891690600a0a610c12565b8252600160e0830152600484116103aa5760006103b5565b6103b5846004610b5b565b60ff1660608301526103c682610c79565b979650505050505050565b6060816103e1846060015161048c565b6103ee856080015161048c565b6104278660e00151156104065786610120015161040d565b8661010001515b8761016001518860c001518960a001518a60e00151610ea5565b6104608760e001511561043f57876101000151610446565b8761012001515b8861016001518960c001518a60a001518b60e00151610ea5565b6040516020016104749594939291906143ea565b60405160208183030381529060405290505b92915050565b6060816000805b82518160ff1610156104f057828160ff16815181106104ae57fe5b6020910101517fff0000000000000000000000000000000000000000000000000000000000000016601160f91b14156104e8576001909101905b600101610493565b5060ff81161561063c5760008160ff1683510167ffffffffffffffff8111801561051957600080fd5b506040519080825280601f01601f191660200182016040528015610544576020820181803683370190505b5090506000805b84518160ff16101561062f57848160ff168151811061056657fe5b6020910101517fff0000000000000000000000000000000000000000000000000000000000000016601160f91b14156105e4577f5c000000000000000000000000000000000000000000000000000000000000008383806001019450815181106105cc57fe5b60200101906001600160f81b031916908160001a9053505b848160ff16815181106105f357fe5b602001015160f81c60f81b83838060010194508151811061061057fe5b60200101906001600160f81b031916908160001a90535060010161054b565b508194505050505061016b565b509192915050565b60606104866001600160a01b0383166014610fcf565b6060838383866040516020016106739493929190614177565b60405160208183030381529060405290505b9392505050565b6060816106b157506040805180820190915260018152600360fc1b602082015261016b565b8160005b81156106c957600101600a820491506106b5565b60008167ffffffffffffffff811180156106e257600080fd5b506040519080825280601f01601f19166020018201604052801561070d576020820181803683370190505b50859350905060001982015b831561075e57600a840660300160f81b8282806001900393508151811061073c57fe5b60200101906001600160f81b031916908160001a905350600a84049350610719565b50949350505050565b606083858484896040516020016107829594939291906144eb565b60405160208183030381529060405290505b95945050505050565b60606000604051806102a001604052806107ba8560200151610644565b81526020016107cc8560400151610644565b8152602001846101a001516001600160a01b031681526020018460600151815260200184608001518152602001610807856101800151610170565b815260200184610100015160020b815260200184610120015160020b815260200184610160015160020b8152602001610850856101000151866101200151876101400151611157565b60000b81526020018460000151815260200161087a85602001516001600160a01b0316608861118e565b815260200161089785604001516001600160a01b0316608861118e565b81526020016108b485602001516001600160a01b0316600061118e565b81526020016108d185604001516001600160a01b0316600061118e565b81526020016109046108f686602001516001600160a01b03166010886000015161119d565b600060ff60106101126111bd565b815260200161093761092986604001516001600160a01b03166010886000015161119d565b600060ff60646101e46111bd565b815260200161095c6108f686602001516001600160a01b03166020886000015161119d565b815260200161098161092986604001516001600160a01b03166020886000015161119d565b81526020016109a66108f686602001516001600160a01b03166030886000015161119d565b81526020016109cb61092986604001516001600160a01b03166030886000015161119d565b9052905061068581611205565b60608151600014156109f9575060408051602081019091526000815261016b565b600060405180606001604052806040815260200161526960409139905060006003845160020181610a2657fe5b04600402905060008160200167ffffffffffffffff81118015610a4857600080fd5b506040519080825280601f01601f191660200182016040528015610a73576020820181803683370190505b509050818152600183018586518101602084015b81831015610adf576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825350600101610a87565b600389510660018114610af95760028114610b2557610b4d565b7f3d3d000000000000000000000000000000000000000000000000000000000000600119830152610b4d565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b600082821115610bb2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610685576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000808211610c68576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610c7157fe5b049392505050565b60606000826020015160ff1667ffffffffffffffff81118015610c9b57600080fd5b506040519080825280601f01601f191660200182016040528015610cc6576020820181803683370190505b5090508260e0015115610d1c577f250000000000000000000000000000000000000000000000000000000000000081600183510381518110610d0457fe5b60200101906001600160f81b031916908160001a9053505b8260c0015115610d7957600360fc1b81600081518110610d3857fe5b60200101906001600160f81b031916908160001a905350601760f91b81600181518110610d6157fe5b60200101906001600160f81b031916908160001a9053505b608083015160ff165b60a0840151610d959060ff166001610bb8565b811015610dcc57603060f81b828281518110610dad57fe5b60200101906001600160f81b031916908160001a905350600101610d82565b505b825115610486576000836060015160ff16118015610df95750826060015160ff16836040015160ff16145b15610e3c5760408301805160ff600019820181169092528251601760f91b92849216908110610e2457fe5b60200101906001600160f81b031916908160001a9053505b8251610e4e90603090600a9006610bb8565b60f81b818460400180518091906001900360ff1660ff1681525060ff1681518110610e7557fe5b60200101906001600160f81b031916908160001a905350600a8360000181815181610e9c57fe5b04905250610dce565b606084600281900b620d89e71981610eb957fe5b050260020b8660020b1415610f13578115610eef576040518060400160405280600381526020016209a82b60eb1b815250610f0c565b6040518060400160405280600381526020016226a4a760e91b8152505b9050610794565b84600281900b620d89e881610f2457fe5b050260020b8660020b1415610f7a578115610f5a576040518060400160405280600381526020016226a4a760e91b815250610f0c565b5060408051808201909152600381526209a82b60eb1b6020820152610794565b6000610f8587611494565b90508215610fbc57610fb978010000000000000000000000000000000000000000000000006001600160a01b038316610c12565b90505b610fc78186866117e2565b915050610794565b606060008260020260020167ffffffffffffffff81118015610ff057600080fd5b506040519080825280601f01601f19166020018201604052801561101b576020820181803683370190505b509050600360fc1b8160008151811061103057fe5b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061107557fe5b60200101906001600160f81b031916908160001a905350600160028402015b6001811115611103577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106110cc57fe5b1a60f81b8282815181106110dc57fe5b60200101906001600160f81b031916908160001a90535060049490941c9360001901611094565b508315610685576040805162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015290519081900360640190fd5b60008360020b8260020b12156111705750600019610685565b8260020b8260020b131561118657506001610685565b506000610685565b606061068583831c60036119b0565b600060ff826111ac8686611a77565b02816111b457fe5b06949350505050565b60606111fb6111f6846102c76111d3888a610b5b565b6111f06111e0888a610b5b565b6111ea8d8d610b5b565b90611a7e565b90610c12565b61068c565b9695505050505050565b606061121082611ad7565b61122c836000015184602001518560600151866080015161218b565b611243846060015185608001518660a001516124b6565b6112618560c001518660e00151876101000151886101200151612606565b61128161127287610140015161068c565b8760c001518860e00151612959565b6112948761014001518860400151612d8a565b6040516020018087805190602001908083835b602083106112c65780518252601f1990920191602091820191016112a7565b51815160209384036101000a600019018019909216911617905289519190930192890191508083835b6020831061130e5780518252601f1990920191602091820191016112ef565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b602083106113565780518252601f199092019160209182019101611337565b51815160209384036101000a600019018019909216911617905287519190930192870191508083835b6020831061139e5780518252601f19909201916020918201910161137f565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106113e65780518252601f1990920191602091820191016113c7565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061142e5780518252601f19909201916020918201910161140f565b5181516020939093036101000a60001901801990911692169190911790527f3c2f7376673e000000000000000000000000000000000000000000000000000092019182525060408051808303601919018152600690920190529998505050505050505050565b60008060008360020b126114ab578260020b6114b3565b8260020b6000035b9050620d89e881111561150d576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661152157600160801b611533565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611567576ffff97272373d413259a46990580e213a0260801c5b6004821615611586576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156115a5576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156115c4576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156115e3576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611602576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611621576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611641576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611661576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611681576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156116a1576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156116c1576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156116e1576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611701576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611721576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611742576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611762576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611781576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561179e576b048a170391f7dc42444e8fa20260801c5b60008460020b13156117b95780600019816117b557fe5b0490505b6401000000008106156117cd5760016117d0565b60005b60ff16602082901c0192505050919050565b606060006117f1858585612e02565b90506000611809828368010000000000000000612f04565b90506c010000000000000000000000008210801561184a576118438272047bf19673df52e37f2410011d100000000000600160801b612f04565b915061185f565b61185c82620186a0600160801b612f04565b91505b8160005b811561187757600101600a82049150611863565b600019016000806118888684612fb3565b915091508015611899576001909201915b6118a1613e00565b851561190e576118c06118b8602b60ff8716610b5b565b600790610bb8565b60ff9081166020830152600260808301526118e6906001906102c790602b908816610b5b565b60ff90811660a0830152602082015161190191166001610b5b565b60ff166040820152611985565b60098460ff16106119575761192760ff85166004610b5b565b60ff166020820181905260056080830152611943906001610b5b565b60ff1660a082015260046040820152611985565b6006602082015260056040820181905261197c906001906102c79060ff881690610b5b565b60ff1660608201525b82815285151560c0820152600060e08201526119a081610c79565b9c9b505050505050505050505050565b606060008260020267ffffffffffffffff811180156119ce57600080fd5b506040519080825280601f01601f1916602001820160405280156119f9576020820181803683370190505b5080519091505b8015611a6f577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611a3557fe5b1a60f81b826001830381518110611a4857fe5b60200101906001600160f81b031916908160001a90535060049490941c9360001901611a00565b509392505050565b1c60ff1690565b600082611a8d57506000610486565b82820282848281611a9a57fe5b04146106855760405162461bcd60e51b81526004018080602001828103825260218152602001806154886021913960400191505060405180910390fd5b6060611b6c82610160015160405160200180806150426081913960810182805190602001908083835b60208310611b1f5780518252601f199092019160209182019101611b00565b6001836020036101000a038019825116818451168082178552505050505050905001806813979f1e17b9bb339f60b91b8152506009019150506040516020818303038152906040526109d8565b611cd8836101e001518461020001518561018001516040516020018080614b7f6063913960630184805190602001908083835b60208310611bbe5780518252601f199092019160209182019101611b9f565b51815160209384036101000a600019018019909216911617905265272063793d2760d01b919093019081528551600690910192860191508083835b60208310611c185780518252601f199092019160209182019101611bf9565b51815160209384036101000a60001901801990921691161790527f2720723d273132307078272066696c6c3d272300000000000000000000000000919093019081528451601390910192850191508083835b60208310611c895780518252601f199092019160209182019101611c6a565b6001836020036101000a038019825116818451168082178552505050505050905001806813979f1e17b9bb339f60b91b81525060090193505050506040516020818303038152906040526109d8565b611d29846102200151856102400151866101a001516040516020018080614b7f60639139606301848051906020019080838360208310611bbe5780518252601f199092019160209182019101611b9f565b611e48856102600151866102800151876101c001516040516020018080614b7f6063913960630184805190602001908083835b60208310611d7b5780518252601f199092019160209182019101611d5c565b51815160209384036101000a600019018019909216911617905265272063793d2760d01b919093019081528551600690910192860191508083835b60208310611dd55780518252601f199092019160209182019101611db6565b51815160001960209485036101000a019081169019919091161790527f2720723d273130307078272066696c6c3d272300000000000000000000000000939091019283528451601390930192908501915080838360208310611c895780518252601f199092019160209182019101611c6a565b6101608601516040516020018060566148fa8239605601602c6152a982397f3c646566733e0000000000000000000000000000000000000000000000000000602c820152603201604b614ff78239604b0186805190602001908083835b60208310611ec45780518252601f199092019160209182019101611ea5565b6001836020036101000a03801982511681845116808217855250505050505090500180615b2f603e9139603e0185805190602001908083835b60208310611f1c5780518252601f199092019160209182019101611efd565b6001836020036101000a038019825116818451168082178552505050505050905001806150c3603e9139603e0184805190602001908083835b60208310611f745780518252601f199092019160209182019101611f55565b5181516020939093036101000a60001901801990911692169190911790527f22202f3e00000000000000000000000000000000000000000000000000000000920191825250600401603b6147f28239603b0183805190602001908083835b60208310611ff15780518252601f199092019160209182019101611fd2565b6001836020036101000a03801982511681845116808217855250505050505090500180614c3f60999139609901607f6156e08239607f016088615aa782396088016041614cd88239604101605d615c678239605d01607261578c8239607201604961475b823960490160be614f39823960be016071614a0b8239607101607561562382396075016066614d19823960660160a46152d5823960a4016085615b6d82397f3c6720636c69702d706174683d2275726c2823636f726e65727329223e00000060858201527f3c726563742066696c6c3d22000000000000000000000000000000000000000060a2820152825160ae9091019060208401908083835b6020831061210f5780518252601f1990920191602091820191016120f0565b6001836020036101000a03801982511681845116808217855250505050505090500180614d7f60319139603101604e6147a48239604e01605d614be28239605d0160416152288239604101605261510182396052016075615bf28239607501955050505050506040516020818303038152906040529050919050565b60608382858488878a896040516020018080615d4a60259139602501607d614ebc8239607d0189805190602001908083835b602083106121dc5780518252601f1990920191602091820191016121bd565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528a516005909101928b0191508083835b602083106122355780518252601f199092019160209182019101612216565b6001836020036101000a03801982511681845116808217855250505050505090500180614db0607991396079016086615cc4823960860187805190602001908083835b602083106122975780518252601f199092019160209182019101612278565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528851600590910192890191508083835b602083106122f05780518252601f1990920191602091820191016122d1565b6001836020036101000a0380198251168184511680821785525050505050509050018061498660859139608501607b6159158239607b0185805190602001908083835b602083106123525780518252601f199092019160209182019101612333565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528651600590910192870191508083835b602083106123ab5780518252601f19909201916020918201910161238c565b6001836020036101000a03801982511681845116808217855250505050505090500180614ad0605d9139605d0160a3615580823960a30183805190602001908083835b6020831061240d5780518252601f1990920191602091820191016123ee565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528451600590910192850191508083835b602083106124665780518252601f199092019160209182019101612447565b6001836020036101000a038019825116818451168082178552505050505050905001806146d0608b9139608b01985050505050505050506040516020818303038152906040529050949350505050565b6060838383604051602001808061482d60cd913960cd0184805190602001908083835b602083106124f85780518252601f1990920191602091820191016124d9565b6001836020036101000a03801982511681845116808217855250505050505090500180602f60f81b81525060010183805190602001908083835b602083106125515780518252601f199092019160209182019101612532565b6001836020036101000a03801982511681845116808217855250505050505090500180615ef36077913960770182805190602001908083835b602083106125a95780518252601f19909201916020918201910161258a565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b016073615d938239607301935050505060405160208183030381529060405290509392505050565b606060008260000b600114612698578260000b6000191461265c576040518060400160405280600581526020017f236e6f6e65000000000000000000000000000000000000000000000000000000815250612693565b6040518060400160405280600a81526020017f23666164652d646f776e000000000000000000000000000000000000000000008152505b6126cf565b6040518060400160405280600881526020017f23666164652d75700000000000000000000000000000000000000000000000008152505b905060006126de878787613024565b9050818183836126ed88613272565b60405160200180807f3c67206d61736b3d2275726c2800000000000000000000000000000000000000815250600d0186805190602001908083835b602083106127475780518252601f199092019160209182019101612728565b5181516020939093036101000a600019018019909116921691909117905261149160f11b9201918252506002016077615379823960770185805190602001908083835b602083106127a95780518252601f19909201916020918201910161278a565b6001836020036101000a03801982511681845116808217855250505050505090500180614a7c60549139605401807f3c2f673e3c67206d61736b3d2275726c2800000000000000000000000000000081525060110184805190602001908083835b602083106128295780518252601f19909201916020918201910161280a565b5181516020939093036101000a600019018019909116921691909117905261149160f11b92019182525060020160296153f0823960290160456154438239604501807f3c7061746820643d22000000000000000000000000000000000000000000000081525060090183805190602001908083835b602083106128bd5780518252601f19909201916020918201910161289e565b6001836020036101000a038019825116818451168082178552505050505050905001806156986048913960480182805190602001908083835b602083106129155780518252601f1990920191602091820191016128f6565b6001836020036101000a0380198251168184511680821785525050505050509050019550505050505060405160208183030381529060405292505050949350505050565b6060600061296684613746565b9050600061297384613746565b865183518251929350600490910191600a91820191016000806129968a8a613850565b915091506129a98560040160070261068c565b8b6129b98660040160070261068c565b896129c98760040160070261068c565b8a8787604051602001808061575f602d9139602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0189805190602001908083835b60208310612a215780518252601f199092019160209182019101612a02565b6001836020036101000a03801982511681845116808217855250505050505090500180615153603d9139603d01608d615e068239608d0188805190602001908083835b60208310612a835780518252601f199092019160209182019101612a64565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b01602d615fa28239602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0187805190602001908083835b60208310612b065780518252601f199092019160209182019101612ae7565b6001836020036101000a03801982511681845116808217855250505050505090500180615153603d9139603d016093614e29823960930186805190602001908083835b60208310612b685780518252601f199092019160209182019101612b49565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b01602d614b2d8239602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0185805190602001908083835b60208310612beb5780518252601f199092019160209182019101612bcc565b6001836020036101000a03801982511681845116808217855250505050505090500180615153603d9139603d016093615990823960930184805190602001908083835b60208310612c4d5780518252601f199092019160209182019101612c2e565b6001836020036101000a03801982511681845116808217855250505050505090500180615f6a603891396038016060615e938239606001606461551c82396064016025614b5a823960250183805190602001908083835b60208310612cc35780518252601f199092019160209182019101612ca4565b51815160209384036101000a60001901801990921691161790527f70782c2000000000000000000000000000000000000000000000000000000000919093019081528451600490910192850191508083835b60208310612d345780518252601f199092019160209182019101612d15565b6001836020036101000a0380198251168184511680821785525050505050509050018061495060369139603601985050505050505050506040516020818303038152906040529750505050505050509392505050565b6060612d968383613c81565b15612dec5760405160200180608d6158888239608d0160736154a9823960730160716151b78239607101608a6157fe8239608a016084615a23823960840190506040516020818303038152906040529050610486565b5060408051602081019091526000815292915050565b600080612e1d612e1860ff868116908616613ce4565b613d49565b9050600081118015612e30575060128111155b15612ef1578260ff168460ff161115612e9a57612e64612e51826002610c12565b6001600160a01b03871690600a0a611a7e565b91506002810660011415612e9557612e92827003298b075b4b6a5240945790619b37fd4a600160801b612f04565b91505b612eec565b612ebb612ea8826002610c12565b6001600160a01b03871690600a0a610c12565b91506002810660011415612eec57612ee982600160801b7003298b075b4b6a5240945790619b37fd4a612f04565b91505b611a6f565b50506001600160a01b0390921692915050565b6000808060001985870986860292508281109083900303905080612f3a5760008411612f2f57600080fd5b508290049050610685565b808411612f4657600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600080600060058460ff161115612fdb57612fd88560ff600419870116600a0a610c12565b94505b60006004600a8706119050612ff186600a610c12565b95508015613000578560010195505b85620186a0141561301657600a86049550600191505b5084925090505b9250929050565b606060008260020b85850360020b8161303957fe5b05905060048160020b13613084576040518060400160405280601a81526020017f4d312031433431203431203130352031303520313435203134350000000000008152509150611a6f565b60088160020b136130cc576040518060400160405280601981526020017f4d312031433333203439203937203131332031343520313435000000000000008152509150611a6f565b60108160020b13613114576040518060400160405280601981526020017f4d312031433333203537203839203131332031343520313435000000000000008152509150611a6f565b60208160020b1361315c576040518060400160405280601981526020017f4d312031433235203635203831203132312031343520313435000000000000008152509150611a6f565b60408160020b136131a4576040518060400160405280601981526020017f4d312031433137203733203733203132392031343520313435000000000000008152509150611a6f565b60808160020b136131ec576040518060400160405280601881526020017f4d312031433920383120363520313337203134352031343500000000000000008152509150611a6f565b6101008160020b13613235576040518060400160405280601a81526020017f4d31203143312038392035372e352031343520313435203134350000000000008152509150611a6f565b505060408051808201909152601881527f4d3120314331203937203439203134352031343520313435000000000000000060208201529392505050565b604080518082018252600281527f37330000000000000000000000000000000000000000000000000000000000006020808301919091528251808401845260038082527f313930000000000000000000000000000000000000000000000000000000000082840152845180860186528181527f32313700000000000000000000000000000000000000000000000000000000008185015285518087019096529085527f3333340000000000000000000000000000000000000000000000000000000000928501929092526060939091906001600087900b148061335957508560000b600019145b15613550578560000b600019146133705781613372565b835b8660000b600019146133845781613386565b835b8760000b60001914613398578361339a565b855b8860000b600019146133ac57836133ae565b855b60405160200180806b1e31b4b931b6329031bc1e9160a11b815250600c0185805190602001908083835b602083106133f75780518252601f1990920191602091820191016133d8565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528651600890910192870191508083835b602083106134535780518252601f199092019160209182019101613434565b6001836020036101000a038019825116818451168082178552505050505050905001806151906027913960270183805190602001908083835b602083106134ab5780518252601f19909201916020918201910161348c565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528451600890910192850191508083835b602083106135075780518252601f1990920191602091820191016134e8565b6001836020036101000a03801982511681845116808217855250505050505090500180615419602a9139602a01945050505050604051602081830303815290604052945061373d565b8383838360405160200180806b1e31b4b931b6329031bc1e9160a11b815250600c0185805190602001908083835b6020831061359d5780518252601f19909201916020918201910161357e565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528651600890910192870191508083835b602083106135f95780518252601f1990920191602091820191016135da565b51815160209384036101000a60001901801990921691161790527f70782220723d22347078222066696c6c3d22776869746522202f3e0000000000919093019081526b1e31b4b931b6329031bc1e9160a11b601b8201528551602790910192860191508083835b6020831061367f5780518252601f199092019160209182019101613660565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528451600890910192850191508083835b602083106136db5780518252601f1990920191602091820191016136bc565b6001836020036101000a038019825116818451168082178552505050505050905001807f70782220723d22347078222066696c6c3d22776869746522202f3e0000000000815250601b0194505050505060405160208183030381529060405294505b50505050919050565b6060600060405180602001604052806000815250905060008360020b121561378c5782600019029250604051806040016040528060018152602001602d60f81b81525090505b806137998460020b61068c565b6040516020018083805190602001908083835b602083106137cb5780518252601f1990920191602091820191016137ac565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106138135780518252601f1990920191602091820191016137f4565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b60608060006002858501810b0590506201e847198160020b12156138c857604051806040016040528060018152602001600760fb1b8152506040518060400160405280600181526020017f3700000000000000000000000000000000000000000000000000000000000000815250925092505061301d565b620124f7198160020b121561393157604051806040016040528060018152602001600760fb1b8152506040518060400160405280600481526020017f31302e3500000000000000000000000000000000000000000000000000000000815250925092505061301d565b6161a7198160020b121561399957604051806040016040528060018152602001600760fb1b8152506040518060400160405280600581526020017f31342e3235000000000000000000000000000000000000000000000000000000815250925092505061301d565b611387198160020b1215613a02576040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161062760f31b815250925092505061301d565b60008160020b1215613a69576040518060400160405280600281526020017f313100000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161323160f01b815250925092505061301d565b6113888160020b1215613aec576040518060400160405280600281526020017f31330000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250925092505061301d565b6161a88160020b1215613b6f576040518060400160405280600281526020017f31350000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f3235000000000000000000000000000000000000000000000000000000000000815250925092505061301d565b620124f88160020b1215613bd85760405180604001604052806002815260200161062760f31b8152506040518060400160405280600281526020017f3236000000000000000000000000000000000000000000000000000000000000815250925092505061301d565b6201e8488160020b1215613c265760405180604001604052806002815260200161323160f01b81525060405180604001604052806002815260200161323760f01b815250925092505061301d565b6040518060400160405280600281526020017f323400000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161323760f01b815250925092505061301d565b6040805160208082018590526bffffffffffffffffffffffff19606085901b16828401528251603481840301815260549092019092528051910120600090613cc884613d60565b60020260010160ff1660001981613cdb57fe5b04119392505050565b6000818303818312801590613cf95750838113155b80613d0e5750600083128015613d0e57508381135b6106855760405162461bcd60e51b8152600401808060200182810382526024815260200180615d6f6024913960400191505060405180910390fd5b600080821215613d5c5781600003610486565b5090565b6000808211613d6e57600080fd5b600160801b8210613d8157608091821c91015b680100000000000000008210613d9957604091821c91015b6401000000008210613dad57602091821c91015b620100008210613dbf57601091821c91015b6101008210613dd057600891821c91015b60108210613de057600491821c91015b60048210613df057600291821c91015b6002821061016b57600101919050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b80356001600160a01b038116811461016b57600080fd5b8035801515811461016b57600080fd5b8035600281900b811461016b57600080fd5b600082601f830112613e8d578081fd5b813567ffffffffffffffff811115613ea157fe5b613eb4601f8201601f191660200161467b565b818152846020838601011115613ec8578283fd5b816020850160208301379081016020019190915292915050565b803562ffffff8116811461016b57600080fd5b803560ff8116811461016b57600080fd5b600060208284031215613f17578081fd5b813567ffffffffffffffff80821115613f2e578283fd5b81840191506101c0808387031215613f44578384fd5b613f4d8161467b565b905082358152613f5f60208401613e44565b6020820152613f7060408401613e44565b6040820152606083013582811115613f86578485fd5b613f9287828601613e7d565b606083015250608083013582811115613fa9578485fd5b613fb587828601613e7d565b608083015250613fc760a08401613ef5565b60a0820152613fd860c08401613ef5565b60c0820152613fe960e08401613e5b565b60e08201526101009150613ffe828401613e6b565b828201526101209150614012828401613e6b565b828201526101409150614026828401613e6b565b82820152610160915061403a828401613e6b565b82820152610180915061404e828401613ee2565b828201526101a09150614062828401613e44565b91810191909152949350505050565b6000815161408381856020860161469f565b9290920192915050565b7fe29aa0efb88f20444953434c41494d45523a204475652064696c6967656e636581527f20697320696d7065726174697665207768656e20617373657373696e6720746860208201527f6973204e46542e204d616b65207375726520746f6b656e20616464726573736560408201527f73206d617463682074686520657870656374656420746f6b656e732c2061732060608201527f746f6b656e2073796d626f6c73206d617920626520696d6974617465642e00006080820152609e0190565b7f5c6e5c6e00000000000000000000000000000000000000000000000000000000815260040190565b60007f54686973204e465420726570726573656e74732061206c69717569646974792082527f706f736974696f6e20696e206120556e69737761702056332000000000000000602083015285516141d5816039850160208a0161469f565b602d60f81b60399184019182015285516141f681603a840160208a0161469f565b7f20706f6f6c2e2000000000000000000000000000000000000000000000000000603a92909101918201527f546865206f776e6572206f662074686973204e46542063616e206d6f6469667960418201527f206f722072656465656d2074686520706f736974696f6e2e5c6e00000000000060618201527f5c6e506f6f6c20416464726573733a2000000000000000000000000000000000607b82015284516142a681608b84016020890161469f565b612e3760f11b608b92909101918201526103c6608d820185614071565b60007f7b226e616d65223a220000000000000000000000000000000000000000000000825285516142fb816009850160208a0161469f565b7f222c20226465736372697074696f6e223a220000000000000000000000000000600991840191820152855161433881601b840160208a0161469f565b855191019061434e81601b84016020890161469f565b7f222c2022696d616765223a202200000000000000000000000000000000000000601b92909101918201527f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000602882015283516143b281604284016020880161469f565b7f227d000000000000000000000000000000000000000000000000000000000000604292909101918201526044019695505050505050565b60007f556e6973776170202d20000000000000000000000000000000000000000000008252865161442281600a850160208b0161469f565b80830190507f202d20000000000000000000000000000000000000000000000000000000000080600a830152875161446181600d850160208c0161469f565b602f60f81b600d9390910192830152865161448381600e850160208b0161469f565b600e920191820152845161449e81601184016020890161469f565b7f3c3e0000000000000000000000000000000000000000000000000000000000006011929091019182015283516144dc81601384016020880161469f565b01601301979650505050505050565b60007f20416464726573733a2000000000000000000000000000000000000000000000808352875161452481600a860160208c0161469f565b612e3760f11b600a91850191820152875161454681600c840160208c0161469f565b01600c810191909152855190614563826016830160208a0161469f565b8181019150507f5c6e46656520546965723a200000000000000000000000000000000000000000601682015284516145a281602284016020890161469f565b7f5c6e546f6b656e2049443a2000000000000000000000000000000000000000006022929091019182015283516145e081602e84016020880161469f565b6145f66145f1602e8385010161414e565b61408d565b9998505050505050505050565b60007f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008252825161463b81601d85016020870161469f565b91909101601d0192915050565b600060208252825180602084015261466781604085016020870161469f565b601f01601f19169190910160400192915050565b60405181810167ffffffffffffffff8111828210171561469757fe5b604052919050565b60005b838110156146ba5781810151838201526020016146a2565b838111156146c9576000848401525b5050505056fe203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e3c2f74657874506174683e3c2f746578743e3c73746f70206f66667365743d222e39222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e3c72656374207374796c653d2266696c7465723a2075726c28236631292220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e3c6665496d61676520726573756c743d2270332220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c67206d61736b3d2275726c2823666164652d73796d626f6c29223e3c726563742066696c6c3d226e6f6e652220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22323030707822202f3e203c7465787420793d22373070782220783d2233327078222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e742d73697a653d2233367078223e3c7376672077696474683d2232393022206865696768743d22353030222076696577426f783d2230203020323930203530302220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672270782c2030707829222063783d22307078222063793d223070782220723d22347078222066696c6c3d227768697465222f3e3c2f673e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e203c2f74657874506174683e3c6d61736b2069643d22666164652d757022206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d2275726c2823677261642d75702922202f3e3c2f6d61736b3e22207374726f6b653d227267626128302c302c302c302e332922207374726f6b652d77696474683d2233327078222066696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e6422202f3e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d2233307322203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20343434707829223e3c636972636c65207374796c653d227472616e73666f726d3a7472616e736c6174653364283c7376672077696474683d2732393027206865696768743d27353030272076696577426f783d2730203020323930203530302720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667273e3c636972636c652063783d27203c67207374796c653d2266696c7465723a75726c2823746f702d726567696f6e2d626c7572293b207472616e73666f726d3a7363616c6528312e35293b207472616e73666f726d2d6f726967696e3a63656e74657220746f703b223e22202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e3d2270302220696e323d22703122202f3e3c6665426c656e64206d6f64653d226578636c7573696f6e2220696e323d22703222202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e323d2270332220726573756c743d22626c656e644f757422202f3e3c6665476175737369616e426c7572203c706174682069643d226d696e696d61702220643d224d3233342034343443323334203435372e393439203234322e323120343633203235332034363322202f3e3c6d61736b2069643d226e6f6e6522206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d22776869746522202f3e3c2f6d61736b3e2220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e4d696e205469636b3a203c2f747370616e3e3c74657874506174682073746172744f66667365743d222d31303025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c6c696e6561724772616469656e742069643d22677261642d646f776e222078313d2230222078323d2231222079313d2230222079323d2231223e3c73746f70206f66667365743d22302e30222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365743d22302e39222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e3c66696c7465722069643d226631223e3c6665496d61676520726573756c743d2270302220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c7376672077696474683d2732393027206865696768743d27353030272076696577426f783d2730203020323930203530302720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667273e3c726563742077696474683d27323930707827206865696768743d273530307078272066696c6c3d2723222f3e3c6665496d61676520726573756c743d2270322220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c656c6c697073652063783d22353025222063793d22307078222072783d223138307078222072793d223132307078222066696c6c3d222330303022206f7061636974793d22302e383522202f3e3c2f673e707822206865696768743d2232367078222072783d22387078222072793d22387078222066696c6c3d227267626128302c302c302c302e362922202f3e70782220723d22347078222066696c6c3d22776869746522202f3e3c636972636c652063783d2231312e333437384c32342031324c31342e343334312031322e363532324c32322e333932332031384c31332e373831392031332e373831394c31382032322e333932334c31322e363532322031342e343334314c31322032344c31312e333437382031342e343334314c362032322e33393c726563742066696c6c3d226e6f6e652220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f20786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b273e3c6c696e6561724772616469656e742069643d22677261642d73796d626f6c223e3c73746f70206f66667365743d22302e37222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365743d222e3935222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e207374796c653d227472616e73666f726d3a7472616e736c61746528373270782c313839707829223e3c7265637420783d222d313670782220793d222d31367078222077696474683d22313830707822206865696768743d223138307078222066696c6c3d226e6f6e6522202f3e3c7061746820643d22207374796c653d227472616e73666f726d3a7472616e736c61746528373270782c313839707829223e70782220723d2232347078222066696c6c3d226e6f6e6522207374726f6b653d22776869746522202f3e3c7265637420783d222d313670782220793d222d31367078222077696474683d22313830707822206865696768743d223138307078222066696c6c3d226e6f6e6522202f3e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f773c673e3c70617468207374796c653d227472616e73666f726d3a7472616e736c617465283670782c367078292220643d224d313220304c31322e3635323220392e35363538374c313820312e363037374c31332e373831392031302e323138314c32322e3339323320364c31342e34333431203c70617468207374726f6b652d6c696e656361703d22726f756e642220643d224d38203943382e30303030342032322e393439342031362e32303939203238203237203238222066696c6c3d226e6f6e6522207374726f6b653d22776869746522202f3e20726570656174436f756e743d22696e646566696e69746522202f3e3c2f74657874506174683e3c74657874506174682073746172744f66667365743d222d353025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c6d61736b2069643d22666164652d646f776e22206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d2275726c2823677261642d646f776e2922202f3e3c2f6d61736b3e22207374726f6b653d2272676261283235352c3235352c3235352c3129222066696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e6422202f3e3c2f673e696e3d22626c656e644f75742220737464446576696174696f6e3d22343222202f3e3c2f66696c7465723e203c636c6970506174682069643d22636f726e657273223e3c726563742077696474683d2232393022206865696768743d22353030222072783d223432222072793d22343222202f3e3c2f636c6970506174683e203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20333834707829223e3c6c696e6561724772616469656e742069643d22677261642d7570222078313d2231222078323d2230222079313d2231222079323d2230223e3c73746f70206f66667365743d22302e30222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e32334c31302e323138312031332e373831394c312e363037372031384c392e35363538372031322e363532324c302031324c392e35363538372031312e333437384c312e3630373720364c31302e323138312031302e323138314c3620312e363037374c31312e3334373820392e35363538374c313220305a222066696c6c3d22776869746522202f3e3c67207374796c653d227472616e73666f726d3a7472616e736c6174652832323670782c20333932707829223e3c726563742077696474683d223336707822206865696768743d2233367078222072783d22387078222072793d22387078222066696c6c3d226e6f6e6522207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c74657874506174682073746172744f66667365743d22353025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e4d6178205469636b3a203c2f747370616e3e3c616e696d6174655472616e73666f726d206174747269627574654e616d653d227472616e73666f726d2220747970653d22726f74617465222066726f6d3d22302031382031382220746f3d2233363020313820313822206475723d223130732220726570656174436f756e743d22696e646566696e697465222f3e3c2f673e3c2f673e3c706174682069643d22746578742d706174682d612220643d224d34302031322048323530204132382032382030203020312032373820343020563436302041323820323820302030203120323530203438382048343020413238203238203020302031203132203436302056343020413238203238203020302031203430203132207a22202f3e222f3e3c6665496d61676520726573756c743d2270312220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c6d61736b2069643d22666164652d73796d626f6c22206d61736b436f6e74656e74556e6974733d227573657253706163654f6e557365223e3c726563742077696474683d22323930707822206865696768743d223230307078222066696c6c3d2275726c2823677261642d73796d626f6c2922202f3e3c2f6d61736b3e3c2f646566733e3c7265637420783d22302220793d2230222077696474683d2232393022206865696768743d22353030222072783d223432222072793d223432222066696c6c3d227267626128302c302c302c302922207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c2f673e3c66696c7465722069643d22746f702d726567696f6e2d626c7572223e3c6665476175737369616e426c757220696e3d22536f75726365477261706869632220737464446576696174696f6e3d22323422202f3e3c2f66696c7465723e3c2f74657874506174683e203c74657874506174682073746172744f66667365743d223025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c7465787420746578742d72656e646572696e673d226f7074696d697a655370656564223e5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f773c7265637420783d2231362220793d223136222077696474683d2232353822206865696768743d22343638222072783d223236222072793d223236222066696c6c3d227267626128302c302c302c302922207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e49443a203c2f747370616e3e3c726563742077696474683d223336707822206865696768743d2233367078222072783d22387078222072793d22387078222066696c6c3d226e6f6e6522207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c2f746578743e3c7465787420793d2231313570782220783d2233327078222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e742d73697a653d2233367078223e3c2f746578743e3c2f673e3c67207374796c653d227472616e73666f726d3a7472616e736c6174652832323670782c20343333707829223e203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20343134707829223ea164736f6c6343000706000a'; + return + hex'615fdb610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063c49917d71461003a575b600080fd5b61004d610048366004613f06565b610063565b60405161005a9190614648565b60405180910390f35b6060600061007e83610079856101800151610170565b6103d1565b905060006100b2610092856060015161048c565b61009f866080015161048c565b6100ad876101a00151610644565b61065a565b905060006101006100c6866000015161068c565b6100d3876080015161048c565b6100e08860200151610644565b6100ed8960400151610644565b6100fb8a6101800151610170565b610767565b905060006101156101108761079d565b6109d8565b90506101458484848460405160200161013194939291906142c3565b6040516020818303038152906040526109d8565b6040516020016101559190614603565b6040516020818303038152906040529450505050505b919050565b606062ffffff82166101b6575060408051808201909152600281527f3025000000000000000000000000000000000000000000000000000000000000602082015261016b565b816000805b62ffffff8316156102065760ff8116156101d7576001016101f0565b600a62ffffff84160662ffffff166000146101f0576001015b600190910190600a62ffffff84160492506101bb565b61020e613e00565b60006005841061030357600060046102298660ff8716610b5b565b1015610236576001610239565b60005b60ff908116915061024d9085166001610b5b565b610258866005610b5b565b106102845761027f61026e60ff86166001610b5b565b610279876005610b5b565b90610b5b565b610287565b60005b60ff8516608085018190529092506102a6906001906102799085610bb8565b60ff90811660a085015260808401516102cd9183916102c791166001610b5b565b90610bb8565b60ff90811660408501526102f59082906102c7906102ee9088166001610bb8565b8590610bb8565b60ff16602084015250610373565b61030e600585610b5b565b60026080840181905290915061032c90600190610279908490610bb8565b60ff90811660a084015261034e906103479085166002610bb8565b8290610bb8565b60ff1660208301819052610363906002610b5b565b60ff166040830152600160c08301525b6103926103838560ff8616610b5b565b62ffffff891690600a0a610c12565b8252600160e0830152600484116103aa5760006103b5565b6103b5846004610b5b565b60ff1660608301526103c682610c79565b979650505050505050565b6060816103e1846060015161048c565b6103ee856080015161048c565b6104278660e00151156104065786610120015161040d565b8661010001515b8761016001518860c001518960a001518a60e00151610ea5565b6104608760e001511561043f57876101000151610446565b8761012001515b8861016001518960c001518a60a001518b60e00151610ea5565b6040516020016104749594939291906143ea565b60405160208183030381529060405290505b92915050565b6060816000805b82518160ff1610156104f057828160ff16815181106104ae57fe5b6020910101517fff0000000000000000000000000000000000000000000000000000000000000016601160f91b14156104e8576001909101905b600101610493565b5060ff81161561063c5760008160ff1683510167ffffffffffffffff8111801561051957600080fd5b506040519080825280601f01601f191660200182016040528015610544576020820181803683370190505b5090506000805b84518160ff16101561062f57848160ff168151811061056657fe5b6020910101517fff0000000000000000000000000000000000000000000000000000000000000016601160f91b14156105e4577f5c000000000000000000000000000000000000000000000000000000000000008383806001019450815181106105cc57fe5b60200101906001600160f81b031916908160001a9053505b848160ff16815181106105f357fe5b602001015160f81c60f81b83838060010194508151811061061057fe5b60200101906001600160f81b031916908160001a90535060010161054b565b508194505050505061016b565b509192915050565b60606104866001600160a01b0383166014610fcf565b6060838383866040516020016106739493929190614177565b60405160208183030381529060405290505b9392505050565b6060816106b157506040805180820190915260018152600360fc1b602082015261016b565b8160005b81156106c957600101600a820491506106b5565b60008167ffffffffffffffff811180156106e257600080fd5b506040519080825280601f01601f19166020018201604052801561070d576020820181803683370190505b50859350905060001982015b831561075e57600a840660300160f81b8282806001900393508151811061073c57fe5b60200101906001600160f81b031916908160001a905350600a84049350610719565b50949350505050565b606083858484896040516020016107829594939291906144eb565b60405160208183030381529060405290505b95945050505050565b60606000604051806102a001604052806107ba8560200151610644565b81526020016107cc8560400151610644565b8152602001846101a001516001600160a01b031681526020018460600151815260200184608001518152602001610807856101800151610170565b815260200184610100015160020b815260200184610120015160020b815260200184610160015160020b8152602001610850856101000151866101200151876101400151611157565b60000b81526020018460000151815260200161087a85602001516001600160a01b0316608861118e565b815260200161089785604001516001600160a01b0316608861118e565b81526020016108b485602001516001600160a01b0316600061118e565b81526020016108d185604001516001600160a01b0316600061118e565b81526020016109046108f686602001516001600160a01b03166010886000015161119d565b600060ff60106101126111bd565b815260200161093761092986604001516001600160a01b03166010886000015161119d565b600060ff60646101e46111bd565b815260200161095c6108f686602001516001600160a01b03166020886000015161119d565b815260200161098161092986604001516001600160a01b03166020886000015161119d565b81526020016109a66108f686602001516001600160a01b03166030886000015161119d565b81526020016109cb61092986604001516001600160a01b03166030886000015161119d565b9052905061068581611205565b60608151600014156109f9575060408051602081019091526000815261016b565b600060405180606001604052806040815260200161526960409139905060006003845160020181610a2657fe5b04600402905060008160200167ffffffffffffffff81118015610a4857600080fd5b506040519080825280601f01601f191660200182016040528015610a73576020820181803683370190505b509050818152600183018586518101602084015b81831015610adf576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825350600101610a87565b600389510660018114610af95760028114610b2557610b4d565b7f3d3d000000000000000000000000000000000000000000000000000000000000600119830152610b4d565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b600082821115610bb2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610685576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000808211610c68576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610c7157fe5b049392505050565b60606000826020015160ff1667ffffffffffffffff81118015610c9b57600080fd5b506040519080825280601f01601f191660200182016040528015610cc6576020820181803683370190505b5090508260e0015115610d1c577f250000000000000000000000000000000000000000000000000000000000000081600183510381518110610d0457fe5b60200101906001600160f81b031916908160001a9053505b8260c0015115610d7957600360fc1b81600081518110610d3857fe5b60200101906001600160f81b031916908160001a905350601760f91b81600181518110610d6157fe5b60200101906001600160f81b031916908160001a9053505b608083015160ff165b60a0840151610d959060ff166001610bb8565b811015610dcc57603060f81b828281518110610dad57fe5b60200101906001600160f81b031916908160001a905350600101610d82565b505b825115610486576000836060015160ff16118015610df95750826060015160ff16836040015160ff16145b15610e3c5760408301805160ff600019820181169092528251601760f91b92849216908110610e2457fe5b60200101906001600160f81b031916908160001a9053505b8251610e4e90603090600a9006610bb8565b60f81b818460400180518091906001900360ff1660ff1681525060ff1681518110610e7557fe5b60200101906001600160f81b031916908160001a905350600a8360000181815181610e9c57fe5b04905250610dce565b606084600281900b620d89e71981610eb957fe5b050260020b8660020b1415610f13578115610eef576040518060400160405280600381526020016209a82b60eb1b815250610f0c565b6040518060400160405280600381526020016226a4a760e91b8152505b9050610794565b84600281900b620d89e881610f2457fe5b050260020b8660020b1415610f7a578115610f5a576040518060400160405280600381526020016226a4a760e91b815250610f0c565b5060408051808201909152600381526209a82b60eb1b6020820152610794565b6000610f8587611494565b90508215610fbc57610fb978010000000000000000000000000000000000000000000000006001600160a01b038316610c12565b90505b610fc78186866117e2565b915050610794565b606060008260020260020167ffffffffffffffff81118015610ff057600080fd5b506040519080825280601f01601f19166020018201604052801561101b576020820181803683370190505b509050600360fc1b8160008151811061103057fe5b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061107557fe5b60200101906001600160f81b031916908160001a905350600160028402015b6001811115611103577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106110cc57fe5b1a60f81b8282815181106110dc57fe5b60200101906001600160f81b031916908160001a90535060049490941c9360001901611094565b508315610685576040805162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015290519081900360640190fd5b60008360020b8260020b12156111705750600019610685565b8260020b8260020b131561118657506001610685565b506000610685565b606061068583831c60036119b0565b600060ff826111ac8686611a77565b02816111b457fe5b06949350505050565b60606111fb6111f6846102c76111d3888a610b5b565b6111f06111e0888a610b5b565b6111ea8d8d610b5b565b90611a7e565b90610c12565b61068c565b9695505050505050565b606061121082611ad7565b61122c836000015184602001518560600151866080015161218b565b611243846060015185608001518660a001516124b6565b6112618560c001518660e00151876101000151886101200151612606565b61128161127287610140015161068c565b8760c001518860e00151612959565b6112948761014001518860400151612d8a565b6040516020018087805190602001908083835b602083106112c65780518252601f1990920191602091820191016112a7565b51815160209384036101000a600019018019909216911617905289519190930192890191508083835b6020831061130e5780518252601f1990920191602091820191016112ef565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b602083106113565780518252601f199092019160209182019101611337565b51815160209384036101000a600019018019909216911617905287519190930192870191508083835b6020831061139e5780518252601f19909201916020918201910161137f565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106113e65780518252601f1990920191602091820191016113c7565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061142e5780518252601f19909201916020918201910161140f565b5181516020939093036101000a60001901801990911692169190911790527f3c2f7376673e000000000000000000000000000000000000000000000000000092019182525060408051808303601919018152600690920190529998505050505050505050565b60008060008360020b126114ab578260020b6114b3565b8260020b6000035b9050620d89e881111561150d576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661152157600160801b611533565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611567576ffff97272373d413259a46990580e213a0260801c5b6004821615611586576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156115a5576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156115c4576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156115e3576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611602576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611621576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611641576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611661576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611681576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156116a1576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156116c1576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156116e1576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611701576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611721576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611742576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611762576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611781576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561179e576b048a170391f7dc42444e8fa20260801c5b60008460020b13156117b95780600019816117b557fe5b0490505b6401000000008106156117cd5760016117d0565b60005b60ff16602082901c0192505050919050565b606060006117f1858585612e02565b90506000611809828368010000000000000000612f04565b90506c010000000000000000000000008210801561184a576118438272047bf19673df52e37f2410011d100000000000600160801b612f04565b915061185f565b61185c82620186a0600160801b612f04565b91505b8160005b811561187757600101600a82049150611863565b600019016000806118888684612fb3565b915091508015611899576001909201915b6118a1613e00565b851561190e576118c06118b8602b60ff8716610b5b565b600790610bb8565b60ff9081166020830152600260808301526118e6906001906102c790602b908816610b5b565b60ff90811660a0830152602082015161190191166001610b5b565b60ff166040820152611985565b60098460ff16106119575761192760ff85166004610b5b565b60ff166020820181905260056080830152611943906001610b5b565b60ff1660a082015260046040820152611985565b6006602082015260056040820181905261197c906001906102c79060ff881690610b5b565b60ff1660608201525b82815285151560c0820152600060e08201526119a081610c79565b9c9b505050505050505050505050565b606060008260020267ffffffffffffffff811180156119ce57600080fd5b506040519080825280601f01601f1916602001820160405280156119f9576020820181803683370190505b5080519091505b8015611a6f577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611a3557fe5b1a60f81b826001830381518110611a4857fe5b60200101906001600160f81b031916908160001a90535060049490941c9360001901611a00565b509392505050565b1c60ff1690565b600082611a8d57506000610486565b82820282848281611a9a57fe5b04146106855760405162461bcd60e51b81526004018080602001828103825260218152602001806154886021913960400191505060405180910390fd5b6060611b6c82610160015160405160200180806150426081913960810182805190602001908083835b60208310611b1f5780518252601f199092019160209182019101611b00565b6001836020036101000a038019825116818451168082178552505050505050905001806813979f1e17b9bb339f60b91b8152506009019150506040516020818303038152906040526109d8565b611cd8836101e001518461020001518561018001516040516020018080614b7f6063913960630184805190602001908083835b60208310611bbe5780518252601f199092019160209182019101611b9f565b51815160209384036101000a600019018019909216911617905265272063793d2760d01b919093019081528551600690910192860191508083835b60208310611c185780518252601f199092019160209182019101611bf9565b51815160209384036101000a60001901801990921691161790527f2720723d273132307078272066696c6c3d272300000000000000000000000000919093019081528451601390910192850191508083835b60208310611c895780518252601f199092019160209182019101611c6a565b6001836020036101000a038019825116818451168082178552505050505050905001806813979f1e17b9bb339f60b91b81525060090193505050506040516020818303038152906040526109d8565b611d29846102200151856102400151866101a001516040516020018080614b7f60639139606301848051906020019080838360208310611bbe5780518252601f199092019160209182019101611b9f565b611e48856102600151866102800151876101c001516040516020018080614b7f6063913960630184805190602001908083835b60208310611d7b5780518252601f199092019160209182019101611d5c565b51815160209384036101000a600019018019909216911617905265272063793d2760d01b919093019081528551600690910192860191508083835b60208310611dd55780518252601f199092019160209182019101611db6565b51815160001960209485036101000a019081169019919091161790527f2720723d273130307078272066696c6c3d272300000000000000000000000000939091019283528451601390930192908501915080838360208310611c895780518252601f199092019160209182019101611c6a565b6101608601516040516020018060566148fa8239605601602c6152a982397f3c646566733e0000000000000000000000000000000000000000000000000000602c820152603201604b614ff78239604b0186805190602001908083835b60208310611ec45780518252601f199092019160209182019101611ea5565b6001836020036101000a03801982511681845116808217855250505050505090500180615b2f603e9139603e0185805190602001908083835b60208310611f1c5780518252601f199092019160209182019101611efd565b6001836020036101000a038019825116818451168082178552505050505050905001806150c3603e9139603e0184805190602001908083835b60208310611f745780518252601f199092019160209182019101611f55565b5181516020939093036101000a60001901801990911692169190911790527f22202f3e00000000000000000000000000000000000000000000000000000000920191825250600401603b6147f28239603b0183805190602001908083835b60208310611ff15780518252601f199092019160209182019101611fd2565b6001836020036101000a03801982511681845116808217855250505050505090500180614c3f60999139609901607f6156e08239607f016088615aa782396088016041614cd88239604101605d615c678239605d01607261578c8239607201604961475b823960490160be614f39823960be016071614a0b8239607101607561562382396075016066614d19823960660160a46152d5823960a4016085615b6d82397f3c6720636c69702d706174683d2275726c2823636f726e65727329223e00000060858201527f3c726563742066696c6c3d22000000000000000000000000000000000000000060a2820152825160ae9091019060208401908083835b6020831061210f5780518252601f1990920191602091820191016120f0565b6001836020036101000a03801982511681845116808217855250505050505090500180614d7f60319139603101604e6147a48239604e01605d614be28239605d0160416152288239604101605261510182396052016075615bf28239607501955050505050506040516020818303038152906040529050919050565b60608382858488878a896040516020018080615d4a60259139602501607d614ebc8239607d0189805190602001908083835b602083106121dc5780518252601f1990920191602091820191016121bd565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528a516005909101928b0191508083835b602083106122355780518252601f199092019160209182019101612216565b6001836020036101000a03801982511681845116808217855250505050505090500180614db0607991396079016086615cc4823960860187805190602001908083835b602083106122975780518252601f199092019160209182019101612278565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528851600590910192890191508083835b602083106122f05780518252601f1990920191602091820191016122d1565b6001836020036101000a0380198251168184511680821785525050505050509050018061498660859139608501607b6159158239607b0185805190602001908083835b602083106123525780518252601f199092019160209182019101612333565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528651600590910192870191508083835b602083106123ab5780518252601f19909201916020918201910161238c565b6001836020036101000a03801982511681845116808217855250505050505090500180614ad0605d9139605d0160a3615580823960a30183805190602001908083835b6020831061240d5780518252601f1990920191602091820191016123ee565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528451600590910192850191508083835b602083106124665780518252601f199092019160209182019101612447565b6001836020036101000a038019825116818451168082178552505050505050905001806146d0608b9139608b01985050505050505050506040516020818303038152906040529050949350505050565b6060838383604051602001808061482d60cd913960cd0184805190602001908083835b602083106124f85780518252601f1990920191602091820191016124d9565b6001836020036101000a03801982511681845116808217855250505050505090500180602f60f81b81525060010183805190602001908083835b602083106125515780518252601f199092019160209182019101612532565b6001836020036101000a03801982511681845116808217855250505050505090500180615ef36077913960770182805190602001908083835b602083106125a95780518252601f19909201916020918201910161258a565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b016073615d938239607301935050505060405160208183030381529060405290509392505050565b606060008260000b600114612698578260000b6000191461265c576040518060400160405280600581526020017f236e6f6e65000000000000000000000000000000000000000000000000000000815250612693565b6040518060400160405280600a81526020017f23666164652d646f776e000000000000000000000000000000000000000000008152505b6126cf565b6040518060400160405280600881526020017f23666164652d75700000000000000000000000000000000000000000000000008152505b905060006126de878787613024565b9050818183836126ed88613272565b60405160200180807f3c67206d61736b3d2275726c2800000000000000000000000000000000000000815250600d0186805190602001908083835b602083106127475780518252601f199092019160209182019101612728565b5181516020939093036101000a600019018019909116921691909117905261149160f11b9201918252506002016077615379823960770185805190602001908083835b602083106127a95780518252601f19909201916020918201910161278a565b6001836020036101000a03801982511681845116808217855250505050505090500180614a7c60549139605401807f3c2f673e3c67206d61736b3d2275726c2800000000000000000000000000000081525060110184805190602001908083835b602083106128295780518252601f19909201916020918201910161280a565b5181516020939093036101000a600019018019909116921691909117905261149160f11b92019182525060020160296153f0823960290160456154438239604501807f3c7061746820643d22000000000000000000000000000000000000000000000081525060090183805190602001908083835b602083106128bd5780518252601f19909201916020918201910161289e565b6001836020036101000a038019825116818451168082178552505050505050905001806156986048913960480182805190602001908083835b602083106129155780518252601f1990920191602091820191016128f6565b6001836020036101000a0380198251168184511680821785525050505050509050019550505050505060405160208183030381529060405292505050949350505050565b6060600061296684613746565b9050600061297384613746565b865183518251929350600490910191600a91820191016000806129968a8a613850565b915091506129a98560040160070261068c565b8b6129b98660040160070261068c565b896129c98760040160070261068c565b8a8787604051602001808061575f602d9139602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0189805190602001908083835b60208310612a215780518252601f199092019160209182019101612a02565b6001836020036101000a03801982511681845116808217855250505050505090500180615153603d9139603d01608d615e068239608d0188805190602001908083835b60208310612a835780518252601f199092019160209182019101612a64565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b01602d615fa28239602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0187805190602001908083835b60208310612b065780518252601f199092019160209182019101612ae7565b6001836020036101000a03801982511681845116808217855250505050505090500180615153603d9139603d016093614e29823960930186805190602001908083835b60208310612b685780518252601f199092019160209182019101612b49565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b01602d614b2d8239602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0185805190602001908083835b60208310612beb5780518252601f199092019160209182019101612bcc565b6001836020036101000a03801982511681845116808217855250505050505090500180615153603d9139603d016093615990823960930184805190602001908083835b60208310612c4d5780518252601f199092019160209182019101612c2e565b6001836020036101000a03801982511681845116808217855250505050505090500180615f6a603891396038016060615e938239606001606461551c82396064016025614b5a823960250183805190602001908083835b60208310612cc35780518252601f199092019160209182019101612ca4565b51815160209384036101000a60001901801990921691161790527f70782c2000000000000000000000000000000000000000000000000000000000919093019081528451600490910192850191508083835b60208310612d345780518252601f199092019160209182019101612d15565b6001836020036101000a0380198251168184511680821785525050505050509050018061495060369139603601985050505050505050506040516020818303038152906040529750505050505050509392505050565b6060612d968383613c81565b15612dec5760405160200180608d6158888239608d0160736154a9823960730160716151b78239607101608a6157fe8239608a016084615a23823960840190506040516020818303038152906040529050610486565b5060408051602081019091526000815292915050565b600080612e1d612e1860ff868116908616613ce4565b613d49565b9050600081118015612e30575060128111155b15612ef1578260ff168460ff161115612e9a57612e64612e51826002610c12565b6001600160a01b03871690600a0a611a7e565b91506002810660011415612e9557612e92827003298b075b4b6a5240945790619b37fd4a600160801b612f04565b91505b612eec565b612ebb612ea8826002610c12565b6001600160a01b03871690600a0a610c12565b91506002810660011415612eec57612ee982600160801b7003298b075b4b6a5240945790619b37fd4a612f04565b91505b611a6f565b50506001600160a01b0390921692915050565b6000808060001985870986860292508281109083900303905080612f3a5760008411612f2f57600080fd5b508290049050610685565b808411612f4657600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600080600060058460ff161115612fdb57612fd88560ff600419870116600a0a610c12565b94505b60006004600a8706119050612ff186600a610c12565b95508015613000578560010195505b85620186a0141561301657600a86049550600191505b5084925090505b9250929050565b606060008260020b85850360020b8161303957fe5b05905060048160020b13613084576040518060400160405280601a81526020017f4d312031433431203431203130352031303520313435203134350000000000008152509150611a6f565b60088160020b136130cc576040518060400160405280601981526020017f4d312031433333203439203937203131332031343520313435000000000000008152509150611a6f565b60108160020b13613114576040518060400160405280601981526020017f4d312031433333203537203839203131332031343520313435000000000000008152509150611a6f565b60208160020b1361315c576040518060400160405280601981526020017f4d312031433235203635203831203132312031343520313435000000000000008152509150611a6f565b60408160020b136131a4576040518060400160405280601981526020017f4d312031433137203733203733203132392031343520313435000000000000008152509150611a6f565b60808160020b136131ec576040518060400160405280601881526020017f4d312031433920383120363520313337203134352031343500000000000000008152509150611a6f565b6101008160020b13613235576040518060400160405280601a81526020017f4d31203143312038392035372e352031343520313435203134350000000000008152509150611a6f565b505060408051808201909152601881527f4d3120314331203937203439203134352031343520313435000000000000000060208201529392505050565b604080518082018252600281527f37330000000000000000000000000000000000000000000000000000000000006020808301919091528251808401845260038082527f313930000000000000000000000000000000000000000000000000000000000082840152845180860186528181527f32313700000000000000000000000000000000000000000000000000000000008185015285518087019096529085527f3333340000000000000000000000000000000000000000000000000000000000928501929092526060939091906001600087900b148061335957508560000b600019145b15613550578560000b600019146133705781613372565b835b8660000b600019146133845781613386565b835b8760000b60001914613398578361339a565b855b8860000b600019146133ac57836133ae565b855b60405160200180806b1e31b4b931b6329031bc1e9160a11b815250600c0185805190602001908083835b602083106133f75780518252601f1990920191602091820191016133d8565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528651600890910192870191508083835b602083106134535780518252601f199092019160209182019101613434565b6001836020036101000a038019825116818451168082178552505050505050905001806151906027913960270183805190602001908083835b602083106134ab5780518252601f19909201916020918201910161348c565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528451600890910192850191508083835b602083106135075780518252601f1990920191602091820191016134e8565b6001836020036101000a03801982511681845116808217855250505050505090500180615419602a9139602a01945050505050604051602081830303815290604052945061373d565b8383838360405160200180806b1e31b4b931b6329031bc1e9160a11b815250600c0185805190602001908083835b6020831061359d5780518252601f19909201916020918201910161357e565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528651600890910192870191508083835b602083106135f95780518252601f1990920191602091820191016135da565b51815160209384036101000a60001901801990921691161790527f70782220723d22347078222066696c6c3d22776869746522202f3e0000000000919093019081526b1e31b4b931b6329031bc1e9160a11b601b8201528551602790910192860191508083835b6020831061367f5780518252601f199092019160209182019101613660565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528451600890910192850191508083835b602083106136db5780518252601f1990920191602091820191016136bc565b6001836020036101000a038019825116818451168082178552505050505050905001807f70782220723d22347078222066696c6c3d22776869746522202f3e0000000000815250601b0194505050505060405160208183030381529060405294505b50505050919050565b6060600060405180602001604052806000815250905060008360020b121561378c5782600019029250604051806040016040528060018152602001602d60f81b81525090505b806137998460020b61068c565b6040516020018083805190602001908083835b602083106137cb5780518252601f1990920191602091820191016137ac565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106138135780518252601f1990920191602091820191016137f4565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b60608060006002858501810b0590506201e847198160020b12156138c857604051806040016040528060018152602001600760fb1b8152506040518060400160405280600181526020017f3700000000000000000000000000000000000000000000000000000000000000815250925092505061301d565b620124f7198160020b121561393157604051806040016040528060018152602001600760fb1b8152506040518060400160405280600481526020017f31302e3500000000000000000000000000000000000000000000000000000000815250925092505061301d565b6161a7198160020b121561399957604051806040016040528060018152602001600760fb1b8152506040518060400160405280600581526020017f31342e3235000000000000000000000000000000000000000000000000000000815250925092505061301d565b611387198160020b1215613a02576040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161062760f31b815250925092505061301d565b60008160020b1215613a69576040518060400160405280600281526020017f313100000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161323160f01b815250925092505061301d565b6113888160020b1215613aec576040518060400160405280600281526020017f31330000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250925092505061301d565b6161a88160020b1215613b6f576040518060400160405280600281526020017f31350000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f3235000000000000000000000000000000000000000000000000000000000000815250925092505061301d565b620124f88160020b1215613bd85760405180604001604052806002815260200161062760f31b8152506040518060400160405280600281526020017f3236000000000000000000000000000000000000000000000000000000000000815250925092505061301d565b6201e8488160020b1215613c265760405180604001604052806002815260200161323160f01b81525060405180604001604052806002815260200161323760f01b815250925092505061301d565b6040518060400160405280600281526020017f323400000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161323760f01b815250925092505061301d565b6040805160208082018590526bffffffffffffffffffffffff19606085901b16828401528251603481840301815260549092019092528051910120600090613cc884613d60565b60020260010160ff1660001981613cdb57fe5b04119392505050565b6000818303818312801590613cf95750838113155b80613d0e5750600083128015613d0e57508381135b6106855760405162461bcd60e51b8152600401808060200182810382526024815260200180615d6f6024913960400191505060405180910390fd5b600080821215613d5c5781600003610486565b5090565b6000808211613d6e57600080fd5b600160801b8210613d8157608091821c91015b680100000000000000008210613d9957604091821c91015b6401000000008210613dad57602091821c91015b620100008210613dbf57601091821c91015b6101008210613dd057600891821c91015b60108210613de057600491821c91015b60048210613df057600291821c91015b6002821061016b57600101919050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b80356001600160a01b038116811461016b57600080fd5b8035801515811461016b57600080fd5b8035600281900b811461016b57600080fd5b600082601f830112613e8d578081fd5b813567ffffffffffffffff811115613ea157fe5b613eb4601f8201601f191660200161467b565b818152846020838601011115613ec8578283fd5b816020850160208301379081016020019190915292915050565b803562ffffff8116811461016b57600080fd5b803560ff8116811461016b57600080fd5b600060208284031215613f17578081fd5b813567ffffffffffffffff80821115613f2e578283fd5b81840191506101c0808387031215613f44578384fd5b613f4d8161467b565b905082358152613f5f60208401613e44565b6020820152613f7060408401613e44565b6040820152606083013582811115613f86578485fd5b613f9287828601613e7d565b606083015250608083013582811115613fa9578485fd5b613fb587828601613e7d565b608083015250613fc760a08401613ef5565b60a0820152613fd860c08401613ef5565b60c0820152613fe960e08401613e5b565b60e08201526101009150613ffe828401613e6b565b828201526101209150614012828401613e6b565b828201526101409150614026828401613e6b565b82820152610160915061403a828401613e6b565b82820152610180915061404e828401613ee2565b828201526101a09150614062828401613e44565b91810191909152949350505050565b6000815161408381856020860161469f565b9290920192915050565b7fe29aa0efb88f20444953434c41494d45523a204475652064696c6967656e636581527f20697320696d7065726174697665207768656e20617373657373696e6720746860208201527f6973204e46542e204d616b65207375726520746f6b656e20616464726573736560408201527f73206d617463682074686520657870656374656420746f6b656e732c2061732060608201527f746f6b656e2073796d626f6c73206d617920626520696d6974617465642e00006080820152609e0190565b7f5c6e5c6e00000000000000000000000000000000000000000000000000000000815260040190565b60007f54686973204e465420726570726573656e74732061206c69717569646974792082527f706f736974696f6e20696e206120556e69737761702056332000000000000000602083015285516141d5816039850160208a0161469f565b602d60f81b60399184019182015285516141f681603a840160208a0161469f565b7f20706f6f6c2e2000000000000000000000000000000000000000000000000000603a92909101918201527f546865206f776e6572206f662074686973204e46542063616e206d6f6469667960418201527f206f722072656465656d2074686520706f736974696f6e2e5c6e00000000000060618201527f5c6e506f6f6c20416464726573733a2000000000000000000000000000000000607b82015284516142a681608b84016020890161469f565b612e3760f11b608b92909101918201526103c6608d820185614071565b60007f7b226e616d65223a220000000000000000000000000000000000000000000000825285516142fb816009850160208a0161469f565b7f222c20226465736372697074696f6e223a220000000000000000000000000000600991840191820152855161433881601b840160208a0161469f565b855191019061434e81601b84016020890161469f565b7f222c2022696d616765223a202200000000000000000000000000000000000000601b92909101918201527f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000602882015283516143b281604284016020880161469f565b7f227d000000000000000000000000000000000000000000000000000000000000604292909101918201526044019695505050505050565b60007f556e6973776170202d20000000000000000000000000000000000000000000008252865161442281600a850160208b0161469f565b80830190507f202d20000000000000000000000000000000000000000000000000000000000080600a830152875161446181600d850160208c0161469f565b602f60f81b600d9390910192830152865161448381600e850160208b0161469f565b600e920191820152845161449e81601184016020890161469f565b7f3c3e0000000000000000000000000000000000000000000000000000000000006011929091019182015283516144dc81601384016020880161469f565b01601301979650505050505050565b60007f20416464726573733a2000000000000000000000000000000000000000000000808352875161452481600a860160208c0161469f565b612e3760f11b600a91850191820152875161454681600c840160208c0161469f565b01600c810191909152855190614563826016830160208a0161469f565b8181019150507f5c6e46656520546965723a200000000000000000000000000000000000000000601682015284516145a281602284016020890161469f565b7f5c6e546f6b656e2049443a2000000000000000000000000000000000000000006022929091019182015283516145e081602e84016020880161469f565b6145f66145f1602e8385010161414e565b61408d565b9998505050505050505050565b60007f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008252825161463b81601d85016020870161469f565b91909101601d0192915050565b600060208252825180602084015261466781604085016020870161469f565b601f01601f19169190910160400192915050565b60405181810167ffffffffffffffff8111828210171561469757fe5b604052919050565b60005b838110156146ba5781810151838201526020016146a2565b838111156146c9576000848401525b5050505056fe203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e3c2f74657874506174683e3c2f746578743e3c73746f70206f66667365743d222e39222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e3c72656374207374796c653d2266696c7465723a2075726c28236631292220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e3c6665496d61676520726573756c743d2270332220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c67206d61736b3d2275726c2823666164652d73796d626f6c29223e3c726563742066696c6c3d226e6f6e652220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22323030707822202f3e203c7465787420793d22373070782220783d2233327078222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e742d73697a653d2233367078223e3c7376672077696474683d2232393022206865696768743d22353030222076696577426f783d2230203020323930203530302220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672270782c2030707829222063783d22307078222063793d223070782220723d22347078222066696c6c3d227768697465222f3e3c2f673e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e203c2f74657874506174683e3c6d61736b2069643d22666164652d757022206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d2275726c2823677261642d75702922202f3e3c2f6d61736b3e22207374726f6b653d227267626128302c302c302c302e332922207374726f6b652d77696474683d2233327078222066696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e6422202f3e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d2233307322203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20343434707829223e3c636972636c65207374796c653d227472616e73666f726d3a7472616e736c6174653364283c7376672077696474683d2732393027206865696768743d27353030272076696577426f783d2730203020323930203530302720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667273e3c636972636c652063783d27203c67207374796c653d2266696c7465723a75726c2823746f702d726567696f6e2d626c7572293b207472616e73666f726d3a7363616c6528312e35293b207472616e73666f726d2d6f726967696e3a63656e74657220746f703b223e22202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e3d2270302220696e323d22703122202f3e3c6665426c656e64206d6f64653d226578636c7573696f6e2220696e323d22703222202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e323d2270332220726573756c743d22626c656e644f757422202f3e3c6665476175737369616e426c7572203c706174682069643d226d696e696d61702220643d224d3233342034343443323334203435372e393439203234322e323120343633203235332034363322202f3e3c6d61736b2069643d226e6f6e6522206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d22776869746522202f3e3c2f6d61736b3e2220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e4d696e205469636b3a203c2f747370616e3e3c74657874506174682073746172744f66667365743d222d31303025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c6c696e6561724772616469656e742069643d22677261642d646f776e222078313d2230222078323d2231222079313d2230222079323d2231223e3c73746f70206f66667365743d22302e30222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365743d22302e39222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e3c66696c7465722069643d226631223e3c6665496d61676520726573756c743d2270302220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c7376672077696474683d2732393027206865696768743d27353030272076696577426f783d2730203020323930203530302720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667273e3c726563742077696474683d27323930707827206865696768743d273530307078272066696c6c3d2723222f3e3c6665496d61676520726573756c743d2270322220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c656c6c697073652063783d22353025222063793d22307078222072783d223138307078222072793d223132307078222066696c6c3d222330303022206f7061636974793d22302e383522202f3e3c2f673e707822206865696768743d2232367078222072783d22387078222072793d22387078222066696c6c3d227267626128302c302c302c302e362922202f3e70782220723d22347078222066696c6c3d22776869746522202f3e3c636972636c652063783d2231312e333437384c32342031324c31342e343334312031322e363532324c32322e333932332031384c31332e373831392031332e373831394c31382032322e333932334c31322e363532322031342e343334314c31322032344c31312e333437382031342e343334314c362032322e33393c726563742066696c6c3d226e6f6e652220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f20786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b273e3c6c696e6561724772616469656e742069643d22677261642d73796d626f6c223e3c73746f70206f66667365743d22302e37222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365743d222e3935222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e207374796c653d227472616e73666f726d3a7472616e736c61746528373270782c313839707829223e3c7265637420783d222d313670782220793d222d31367078222077696474683d22313830707822206865696768743d223138307078222066696c6c3d226e6f6e6522202f3e3c7061746820643d22207374796c653d227472616e73666f726d3a7472616e736c61746528373270782c313839707829223e70782220723d2232347078222066696c6c3d226e6f6e6522207374726f6b653d22776869746522202f3e3c7265637420783d222d313670782220793d222d31367078222077696474683d22313830707822206865696768743d223138307078222066696c6c3d226e6f6e6522202f3e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f773c673e3c70617468207374796c653d227472616e73666f726d3a7472616e736c617465283670782c367078292220643d224d313220304c31322e3635323220392e35363538374c313820312e363037374c31332e373831392031302e323138314c32322e3339323320364c31342e34333431203c70617468207374726f6b652d6c696e656361703d22726f756e642220643d224d38203943382e30303030342032322e393439342031362e32303939203238203237203238222066696c6c3d226e6f6e6522207374726f6b653d22776869746522202f3e20726570656174436f756e743d22696e646566696e69746522202f3e3c2f74657874506174683e3c74657874506174682073746172744f66667365743d222d353025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c6d61736b2069643d22666164652d646f776e22206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d2275726c2823677261642d646f776e2922202f3e3c2f6d61736b3e22207374726f6b653d2272676261283235352c3235352c3235352c3129222066696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e6422202f3e3c2f673e696e3d22626c656e644f75742220737464446576696174696f6e3d22343222202f3e3c2f66696c7465723e203c636c6970506174682069643d22636f726e657273223e3c726563742077696474683d2232393022206865696768743d22353030222072783d223432222072793d22343222202f3e3c2f636c6970506174683e203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20333834707829223e3c6c696e6561724772616469656e742069643d22677261642d7570222078313d2231222078323d2230222079313d2231222079323d2230223e3c73746f70206f66667365743d22302e30222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223122202f3e32334c31302e323138312031332e373831394c312e363037372031384c392e35363538372031322e363532324c302031324c392e35363538372031312e333437384c312e3630373720364c31302e323138312031302e323138314c3620312e363037374c31312e3334373820392e35363538374c313220305a222066696c6c3d22776869746522202f3e3c67207374796c653d227472616e73666f726d3a7472616e736c6174652832323670782c20333932707829223e3c726563742077696474683d223336707822206865696768743d2233367078222072783d22387078222072793d22387078222066696c6c3d226e6f6e6522207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c74657874506174682073746172744f66667365743d22353025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e4d6178205469636b3a203c2f747370616e3e3c616e696d6174655472616e73666f726d206174747269627574654e616d653d227472616e73666f726d2220747970653d22726f74617465222066726f6d3d22302031382031382220746f3d2233363020313820313822206475723d223130732220726570656174436f756e743d22696e646566696e697465222f3e3c2f673e3c2f673e3c706174682069643d22746578742d706174682d612220643d224d34302031322048323530204132382032382030203020312032373820343020563436302041323820323820302030203120323530203438382048343020413238203238203020302031203132203436302056343020413238203238203020302031203430203132207a22202f3e222f3e3c6665496d61676520726573756c743d2270312220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c6d61736b2069643d22666164652d73796d626f6c22206d61736b436f6e74656e74556e6974733d227573657253706163654f6e557365223e3c726563742077696474683d22323930707822206865696768743d223230307078222066696c6c3d2275726c2823677261642d73796d626f6c2922202f3e3c2f6d61736b3e3c2f646566733e3c7265637420783d22302220793d2230222077696474683d2232393022206865696768743d22353030222072783d223432222072793d223432222066696c6c3d227267626128302c302c302c302922207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c2f673e3c66696c7465722069643d22746f702d726567696f6e2d626c7572223e3c6665476175737369616e426c757220696e3d22536f75726365477261706869632220737464446576696174696f6e3d22323422202f3e3c2f66696c7465723e3c2f74657874506174683e203c74657874506174682073746172744f66667365743d223025222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782220786c696e6b3a687265663d2223746578742d706174682d61223e3c7465787420746578742d72656e646572696e673d226f7074696d697a655370656564223e5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f773c7265637420783d2231362220793d223136222077696474683d2232353822206865696768743d22343638222072783d223236222072793d223236222066696c6c3d227267626128302c302c302c302922207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c7465787420783d22313270782220793d22313770782220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d2231327078222066696c6c3d227768697465223e3c747370616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629223e49443a203c2f747370616e3e3c726563742077696474683d223336707822206865696768743d2233367078222072783d22387078222072793d22387078222066696c6c3d226e6f6e6522207374726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e3c2f746578743e3c7465787420793d2231313570782220783d2233327078222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e742d73697a653d2233367078223e3c2f746578743e3c2f673e3c67207374796c653d227472616e73666f726d3a7472616e736c6174652832323670782c20343333707829223e203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20343134707829223ea164736f6c6343000706000a'; } } diff --git a/src/briefcase/deployers/v3-periphery/NonfungiblePositionManagerDeployer.sol b/src/briefcase/deployers/v3-periphery/NonfungiblePositionManagerDeployer.sol index 20da166a..bf957203 100644 --- a/src/briefcase/deployers/v3-periphery/NonfungiblePositionManagerDeployer.sol +++ b/src/briefcase/deployers/v3-periphery/NonfungiblePositionManagerDeployer.sol @@ -25,6 +25,7 @@ library NonfungiblePositionManagerDeployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'610120604052600d80546001600160b01b0319166001176001600160b01b0316600160b01b1790553480156200003457600080fd5b50604051620062e9380380620062e98339810160408190526200005791620002db565b82826040518060400160405280601b81526020017f556e697377617020563320506f736974696f6e73204e46542d563100000000008152506040518060400160405280600a815260200169554e492d56332d504f5360b01b815250604051806040016040528060018152602001603160f81b8152508282620000e66301ffc9a760e01b6200018d60201b60201c565b8151620000fb90600690602085019062000212565b5080516200011190600790602084019062000212565b50620001246380ac58cd60e01b6200018d565b62000136635b5e139f60e01b6200018d565b6200014863780e9d6360e01b6200018d565b50508251602093840120608052805192019190912060a052506001600160601b0319606092831b811660c05290821b811660e05291901b166101005250620003249050565b6001600160e01b03198082161415620001ed576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200024a576000855562000295565b82601f106200026557805160ff191683800117855562000295565b8280016001018555821562000295579182015b828111156200029557825182559160200191906001019062000278565b50620002a3929150620002a7565b5090565b5b80821115620002a35760008155600101620002a8565b80516001600160a01b0381168114620002d657600080fd5b919050565b600080600060608486031215620002f0578283fd5b620002fb84620002be565b92506200030b60208501620002be565b91506200031b60408501620002be565b90509250925092565b60805160a05160c05160601c60e05160601c6101005160601c615f40620003a960003980612a835250806102995280611718528061180e52806118965280613e5d5280613ea35280613f17525080610aa75280610dde5280610ea55280612a1d5280612b235280612e4452806136e15250806114ff5250806114de5250615f406000f3fe6080604052600436106102895760003560e01c80636352211e11610153578063ac9650d8116100cb578063d34879971161007f578063e985e9c511610064578063e985e9c5146106f5578063f3995c6714610715578063fc6f7865146107285761030d565b8063d3487997146106c2578063df2ab5bb146106e25761030d565b8063c2e3140a116100b0578063c2e3140a1461067a578063c45a01551461068d578063c87b56dd146106a25761030d565b8063ac9650d81461063a578063b88d4fde1461065a5761030d565b8063883164561161012257806399fbab881161010757806399fbab88146105cf578063a22cb46514610607578063a4a78f0c146106275761030d565b8063883164561461059757806395d89b41146105ba5761030d565b80636352211e1461052f5780636c0360eb1461054f57806370a08231146105645780637ac2ff7b146105845761030d565b806323b872dd1161020157806342966c68116101b557806349404b7c1161019a57806349404b7c146104e75780634aa4a4fc146104fa5780634f6ccce71461050f5761030d565b806342966c68146104c15780634659a494146104d45761030d565b806330adf81f116101e657806330adf81f146104775780633644e5151461048c57806342842e0e146104a15761030d565b806323b872dd146104375780632f745c59146104575761030d565b80630c49ccbe1161025857806313ead5621161023d57806313ead562146103e057806318160ddd146103f3578063219f5d17146104155761030d565b80630c49ccbe146103b757806312210e8a146103d85761030d565b806301ffc9a71461031257806306fdde0314610348578063081812fc1461036a578063095ea7b3146103975761030d565b3661030d57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461030b576040805162461bcd60e51b815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561031e57600080fd5b5061033261032d3660046153a6565b61073b565b60405161033f919061591e565b60405180910390f35b34801561035457600080fd5b5061035d610776565b60405161033f9190615971565b34801561037657600080fd5b5061038a6103853660046156b8565b61080c565b60405161033f91906157e2565b3480156103a357600080fd5b5061030b6103b2366004615270565b610868565b6103ca6103c5366004615483565b61093e565b60405161033f929190615b42565b61030b610daa565b61038a6103ee366004615103565b610dbc565b3480156103ff57600080fd5b506104086110c9565b60405161033f9190615929565b610428610423366004615494565b6110da565b60405161033f93929190615afd565b34801561044357600080fd5b5061030b61045236600461515c565b611413565b34801561046357600080fd5b50610408610472366004615270565b61146a565b34801561048357600080fd5b50610408611495565b34801561049857600080fd5b506104086114b9565b3480156104ad57600080fd5b5061030b6104bc36600461515c565b611577565b61030b6104cf3660046156b8565b611592565b61030b6104e23660046152dc565b611661565b61030b6104f53660046156d0565b611714565b34801561050657600080fd5b5061038a611894565b34801561051b57600080fd5b5061040861052a3660046156b8565b6118b8565b34801561053b57600080fd5b5061038a61054a3660046156b8565b6118ce565b34801561055b57600080fd5b5061035d6118f6565b34801561057057600080fd5b5061040861057f3660046150af565b6118fb565b61030b6105923660046152dc565b611963565b6105aa6105a5366004615550565b611e0f565b60405161033f9493929190615b1e565b3480156105c657600080fd5b5061035d612370565b3480156105db57600080fd5b506105ef6105ea3660046156b8565b6123d1565b60405161033f9c9b9a99989796959493929190615b50565b34801561061357600080fd5b5061030b610622366004615243565b612600565b61030b6106353660046152dc565b612723565b61064d610648366004615337565b6127d5565b60405161033f91906158a0565b34801561066657600080fd5b5061030b61067536600461519c565b612915565b61030b6106883660046152dc565b612973565b34801561069957600080fd5b5061038a612a1b565b3480156106ae57600080fd5b5061035d6106bd3660046156b8565b612a3f565b3480156106ce57600080fd5b5061030b6106dd366004615717565b612b0e565b61030b6106f036600461529b565b612b8c565b34801561070157600080fd5b506103326107103660046150cb565b612c6f565b61030b6107233660046152dc565b612c9d565b6103ca61073636600461546c565b612d28565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108025780601f106107d757610100808354040283529160200191610802565b820191906000526020600020905b8154815290600101906020018083116107e557829003601f168201915b5050505050905090565b600061081782613246565b61083c5760405162461bcd60e51b8152600401610833906159bb565b60405180910390fd5b506000908152600c60205260409020546c0100000000000000000000000090046001600160a01b031690565b6000610873826118ce565b9050806001600160a01b0316836001600160a01b031614156108c65760405162461bcd60e51b8152600401808060200182810382526021815260200180615ee26021913960400191505060405180910390fd5b806001600160a01b03166108d8613253565b6001600160a01b031614806108f457506108f481610710613253565b61092f5760405162461bcd60e51b8152600401808060200182810382526038815260200180615e0c6038913960400191505060405180910390fd5b6109398383613257565b505050565b600080823561094d33826132db565b6109695760405162461bcd60e51b815260040161083390615984565b836080013580610977613377565b11156109ca576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b60006109dc6040870160208801615562565b6001600160801b0316116109ef57600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b031691610a2a918901908901615562565b6001600160801b0316816001600160801b03161015610a4857600080fd5b60018281015469ffffffffffffffffffff166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610acc7f00000000000000000000000000000000000000000000000000000000000000008361337b565b60018501549091506001600160a01b0382169063a34123a7906a01000000000000000000008104600290810b91600160681b9004900b610b1260408e0160208f01615562565b6040518463ffffffff1660e01b8152600401610b309392919061594b565b6040805180830381600087803b158015610b4957600080fd5b505af1158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906156f4565b909850965060408901358810801590610b9e575088606001358710155b610bba5760405162461bcd60e51b815260040161083390615a18565b6001840154600090610bea9030906a01000000000000000000008104600290810b91600160681b9004900b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610c1b9190615929565b60a06040518083038186803b158015610c3357600080fd5b505afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b91906155ac565b50509250925050610c9087600201548303876001600160801b0316600160801b6134d1565b6004880180546fffffffffffffffffffffffffffffffff198116928e016001600160801b039182160181169290921790556003880154610cda91908303908816600160801b6134d1565b6004880180546001600160801b03808216938e01600160801b9283900482160116029190911790556002870182905560038701819055610d2060408d0160208e01615562565b86038760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d6020016020810190610d839190615562565b8d8d604051610d9493929190615afd565b60405180910390a2505050505050505050915091565b4715610dba57610dba3347613580565b565b6000836001600160a01b0316856001600160a01b031610610ddc57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff168152602001935050505060206040518083038186803b158015610e6757600080fd5b505afa158015610e7b573d6000803e3d6000fd5b505050506040513d6020811015610e9157600080fd5b505190506001600160a01b038116610fe0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a16712958686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff1681526020019350505050602060405180830381600087803b158015610f3057600080fd5b505af1158015610f44573d6000803e3d6000fd5b505050506040513d6020811015610f5a57600080fd5b5051604080517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b158015610fc357600080fd5b505af1158015610fd7573d6000803e3d6000fd5b505050506110c1565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050506040513d60e081101561104557600080fd5b505190506001600160a01b0381166110bf57816001600160a01b031663f637731d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156110a657600080fd5b505af11580156110ba573d6000803e3d6000fd5b505050505b505b949350505050565b60006110d56002613689565b905090565b60008060008360a00135806110ed613377565b1115611140576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b84356000908152600c6020908152604080832060018082015469ffffffffffffffffffff81168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b810b608080850191909152600160681b909404810b900b60a0830152958c013560c0820152938b013560e0850152908a0135610100840152890135610120830152929061122c90613694565b6001870154939a50919850965091506000906112669030906a01000000000000000000008104600290810b91600160681b9004900b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016112979190615929565b60a06040518083038186803b1580156112af57600080fd5b505afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e791906155ac565b50509250925050611323866002015483038760010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b6004870180546001600160801b0380821690930183166fffffffffffffffffffffffffffffffff19909116179055600387015460018801546113739291840391600160801b9182900416906134d1565b6004870180546001600160801b03600160801b80830482169094018116840291811691909117909155600288018490556003880183905560018801805483810483168e018316909302929091169190911790556040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f906113fd908d908d908d90615afd565b60405180910390a2505050505050509193909250565b61142461141e613253565b826132db565b61145f5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f036031913960400191505060405180910390fd5b6109398383836138cf565b6001600160a01b038216600090815260016020526040812061148c9083613a1b565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611526613a27565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b61093983838360405180602001604052806000815250612915565b8061159d33826132db565b6115b95760405162461bcd60e51b815260040161083390615984565b6000828152600c602052604090206001810154600160801b90046001600160801b03161580156115f4575060048101546001600160801b0316155b801561161257506004810154600160801b90046001600160801b0316155b61162e5760405162461bcd60e51b815260040161083390615a86565b6000838152600c602052604081208181556001810182905560028101829055600381018290556004015561093983613a2b565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b1580156116f457600080fd5b505af1158015611708573d6000803e3d6000fd5b50505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561178357600080fd5b505afa158015611797573d6000803e3d6000fd5b505050506040513d60208110156117ad57600080fd5b5051905082811015611806576040805162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610939577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561187257600080fd5b505af1158015611886573d6000803e3d6000fd5b505050506109398282613580565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806118c6600284613af8565b509392505050565b600061148f82604051806060016040528060298152602001615e6e6029913960029190613b16565b606090565b60006001600160a01b0382166119425760405162461bcd60e51b815260040180806020018281038252602a815260200180615e44602a913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902061148f90613689565b8361196c613377565b11156119bf576040805162461bcd60e51b815260206004820152600e60248201527f5065726d69742065787069726564000000000000000000000000000000000000604482015290519081900360640190fd5b60006119c96114b9565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad88886119f581613b23565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018a90528151808403909101815260c0830182528051908401207f190100000000000000000000000000000000000000000000000000000000000060e084015260e283019490945261010280830194909452805180830390940184526101229091019052815191012090506000611a98876118ce565b9050806001600160a01b0316886001600160a01b03161415611aeb5760405162461bcd60e51b8152600401808060200182810382526027815260200180615d6f6027913960400191505060405180910390fd5b611af481613b62565b15611ccf576040805160208082018790528183018690527fff0000000000000000000000000000000000000000000000000000000000000060f889901b16606083015282516041818403018152606183018085527f1626ba7e0000000000000000000000000000000000000000000000000000000090526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611bbe578181015183820152602001611ba6565b50505050905090810190601f168015611beb5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611c0957600080fd5b505afa158015611c1d573d6000803e3d6000fd5b505050506040513d6020811015611c3357600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e0000000000000000000000000000000000000000000000000000000014611cca576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b611dfb565b600060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d2b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611d93576040805162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b816001600160a01b0316816001600160a01b031614611df9576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b505b611e058888613257565b5050505050505050565b60008060008084610140013580611e24613377565b1115611e77576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b604080516101408101909152600090611f439080611e9860208b018b6150af565b6001600160a01b03168152602001896020016020810190611eb991906150af565b6001600160a01b03168152602001611ed760608b0160408c0161569e565b62ffffff168152306020820152604001611ef760808b0160608c016153e6565b60020b8152602001611f0f60a08b0160808c016153e6565b60020b81526020018960a0013581526020018960c0013581526020018960e001358152602001896101000135815250613694565b92975090955093509050611fb7611f6261014089016101208a016150af565b600d80547fffffffffffffffffffff000000000000000000000000000000000000000000008116600175ffffffffffffffffffffffffffffffffffffffffffff92831690810190921617909155975087613b68565b6000611fe230611fcd60808b0160608c016153e6565b611fdd60a08c0160808d016153e6565b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016120139190615929565b60a06040518083038186803b15801561202b57600080fd5b505afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906155ac565b5050925092505060006120dc8560405180606001604052808e600001602081019061208e91906150af565b6001600160a01b031681526020018e60200160208101906120af91906150af565b6001600160a01b031681526020018e60400160208101906120d0919061569e565b62ffffff169052613c96565b905060405180610140016040528060006bffffffffffffffffffffffff16815260200160006001600160a01b031681526020018269ffffffffffffffffffff1681526020018c606001602081019061213491906153e6565b60020b815260200161214c60a08e0160808f016153e6565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a60405161235b93929190615afd565b60405180910390a25050505050509193509193565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108025780601f106107d757610100808354040283529160200191610802565b6000818152600c6020908152604080832081516101408101835281546bffffffffffffffffffffffff811682526001600160a01b036c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e0860152600490920154808316610100860152041661012083015282918291829182918291829182918291829182918291906124da5760405162461bcd60e51b815260040161083390615a4f565b6000600b6000836040015169ffffffffffffffffffff1669ffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b612608613253565b6001600160a01b0316826001600160a01b0316141561266e576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b806005600061267b613253565b6001600160a01b0390811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016921515929092179091556126dd613253565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b15801561278d57600080fd5b505afa1580156127a1573d6000803e3d6000fd5b505050506040513d60208110156127b757600080fd5b505110156127cd576127cd868686868686611661565b505050505050565b60608167ffffffffffffffff811180156127ee57600080fd5b5060405190808252806020026020018201604052801561282257816020015b606081526020019060019003908161280d5790505b50905060005b8281101561290e576000803086868581811061284057fe5b90506020028101906128529190615bef565b6040516128609291906157d2565b600060405180830381855af49150503d806000811461289b576040519150601f19603f3d011682016040523d82523d6000602084013e6128a0565b606091505b5091509150816128ec576044815110156128b957600080fd5b600481019050808060200190518101906128d39190615402565b60405162461bcd60e51b81526004016108339190615971565b808484815181106128f957fe5b60209081029190910101525050600101612828565b5092915050565b612926612920613253565b836132db565b6129615760405162461bcd60e51b8152600401808060200182810382526031815260200180615f036031913960400191505060405180910390fd5b61296d84848484613de6565b50505050565b604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156129db57600080fd5b505afa1580156129ef573d6000803e3d6000fd5b505050506040513d6020811015612a0557600080fd5b505110156127cd576127cd868686868686612c9d565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060612a4a82613246565b612a5357600080fd5b6040517fe9dc63750000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9dc637590612aba9030908690600401615932565b60006040518083038186803b158015612ad257600080fd5b505afa158015612ae6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261148f9190810190615402565b6000612b1c828401846154a5565b9050612b4c7f00000000000000000000000000000000000000000000000000000000000000008260000151613e38565b508415612b67578051516020820151612b6791903388613e5b565b8315612b8557612b8581600001516020015182602001513387613e5b565b5050505050565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612bdb57600080fd5b505afa158015612bef573d6000803e3d6000fd5b505050506040513d6020811015612c0557600080fd5b5051905082811015612c5e576040805162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561296d5761296d848383613feb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b1580156116f457600080fd5b6000808235612d3733826132db565b612d535760405162461bcd60e51b815260040161083390615984565b6000612d656060860160408701615562565b6001600160801b03161180612d9257506000612d876080860160608701615562565b6001600160801b0316115b612d9b57600080fd5b600080612dae60408701602088016150af565b6001600160a01b031614612dd157612dcc60408601602087016150af565b612dd3565b305b85356000908152600c6020908152604080832060018082015469ffffffffffffffffffff168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff169183019190915292935090612e697f00000000000000000000000000000000000000000000000000000000000000008361337b565b600484015460018501549192506001600160801b0380821692600160801b92839004821692900416156130865760018501546040517fa34123a70000000000000000000000000000000000000000000000000000000081526001600160a01b0385169163a34123a791612f00916a01000000000000000000008104600290810b92600160681b909204900b9060009060040161594b565b6040805180830381600087803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5191906156f4565b5050600185015460009081906001600160a01b0386169063514ea4bf90612f969030906a01000000000000000000008104600290810b91600160681b9004900b613477565b6040518263ffffffff1660e01b8152600401612fb29190615929565b60a06040518083038186803b158015612fca57600080fd5b505afa158015612fde573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300291906155ac565b5050925092505061303e876002015483038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b84019350613077876003015482038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b60028801929092556003870155015b6000806001600160801b0384166130a360608e0160408f01615562565b6001600160801b0316116130c6576130c160608d0160408e01615562565b6130c8565b835b836001600160801b03168d60600160208101906130e59190615562565b6001600160801b0316116131085761310360808e0160608f01615562565b61310a565b835b60018901546040517f4f1eb3d80000000000000000000000000000000000000000000000000000000081529294509092506001600160a01b03871691634f1eb3d89161317d918c916a01000000000000000000008104600290810b92600160681b909204900b9088908890600401615839565b6040805180830381600087803b15801561319657600080fd5b505af11580156131aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ce919061557e565b6004890180546fffffffffffffffffffffffffffffffff196001600160801b03918216600160801b878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190610d94908b9086908690615876565b600061148f60028361417b565b3390565b6000818152600c6020526040902080546bffffffffffffffffffffffff166c010000000000000000000000006001600160a01b0385169081029190911790915581906132a2826118ce565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006132e682613246565b6133215760405162461bcd60e51b815260040180806020018281038252602c815260200180615de0602c913960400191505060405180910390fd5b600061332c836118ce565b9050806001600160a01b0316846001600160a01b031614806133675750836001600160a01b031661335c8461080c565b6001600160a01b0316145b806110c157506110c18185612c6f565b4290565b600081602001516001600160a01b031682600001516001600160a01b0316106133a357600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516bffffffffffffffffffffffff19606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b600080806000198587098686029250828110908390030390508061350757600084116134fc57600080fd5b5082900490506134ca565b80841161351357600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106135cc5780518252601f1990920191602091820191016135ad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461362e576040519150601f19603f3d011682016040523d82523d6000602084013e613633565b606091505b5050905080610939576040805162461bcd60e51b815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061148f82614187565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff1681525090506137067f00000000000000000000000000000000000000000000000000000000000000008261337b565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561374357600080fd5b505afa158015613757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377b919061560d565b50505050505090506000613792886080015161418b565b905060006137a38960a0015161418b565b90506137ba8383838c60c001518d60e001516144d9565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b031681525060405160200161380c9190615abd565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161383b9594939291906157f6565b6040805180830381600087803b15801561385457600080fd5b505af1158015613868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388c91906156f4565b610100880151919550935084108015906138ab57508561012001518310155b6138c75760405162461bcd60e51b815260040161083390615a18565b509193509193565b826001600160a01b03166138e2826118ce565b6001600160a01b0316146139275760405162461bcd60e51b8152600401808060200182810382526029815260200180615eb96029913960400191505060405180910390fd5b6001600160a01b03821661396c5760405162461bcd60e51b8152600401808060200182810382526024815260200180615d966024913960400191505060405180910390fd5b613977838383610939565b613982600082613257565b6001600160a01b03831660009081526001602052604090206139a4908261459d565b506001600160a01b03821660009081526001602052604090206139c790826145a9565b506139d4600282846145b5565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061148c83836145cb565b4690565b6000613a36826118ce565b9050613a4481600084610939565b613a4f600083613257565b6000828152600860205260409020546002600019610100600184161502019091160415613a8d576000828152600860205260408120613a8d9161501f565b6001600160a01b0381166000908152600160205260409020613aaf908361459d565b50613abb60028361462f565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000808080613b07868661463b565b909450925050505b9250929050565b60006110c18484846146b6565b6000908152600c6020526040902080546bffffffffffffffffffffffff19811660016bffffffffffffffffffffffff9283169081019092161790915590565b3b151590565b6001600160a01b038216613bc3576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613bcc81613246565b15613c1e576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613c2a60008383610939565b6001600160a01b0382166000908152600160205260409020613c4c90826145a9565b50613c59600282846145b5565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166000908152600a602052604090205469ffffffffffffffffffff168061148f5750600d8054600169ffffffffffffffffffff76010000000000000000000000000000000000000000000080840482168381019092160275ffffffffffffffffffffffffffffffffffffffffffff909316929092179092556001600160a01b038085166000908152600a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001686179055848352600b825291829020865181549085167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617825591870151950180549287015162ffffff16600160a01b027fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff969094169290911691909117939093161790915592915050565b613df18484846138cf565b613dfd84848484614780565b61296d5760405162461bcd60e51b8152600401808060200182810382526032815260200180615d3d6032913960400191505060405180910390fd5b6000613e44838361337b565b9050336001600160a01b0382161461148f57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015613e9c5750804710155b15613fbe577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613efc57600080fd5b505af1158015613f10573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613f8c57600080fd5b505af1158015613fa0573d6000803e3d6000fd5b505050506040513d6020811015613fb657600080fd5b5061296d9050565b6001600160a01b038316301415613fdf57613fda848383613feb565b61296d565b61296d8484848461495c565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b602083106140955780518252601f199092019160209182019101614076565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146140f7576040519150601f19603f3d011682016040523d82523d6000602084013e6140fc565b606091505b509150915081801561412a57508051158061412a575080806020019051602081101561412757600080fd5b50515b612b85576040805162461bcd60e51b815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061148c8383614af4565b5490565b60008060008360020b126141a2578260020b6141aa565b8260020b6000035b9050620d89e8811115614204576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661421857600160801b61422a565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561425e576ffff97272373d413259a46990580e213a0260801c5b600482161561427d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561429c576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156142bb576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156142da576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156142f9576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615614318576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615614338576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614358576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614378576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614398576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156143b8576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156143d8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156143f8576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615614418576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614439576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614459576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614478576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614495576b048a170391f7dc42444e8fa20260801c5b60008460020b13156144b05780600019816144ac57fe5b0490505b6401000000008106156144c45760016144c7565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b031611156144f9579293925b846001600160a01b0316866001600160a01b0316116145245761451d858585614b0c565b9050614594565b836001600160a01b0316866001600160a01b0316101561458657600061454b878686614b0c565b9050600061455a878986614b78565b9050806001600160801b0316826001600160801b03161061457b578061457d565b815b92505050614594565b614591858584614b78565b90505b95945050505050565b600061148c8383614bbe565b600061148c8383614c84565b60006110c184846001600160a01b038516614cce565b8154600090821061460d5760405162461bcd60e51b8152600401808060200182810382526022815260200180615d1b6022913960400191505060405180910390fd5b82600001828154811061461c57fe5b9060005260206000200154905092915050565b600061148c8383614d65565b81546000908190831061467f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615e976022913960400191505060405180910390fd5b600084600001848154811061469057fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816147515760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156147165781810151838201526020016146fe565b50505050905090810190601f1680156147435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061476457fe5b9060005260206000209060020201600101549150509392505050565b6000614794846001600160a01b0316613b62565b6147a0575060016110c1565b60006148f17f150b7a02000000000000000000000000000000000000000000000000000000006147ce613253565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561483557818101518382015260200161481d565b50505050905090810190601f1680156148625780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001615d3d603291396001600160a01b0388169190614e39565b9050600081806020019051602081101561490a57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310614a0e5780518252601f1990920191602091820191016149ef565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614a70576040519150601f19603f3d011682016040523d82523d6000602084013e614a75565b606091505b5091509150818015614aa3575080511580614aa35750808060200190516020811015614aa057600080fd5b50515b6127cd576040805162461bcd60e51b815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b03161115614b2c579192915b6000614b58856001600160a01b0316856001600160a01b03166c010000000000000000000000006134d1565b9050614594614b7384838888036001600160a01b03166134d1565b614e48565b6000826001600160a01b0316846001600160a01b03161115614b98579192915b6110c1614b73836c010000000000000000000000008787036001600160a01b03166134d1565b60008181526001830160205260408120548015614c7a5783546000198083019190810190600090879083908110614bf157fe5b9060005260206000200154905080876000018481548110614c0e57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614c3e57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061148f565b600091505061148f565b6000614c908383614af4565b614cc65750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561148f565b50600061148f565b600082815260018401602052604081205480614d335750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556134ca565b82856000016001830381548110614d4657fe5b90600052602060002090600202016001018190555060009150506134ca565b60008181526001830160205260408120548015614c7a5783546000198083019190810190600090879083908110614d9857fe5b9060005260206000209060020201905080876000018481548110614db857fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080614df757fe5b600082815260208082206002600019909401938402018281556001908101839055929093558881528982019092526040822091909155945061148f9350505050565b60606110c18484600085614e5e565b806001600160801b038116811461077157600080fd5b606082471015614e9f5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dba6026913960400191505060405180910390fd5b614ea885613b62565b614ef9576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614f375780518252601f199092019160209182019101614f18565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614f99576040519150601f19603f3d011682016040523d82523d6000602084013e614f9e565b606091505b5091509150614fae828286614fb9565b979650505050505050565b60608315614fc85750816134ca565b825115614fd85782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156147165781810151838201526020016146fe565b50805460018160011615610100020316600290046000825580601f106150455750615063565b601f0160209004906000526020600020908101906150639190615066565b50565b5b8082111561507b5760008155600101615067565b5090565b803561077181615cc4565b805161ffff8116811461077157600080fd5b803562ffffff8116811461077157600080fd5b6000602082840312156150c0578081fd5b81356134ca81615cc4565b600080604083850312156150dd578081fd5b82356150e881615cc4565b915060208301356150f881615cc4565b809150509250929050565b60008060008060808587031215615118578182fd5b843561512381615cc4565b9350602085013561513381615cc4565b92506151416040860161509c565b9150606085013561515181615cc4565b939692955090935050565b600080600060608486031215615170578081fd5b833561517b81615cc4565b9250602084013561518b81615cc4565b929592945050506040919091013590565b600080600080608085870312156151b1578182fd5b84356151bc81615cc4565b935060208501356151cc81615cc4565b925060408501359150606085013567ffffffffffffffff8111156151ee578182fd5b8501601f810187136151fe578182fd5b803561521161520c82615c76565b615c52565b818152886020838501011115615225578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215615255578182fd5b823561526081615cc4565b915060208301356150f881615cd9565b60008060408385031215615282578182fd5b823561528d81615cc4565b946020939093013593505050565b6000806000606084860312156152af578081fd5b83356152ba81615cc4565b92506020840135915060408401356152d181615cc4565b809150509250925092565b60008060008060008060c087890312156152f4578384fd5b86356152ff81615cc4565b95506020870135945060408701359350606087013561531d81615d0b565b9598949750929560808101359460a0909101359350915050565b60008060208385031215615349578182fd5b823567ffffffffffffffff80821115615360578384fd5b818501915085601f830112615373578384fd5b813581811115615381578485fd5b8660208083028501011115615394578485fd5b60209290920196919550909350505050565b6000602082840312156153b7578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146134ca578182fd5b6000602082840312156153f7578081fd5b81356134ca81615ce7565b600060208284031215615413578081fd5b815167ffffffffffffffff811115615429578182fd5b8201601f81018413615439578182fd5b805161544761520c82615c76565b81815285602083850101111561545b578384fd5b614594826020830160208601615c98565b60006080828403121561547d578081fd5b50919050565b600060a0828403121561547d578081fd5b600060c0828403121561547d578081fd5b600081830360808112156154b7578182fd5b6040516040810167ffffffffffffffff82821081831117156154d557fe5b8160405260608412156154e6578485fd5b60a08301935081841081851117156154fa57fe5b50826040528435925061550c83615cc4565b91825260208401359161551e83615cc4565b8260608301526155306040860161509c565b608083015281526155436060850161507f565b6020820152949350505050565b6000610160828403121561547d578081fd5b600060208284031215615573578081fd5b81356134ca81615cf6565b60008060408385031215615590578182fd5b825161559b81615cf6565b60208401519092506150f881615cf6565b600080600080600060a086880312156155c3578283fd5b85516155ce81615cf6565b80955050602086015193506040860151925060608601516155ee81615cf6565b60808701519092506155ff81615cf6565b809150509295509295909350565b600080600080600080600060e0888a031215615627578485fd5b875161563281615cc4565b602089015190975061564381615ce7565b95506156516040890161508a565b945061565f6060890161508a565b935061566d6080890161508a565b925060a088015161567d81615d0b565b60c089015190925061568e81615cd9565b8091505092959891949750929550565b6000602082840312156156af578081fd5b61148c8261509c565b6000602082840312156156c9578081fd5b5035919050565b600080604083850312156156e2578182fd5b8235915060208301356150f881615cc4565b60008060408385031215615706578182fd5b505080516020909101519092909150565b6000806000806060858703121561572c578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115615751578384fd5b818701915087601f830112615764578384fd5b813581811115615772578485fd5b886020828501011115615783578485fd5b95989497505060200194505050565b600081518084526157aa816020860160208601615c98565b601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b60006001600160a01b03871682528560020b60208301528460020b60408301526001600160801b038416606083015260a06080830152614fae60a0830184615792565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615911577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526158ff858351615792565b945092850192908501906001016158c5565b5092979650505050505050565b901515815260200190565b90815260200190565b6001600160a01b03929092168252602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60006020825261148c6020830184615792565b6020808252600c908201527f4e6f7420617070726f7665640000000000000000000000000000000000000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f507269636520736c69707061676520636865636b000000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420746f6b656e20494400000000000000000000000000000000604082015260600190565b6020808252600b908201527f4e6f7420636c6561726564000000000000000000000000000000000000000000604082015260600190565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b9384526001600160801b039290921660208401526040830152606082015260800190565b918252602082015260400190565b6bffffffffffffffffffffffff8d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a08201526101808101615ba760c08301896157be565b615bb460e08301886157c5565b8561010083015284610120830152615bd06101408301856157c5565b615bde6101608301846157c5565b9d9c50505050505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c23578283fd5b83018035915067ffffffffffffffff821115615c3d578283fd5b602001915036819003821315613b0f57600080fd5b60405181810167ffffffffffffffff81118282101715615c6e57fe5b604052919050565b600067ffffffffffffffff821115615c8a57fe5b50601f01601f191660200190565b60005b83811015615cb3578181015183820152602001615c9b565b8381111561296d5750506000910152565b6001600160a01b038116811461506357600080fd5b801515811461506357600080fd5b8060020b811461506357600080fd5b6001600160801b038116811461506357600080fd5b60ff8116811461506357600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315065726d69743a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a164736f6c6343000706000a'; + return + hex'610120604052600d80546001600160b01b0319166001176001600160b01b0316600160b01b1790553480156200003457600080fd5b50604051620062e9380380620062e98339810160408190526200005791620002db565b82826040518060400160405280601b81526020017f556e697377617020563320506f736974696f6e73204e46542d563100000000008152506040518060400160405280600a815260200169554e492d56332d504f5360b01b815250604051806040016040528060018152602001603160f81b8152508282620000e66301ffc9a760e01b6200018d60201b60201c565b8151620000fb90600690602085019062000212565b5080516200011190600790602084019062000212565b50620001246380ac58cd60e01b6200018d565b62000136635b5e139f60e01b6200018d565b6200014863780e9d6360e01b6200018d565b50508251602093840120608052805192019190912060a052506001600160601b0319606092831b811660c05290821b811660e05291901b166101005250620003249050565b6001600160e01b03198082161415620001ed576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200024a576000855562000295565b82601f106200026557805160ff191683800117855562000295565b8280016001018555821562000295579182015b828111156200029557825182559160200191906001019062000278565b50620002a3929150620002a7565b5090565b5b80821115620002a35760008155600101620002a8565b80516001600160a01b0381168114620002d657600080fd5b919050565b600080600060608486031215620002f0578283fd5b620002fb84620002be565b92506200030b60208501620002be565b91506200031b60408501620002be565b90509250925092565b60805160a05160c05160601c60e05160601c6101005160601c615f40620003a960003980612a835250806102995280611718528061180e52806118965280613e5d5280613ea35280613f17525080610aa75280610dde5280610ea55280612a1d5280612b235280612e4452806136e15250806114ff5250806114de5250615f406000f3fe6080604052600436106102895760003560e01c80636352211e11610153578063ac9650d8116100cb578063d34879971161007f578063e985e9c511610064578063e985e9c5146106f5578063f3995c6714610715578063fc6f7865146107285761030d565b8063d3487997146106c2578063df2ab5bb146106e25761030d565b8063c2e3140a116100b0578063c2e3140a1461067a578063c45a01551461068d578063c87b56dd146106a25761030d565b8063ac9650d81461063a578063b88d4fde1461065a5761030d565b8063883164561161012257806399fbab881161010757806399fbab88146105cf578063a22cb46514610607578063a4a78f0c146106275761030d565b8063883164561461059757806395d89b41146105ba5761030d565b80636352211e1461052f5780636c0360eb1461054f57806370a08231146105645780637ac2ff7b146105845761030d565b806323b872dd1161020157806342966c68116101b557806349404b7c1161019a57806349404b7c146104e75780634aa4a4fc146104fa5780634f6ccce71461050f5761030d565b806342966c68146104c15780634659a494146104d45761030d565b806330adf81f116101e657806330adf81f146104775780633644e5151461048c57806342842e0e146104a15761030d565b806323b872dd146104375780632f745c59146104575761030d565b80630c49ccbe1161025857806313ead5621161023d57806313ead562146103e057806318160ddd146103f3578063219f5d17146104155761030d565b80630c49ccbe146103b757806312210e8a146103d85761030d565b806301ffc9a71461031257806306fdde0314610348578063081812fc1461036a578063095ea7b3146103975761030d565b3661030d57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461030b576040805162461bcd60e51b815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561031e57600080fd5b5061033261032d3660046153a6565b61073b565b60405161033f919061591e565b60405180910390f35b34801561035457600080fd5b5061035d610776565b60405161033f9190615971565b34801561037657600080fd5b5061038a6103853660046156b8565b61080c565b60405161033f91906157e2565b3480156103a357600080fd5b5061030b6103b2366004615270565b610868565b6103ca6103c5366004615483565b61093e565b60405161033f929190615b42565b61030b610daa565b61038a6103ee366004615103565b610dbc565b3480156103ff57600080fd5b506104086110c9565b60405161033f9190615929565b610428610423366004615494565b6110da565b60405161033f93929190615afd565b34801561044357600080fd5b5061030b61045236600461515c565b611413565b34801561046357600080fd5b50610408610472366004615270565b61146a565b34801561048357600080fd5b50610408611495565b34801561049857600080fd5b506104086114b9565b3480156104ad57600080fd5b5061030b6104bc36600461515c565b611577565b61030b6104cf3660046156b8565b611592565b61030b6104e23660046152dc565b611661565b61030b6104f53660046156d0565b611714565b34801561050657600080fd5b5061038a611894565b34801561051b57600080fd5b5061040861052a3660046156b8565b6118b8565b34801561053b57600080fd5b5061038a61054a3660046156b8565b6118ce565b34801561055b57600080fd5b5061035d6118f6565b34801561057057600080fd5b5061040861057f3660046150af565b6118fb565b61030b6105923660046152dc565b611963565b6105aa6105a5366004615550565b611e0f565b60405161033f9493929190615b1e565b3480156105c657600080fd5b5061035d612370565b3480156105db57600080fd5b506105ef6105ea3660046156b8565b6123d1565b60405161033f9c9b9a99989796959493929190615b50565b34801561061357600080fd5b5061030b610622366004615243565b612600565b61030b6106353660046152dc565b612723565b61064d610648366004615337565b6127d5565b60405161033f91906158a0565b34801561066657600080fd5b5061030b61067536600461519c565b612915565b61030b6106883660046152dc565b612973565b34801561069957600080fd5b5061038a612a1b565b3480156106ae57600080fd5b5061035d6106bd3660046156b8565b612a3f565b3480156106ce57600080fd5b5061030b6106dd366004615717565b612b0e565b61030b6106f036600461529b565b612b8c565b34801561070157600080fd5b506103326107103660046150cb565b612c6f565b61030b6107233660046152dc565b612c9d565b6103ca61073636600461546c565b612d28565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108025780601f106107d757610100808354040283529160200191610802565b820191906000526020600020905b8154815290600101906020018083116107e557829003601f168201915b5050505050905090565b600061081782613246565b61083c5760405162461bcd60e51b8152600401610833906159bb565b60405180910390fd5b506000908152600c60205260409020546c0100000000000000000000000090046001600160a01b031690565b6000610873826118ce565b9050806001600160a01b0316836001600160a01b031614156108c65760405162461bcd60e51b8152600401808060200182810382526021815260200180615ee26021913960400191505060405180910390fd5b806001600160a01b03166108d8613253565b6001600160a01b031614806108f457506108f481610710613253565b61092f5760405162461bcd60e51b8152600401808060200182810382526038815260200180615e0c6038913960400191505060405180910390fd5b6109398383613257565b505050565b600080823561094d33826132db565b6109695760405162461bcd60e51b815260040161083390615984565b836080013580610977613377565b11156109ca576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b60006109dc6040870160208801615562565b6001600160801b0316116109ef57600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b031691610a2a918901908901615562565b6001600160801b0316816001600160801b03161015610a4857600080fd5b60018281015469ffffffffffffffffffff166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610acc7f00000000000000000000000000000000000000000000000000000000000000008361337b565b60018501549091506001600160a01b0382169063a34123a7906a01000000000000000000008104600290810b91600160681b9004900b610b1260408e0160208f01615562565b6040518463ffffffff1660e01b8152600401610b309392919061594b565b6040805180830381600087803b158015610b4957600080fd5b505af1158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906156f4565b909850965060408901358810801590610b9e575088606001358710155b610bba5760405162461bcd60e51b815260040161083390615a18565b6001840154600090610bea9030906a01000000000000000000008104600290810b91600160681b9004900b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610c1b9190615929565b60a06040518083038186803b158015610c3357600080fd5b505afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b91906155ac565b50509250925050610c9087600201548303876001600160801b0316600160801b6134d1565b6004880180546fffffffffffffffffffffffffffffffff198116928e016001600160801b039182160181169290921790556003880154610cda91908303908816600160801b6134d1565b6004880180546001600160801b03808216938e01600160801b9283900482160116029190911790556002870182905560038701819055610d2060408d0160208e01615562565b86038760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d6020016020810190610d839190615562565b8d8d604051610d9493929190615afd565b60405180910390a2505050505050505050915091565b4715610dba57610dba3347613580565b565b6000836001600160a01b0316856001600160a01b031610610ddc57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff168152602001935050505060206040518083038186803b158015610e6757600080fd5b505afa158015610e7b573d6000803e3d6000fd5b505050506040513d6020811015610e9157600080fd5b505190506001600160a01b038116610fe0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a16712958686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff1681526020019350505050602060405180830381600087803b158015610f3057600080fd5b505af1158015610f44573d6000803e3d6000fd5b505050506040513d6020811015610f5a57600080fd5b5051604080517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b158015610fc357600080fd5b505af1158015610fd7573d6000803e3d6000fd5b505050506110c1565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050506040513d60e081101561104557600080fd5b505190506001600160a01b0381166110bf57816001600160a01b031663f637731d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156110a657600080fd5b505af11580156110ba573d6000803e3d6000fd5b505050505b505b949350505050565b60006110d56002613689565b905090565b60008060008360a00135806110ed613377565b1115611140576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b84356000908152600c6020908152604080832060018082015469ffffffffffffffffffff81168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b810b608080850191909152600160681b909404810b900b60a0830152958c013560c0820152938b013560e0850152908a0135610100840152890135610120830152929061122c90613694565b6001870154939a50919850965091506000906112669030906a01000000000000000000008104600290810b91600160681b9004900b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016112979190615929565b60a06040518083038186803b1580156112af57600080fd5b505afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e791906155ac565b50509250925050611323866002015483038760010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b6004870180546001600160801b0380821690930183166fffffffffffffffffffffffffffffffff19909116179055600387015460018801546113739291840391600160801b9182900416906134d1565b6004870180546001600160801b03600160801b80830482169094018116840291811691909117909155600288018490556003880183905560018801805483810483168e018316909302929091169190911790556040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f906113fd908d908d908d90615afd565b60405180910390a2505050505050509193909250565b61142461141e613253565b826132db565b61145f5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f036031913960400191505060405180910390fd5b6109398383836138cf565b6001600160a01b038216600090815260016020526040812061148c9083613a1b565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611526613a27565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b61093983838360405180602001604052806000815250612915565b8061159d33826132db565b6115b95760405162461bcd60e51b815260040161083390615984565b6000828152600c602052604090206001810154600160801b90046001600160801b03161580156115f4575060048101546001600160801b0316155b801561161257506004810154600160801b90046001600160801b0316155b61162e5760405162461bcd60e51b815260040161083390615a86565b6000838152600c602052604081208181556001810182905560028101829055600381018290556004015561093983613a2b565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b1580156116f457600080fd5b505af1158015611708573d6000803e3d6000fd5b50505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561178357600080fd5b505afa158015611797573d6000803e3d6000fd5b505050506040513d60208110156117ad57600080fd5b5051905082811015611806576040805162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610939577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561187257600080fd5b505af1158015611886573d6000803e3d6000fd5b505050506109398282613580565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806118c6600284613af8565b509392505050565b600061148f82604051806060016040528060298152602001615e6e6029913960029190613b16565b606090565b60006001600160a01b0382166119425760405162461bcd60e51b815260040180806020018281038252602a815260200180615e44602a913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902061148f90613689565b8361196c613377565b11156119bf576040805162461bcd60e51b815260206004820152600e60248201527f5065726d69742065787069726564000000000000000000000000000000000000604482015290519081900360640190fd5b60006119c96114b9565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad88886119f581613b23565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018a90528151808403909101815260c0830182528051908401207f190100000000000000000000000000000000000000000000000000000000000060e084015260e283019490945261010280830194909452805180830390940184526101229091019052815191012090506000611a98876118ce565b9050806001600160a01b0316886001600160a01b03161415611aeb5760405162461bcd60e51b8152600401808060200182810382526027815260200180615d6f6027913960400191505060405180910390fd5b611af481613b62565b15611ccf576040805160208082018790528183018690527fff0000000000000000000000000000000000000000000000000000000000000060f889901b16606083015282516041818403018152606183018085527f1626ba7e0000000000000000000000000000000000000000000000000000000090526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611bbe578181015183820152602001611ba6565b50505050905090810190601f168015611beb5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611c0957600080fd5b505afa158015611c1d573d6000803e3d6000fd5b505050506040513d6020811015611c3357600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e0000000000000000000000000000000000000000000000000000000014611cca576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b611dfb565b600060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d2b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611d93576040805162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b816001600160a01b0316816001600160a01b031614611df9576040805162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b505b611e058888613257565b5050505050505050565b60008060008084610140013580611e24613377565b1115611e77576040805162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b604080516101408101909152600090611f439080611e9860208b018b6150af565b6001600160a01b03168152602001896020016020810190611eb991906150af565b6001600160a01b03168152602001611ed760608b0160408c0161569e565b62ffffff168152306020820152604001611ef760808b0160608c016153e6565b60020b8152602001611f0f60a08b0160808c016153e6565b60020b81526020018960a0013581526020018960c0013581526020018960e001358152602001896101000135815250613694565b92975090955093509050611fb7611f6261014089016101208a016150af565b600d80547fffffffffffffffffffff000000000000000000000000000000000000000000008116600175ffffffffffffffffffffffffffffffffffffffffffff92831690810190921617909155975087613b68565b6000611fe230611fcd60808b0160608c016153e6565b611fdd60a08c0160808d016153e6565b613477565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016120139190615929565b60a06040518083038186803b15801561202b57600080fd5b505afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906155ac565b5050925092505060006120dc8560405180606001604052808e600001602081019061208e91906150af565b6001600160a01b031681526020018e60200160208101906120af91906150af565b6001600160a01b031681526020018e60400160208101906120d0919061569e565b62ffffff169052613c96565b905060405180610140016040528060006bffffffffffffffffffffffff16815260200160006001600160a01b031681526020018269ffffffffffffffffffff1681526020018c606001602081019061213491906153e6565b60020b815260200161214c60a08e0160808f016153e6565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a60405161235b93929190615afd565b60405180910390a25050505050509193509193565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108025780601f106107d757610100808354040283529160200191610802565b6000818152600c6020908152604080832081516101408101835281546bffffffffffffffffffffffff811682526001600160a01b036c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e0860152600490920154808316610100860152041661012083015282918291829182918291829182918291829182918291906124da5760405162461bcd60e51b815260040161083390615a4f565b6000600b6000836040015169ffffffffffffffffffff1669ffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b612608613253565b6001600160a01b0316826001600160a01b0316141561266e576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b806005600061267b613253565b6001600160a01b0390811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016921515929092179091556126dd613253565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b15801561278d57600080fd5b505afa1580156127a1573d6000803e3d6000fd5b505050506040513d60208110156127b757600080fd5b505110156127cd576127cd868686868686611661565b505050505050565b60608167ffffffffffffffff811180156127ee57600080fd5b5060405190808252806020026020018201604052801561282257816020015b606081526020019060019003908161280d5790505b50905060005b8281101561290e576000803086868581811061284057fe5b90506020028101906128529190615bef565b6040516128609291906157d2565b600060405180830381855af49150503d806000811461289b576040519150601f19603f3d011682016040523d82523d6000602084013e6128a0565b606091505b5091509150816128ec576044815110156128b957600080fd5b600481019050808060200190518101906128d39190615402565b60405162461bcd60e51b81526004016108339190615971565b808484815181106128f957fe5b60209081029190910101525050600101612828565b5092915050565b612926612920613253565b836132db565b6129615760405162461bcd60e51b8152600401808060200182810382526031815260200180615f036031913960400191505060405180910390fd5b61296d84848484613de6565b50505050565b604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156129db57600080fd5b505afa1580156129ef573d6000803e3d6000fd5b505050506040513d6020811015612a0557600080fd5b505110156127cd576127cd868686868686612c9d565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060612a4a82613246565b612a5357600080fd5b6040517fe9dc63750000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9dc637590612aba9030908690600401615932565b60006040518083038186803b158015612ad257600080fd5b505afa158015612ae6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261148f9190810190615402565b6000612b1c828401846154a5565b9050612b4c7f00000000000000000000000000000000000000000000000000000000000000008260000151613e38565b508415612b67578051516020820151612b6791903388613e5b565b8315612b8557612b8581600001516020015182602001513387613e5b565b5050505050565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612bdb57600080fd5b505afa158015612bef573d6000803e3d6000fd5b505050506040513d6020811015612c0557600080fd5b5051905082811015612c5e576040805162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561296d5761296d848383613feb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b1580156116f457600080fd5b6000808235612d3733826132db565b612d535760405162461bcd60e51b815260040161083390615984565b6000612d656060860160408701615562565b6001600160801b03161180612d9257506000612d876080860160608701615562565b6001600160801b0316115b612d9b57600080fd5b600080612dae60408701602088016150af565b6001600160a01b031614612dd157612dcc60408601602087016150af565b612dd3565b305b85356000908152600c6020908152604080832060018082015469ffffffffffffffffffff168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff169183019190915292935090612e697f00000000000000000000000000000000000000000000000000000000000000008361337b565b600484015460018501549192506001600160801b0380821692600160801b92839004821692900416156130865760018501546040517fa34123a70000000000000000000000000000000000000000000000000000000081526001600160a01b0385169163a34123a791612f00916a01000000000000000000008104600290810b92600160681b909204900b9060009060040161594b565b6040805180830381600087803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5191906156f4565b5050600185015460009081906001600160a01b0386169063514ea4bf90612f969030906a01000000000000000000008104600290810b91600160681b9004900b613477565b6040518263ffffffff1660e01b8152600401612fb29190615929565b60a06040518083038186803b158015612fca57600080fd5b505afa158015612fde573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300291906155ac565b5050925092505061303e876002015483038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b84019350613077876003015482038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b6134d1565b60028801929092556003870155015b6000806001600160801b0384166130a360608e0160408f01615562565b6001600160801b0316116130c6576130c160608d0160408e01615562565b6130c8565b835b836001600160801b03168d60600160208101906130e59190615562565b6001600160801b0316116131085761310360808e0160608f01615562565b61310a565b835b60018901546040517f4f1eb3d80000000000000000000000000000000000000000000000000000000081529294509092506001600160a01b03871691634f1eb3d89161317d918c916a01000000000000000000008104600290810b92600160681b909204900b9088908890600401615839565b6040805180830381600087803b15801561319657600080fd5b505af11580156131aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ce919061557e565b6004890180546fffffffffffffffffffffffffffffffff196001600160801b03918216600160801b878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190610d94908b9086908690615876565b600061148f60028361417b565b3390565b6000818152600c6020526040902080546bffffffffffffffffffffffff166c010000000000000000000000006001600160a01b0385169081029190911790915581906132a2826118ce565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006132e682613246565b6133215760405162461bcd60e51b815260040180806020018281038252602c815260200180615de0602c913960400191505060405180910390fd5b600061332c836118ce565b9050806001600160a01b0316846001600160a01b031614806133675750836001600160a01b031661335c8461080c565b6001600160a01b0316145b806110c157506110c18185612c6f565b4290565b600081602001516001600160a01b031682600001516001600160a01b0316106133a357600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516bffffffffffffffffffffffff19606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b600080806000198587098686029250828110908390030390508061350757600084116134fc57600080fd5b5082900490506134ca565b80841161351357600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106135cc5780518252601f1990920191602091820191016135ad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461362e576040519150601f19603f3d011682016040523d82523d6000602084013e613633565b606091505b5050905080610939576040805162461bcd60e51b815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061148f82614187565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff1681525090506137067f00000000000000000000000000000000000000000000000000000000000000008261337b565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561374357600080fd5b505afa158015613757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377b919061560d565b50505050505090506000613792886080015161418b565b905060006137a38960a0015161418b565b90506137ba8383838c60c001518d60e001516144d9565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b031681525060405160200161380c9190615abd565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161383b9594939291906157f6565b6040805180830381600087803b15801561385457600080fd5b505af1158015613868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388c91906156f4565b610100880151919550935084108015906138ab57508561012001518310155b6138c75760405162461bcd60e51b815260040161083390615a18565b509193509193565b826001600160a01b03166138e2826118ce565b6001600160a01b0316146139275760405162461bcd60e51b8152600401808060200182810382526029815260200180615eb96029913960400191505060405180910390fd5b6001600160a01b03821661396c5760405162461bcd60e51b8152600401808060200182810382526024815260200180615d966024913960400191505060405180910390fd5b613977838383610939565b613982600082613257565b6001600160a01b03831660009081526001602052604090206139a4908261459d565b506001600160a01b03821660009081526001602052604090206139c790826145a9565b506139d4600282846145b5565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061148c83836145cb565b4690565b6000613a36826118ce565b9050613a4481600084610939565b613a4f600083613257565b6000828152600860205260409020546002600019610100600184161502019091160415613a8d576000828152600860205260408120613a8d9161501f565b6001600160a01b0381166000908152600160205260409020613aaf908361459d565b50613abb60028361462f565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000808080613b07868661463b565b909450925050505b9250929050565b60006110c18484846146b6565b6000908152600c6020526040902080546bffffffffffffffffffffffff19811660016bffffffffffffffffffffffff9283169081019092161790915590565b3b151590565b6001600160a01b038216613bc3576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613bcc81613246565b15613c1e576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613c2a60008383610939565b6001600160a01b0382166000908152600160205260409020613c4c90826145a9565b50613c59600282846145b5565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166000908152600a602052604090205469ffffffffffffffffffff168061148f5750600d8054600169ffffffffffffffffffff76010000000000000000000000000000000000000000000080840482168381019092160275ffffffffffffffffffffffffffffffffffffffffffff909316929092179092556001600160a01b038085166000908152600a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001686179055848352600b825291829020865181549085167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617825591870151950180549287015162ffffff16600160a01b027fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff969094169290911691909117939093161790915592915050565b613df18484846138cf565b613dfd84848484614780565b61296d5760405162461bcd60e51b8152600401808060200182810382526032815260200180615d3d6032913960400191505060405180910390fd5b6000613e44838361337b565b9050336001600160a01b0382161461148f57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015613e9c5750804710155b15613fbe577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613efc57600080fd5b505af1158015613f10573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613f8c57600080fd5b505af1158015613fa0573d6000803e3d6000fd5b505050506040513d6020811015613fb657600080fd5b5061296d9050565b6001600160a01b038316301415613fdf57613fda848383613feb565b61296d565b61296d8484848461495c565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b602083106140955780518252601f199092019160209182019101614076565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146140f7576040519150601f19603f3d011682016040523d82523d6000602084013e6140fc565b606091505b509150915081801561412a57508051158061412a575080806020019051602081101561412757600080fd5b50515b612b85576040805162461bcd60e51b815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061148c8383614af4565b5490565b60008060008360020b126141a2578260020b6141aa565b8260020b6000035b9050620d89e8811115614204576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661421857600160801b61422a565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561425e576ffff97272373d413259a46990580e213a0260801c5b600482161561427d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561429c576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156142bb576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156142da576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156142f9576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615614318576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615614338576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614358576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614378576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614398576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156143b8576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156143d8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156143f8576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615614418576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614439576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614459576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614478576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614495576b048a170391f7dc42444e8fa20260801c5b60008460020b13156144b05780600019816144ac57fe5b0490505b6401000000008106156144c45760016144c7565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b031611156144f9579293925b846001600160a01b0316866001600160a01b0316116145245761451d858585614b0c565b9050614594565b836001600160a01b0316866001600160a01b0316101561458657600061454b878686614b0c565b9050600061455a878986614b78565b9050806001600160801b0316826001600160801b03161061457b578061457d565b815b92505050614594565b614591858584614b78565b90505b95945050505050565b600061148c8383614bbe565b600061148c8383614c84565b60006110c184846001600160a01b038516614cce565b8154600090821061460d5760405162461bcd60e51b8152600401808060200182810382526022815260200180615d1b6022913960400191505060405180910390fd5b82600001828154811061461c57fe5b9060005260206000200154905092915050565b600061148c8383614d65565b81546000908190831061467f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615e976022913960400191505060405180910390fd5b600084600001848154811061469057fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816147515760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156147165781810151838201526020016146fe565b50505050905090810190601f1680156147435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061476457fe5b9060005260206000209060020201600101549150509392505050565b6000614794846001600160a01b0316613b62565b6147a0575060016110c1565b60006148f17f150b7a02000000000000000000000000000000000000000000000000000000006147ce613253565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561483557818101518382015260200161481d565b50505050905090810190601f1680156148625780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001615d3d603291396001600160a01b0388169190614e39565b9050600081806020019051602081101561490a57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310614a0e5780518252601f1990920191602091820191016149ef565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614a70576040519150601f19603f3d011682016040523d82523d6000602084013e614a75565b606091505b5091509150818015614aa3575080511580614aa35750808060200190516020811015614aa057600080fd5b50515b6127cd576040805162461bcd60e51b815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b03161115614b2c579192915b6000614b58856001600160a01b0316856001600160a01b03166c010000000000000000000000006134d1565b9050614594614b7384838888036001600160a01b03166134d1565b614e48565b6000826001600160a01b0316846001600160a01b03161115614b98579192915b6110c1614b73836c010000000000000000000000008787036001600160a01b03166134d1565b60008181526001830160205260408120548015614c7a5783546000198083019190810190600090879083908110614bf157fe5b9060005260206000200154905080876000018481548110614c0e57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614c3e57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061148f565b600091505061148f565b6000614c908383614af4565b614cc65750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561148f565b50600061148f565b600082815260018401602052604081205480614d335750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556134ca565b82856000016001830381548110614d4657fe5b90600052602060002090600202016001018190555060009150506134ca565b60008181526001830160205260408120548015614c7a5783546000198083019190810190600090879083908110614d9857fe5b9060005260206000209060020201905080876000018481548110614db857fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080614df757fe5b600082815260208082206002600019909401938402018281556001908101839055929093558881528982019092526040822091909155945061148f9350505050565b60606110c18484600085614e5e565b806001600160801b038116811461077157600080fd5b606082471015614e9f5760405162461bcd60e51b8152600401808060200182810382526026815260200180615dba6026913960400191505060405180910390fd5b614ea885613b62565b614ef9576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614f375780518252601f199092019160209182019101614f18565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614f99576040519150601f19603f3d011682016040523d82523d6000602084013e614f9e565b606091505b5091509150614fae828286614fb9565b979650505050505050565b60608315614fc85750816134ca565b825115614fd85782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156147165781810151838201526020016146fe565b50805460018160011615610100020316600290046000825580601f106150455750615063565b601f0160209004906000526020600020908101906150639190615066565b50565b5b8082111561507b5760008155600101615067565b5090565b803561077181615cc4565b805161ffff8116811461077157600080fd5b803562ffffff8116811461077157600080fd5b6000602082840312156150c0578081fd5b81356134ca81615cc4565b600080604083850312156150dd578081fd5b82356150e881615cc4565b915060208301356150f881615cc4565b809150509250929050565b60008060008060808587031215615118578182fd5b843561512381615cc4565b9350602085013561513381615cc4565b92506151416040860161509c565b9150606085013561515181615cc4565b939692955090935050565b600080600060608486031215615170578081fd5b833561517b81615cc4565b9250602084013561518b81615cc4565b929592945050506040919091013590565b600080600080608085870312156151b1578182fd5b84356151bc81615cc4565b935060208501356151cc81615cc4565b925060408501359150606085013567ffffffffffffffff8111156151ee578182fd5b8501601f810187136151fe578182fd5b803561521161520c82615c76565b615c52565b818152886020838501011115615225578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215615255578182fd5b823561526081615cc4565b915060208301356150f881615cd9565b60008060408385031215615282578182fd5b823561528d81615cc4565b946020939093013593505050565b6000806000606084860312156152af578081fd5b83356152ba81615cc4565b92506020840135915060408401356152d181615cc4565b809150509250925092565b60008060008060008060c087890312156152f4578384fd5b86356152ff81615cc4565b95506020870135945060408701359350606087013561531d81615d0b565b9598949750929560808101359460a0909101359350915050565b60008060208385031215615349578182fd5b823567ffffffffffffffff80821115615360578384fd5b818501915085601f830112615373578384fd5b813581811115615381578485fd5b8660208083028501011115615394578485fd5b60209290920196919550909350505050565b6000602082840312156153b7578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146134ca578182fd5b6000602082840312156153f7578081fd5b81356134ca81615ce7565b600060208284031215615413578081fd5b815167ffffffffffffffff811115615429578182fd5b8201601f81018413615439578182fd5b805161544761520c82615c76565b81815285602083850101111561545b578384fd5b614594826020830160208601615c98565b60006080828403121561547d578081fd5b50919050565b600060a0828403121561547d578081fd5b600060c0828403121561547d578081fd5b600081830360808112156154b7578182fd5b6040516040810167ffffffffffffffff82821081831117156154d557fe5b8160405260608412156154e6578485fd5b60a08301935081841081851117156154fa57fe5b50826040528435925061550c83615cc4565b91825260208401359161551e83615cc4565b8260608301526155306040860161509c565b608083015281526155436060850161507f565b6020820152949350505050565b6000610160828403121561547d578081fd5b600060208284031215615573578081fd5b81356134ca81615cf6565b60008060408385031215615590578182fd5b825161559b81615cf6565b60208401519092506150f881615cf6565b600080600080600060a086880312156155c3578283fd5b85516155ce81615cf6565b80955050602086015193506040860151925060608601516155ee81615cf6565b60808701519092506155ff81615cf6565b809150509295509295909350565b600080600080600080600060e0888a031215615627578485fd5b875161563281615cc4565b602089015190975061564381615ce7565b95506156516040890161508a565b945061565f6060890161508a565b935061566d6080890161508a565b925060a088015161567d81615d0b565b60c089015190925061568e81615cd9565b8091505092959891949750929550565b6000602082840312156156af578081fd5b61148c8261509c565b6000602082840312156156c9578081fd5b5035919050565b600080604083850312156156e2578182fd5b8235915060208301356150f881615cc4565b60008060408385031215615706578182fd5b505080516020909101519092909150565b6000806000806060858703121561572c578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115615751578384fd5b818701915087601f830112615764578384fd5b813581811115615772578485fd5b886020828501011115615783578485fd5b95989497505060200194505050565b600081518084526157aa816020860160208601615c98565b601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b60006001600160a01b03871682528560020b60208301528460020b60408301526001600160801b038416606083015260a06080830152614fae60a0830184615792565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615911577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526158ff858351615792565b945092850192908501906001016158c5565b5092979650505050505050565b901515815260200190565b90815260200190565b6001600160a01b03929092168252602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60006020825261148c6020830184615792565b6020808252600c908201527f4e6f7420617070726f7665640000000000000000000000000000000000000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f507269636520736c69707061676520636865636b000000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420746f6b656e20494400000000000000000000000000000000604082015260600190565b6020808252600b908201527f4e6f7420636c6561726564000000000000000000000000000000000000000000604082015260600190565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b9384526001600160801b039290921660208401526040830152606082015260800190565b918252602082015260400190565b6bffffffffffffffffffffffff8d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a08201526101808101615ba760c08301896157be565b615bb460e08301886157c5565b8561010083015284610120830152615bd06101408301856157c5565b615bde6101608301846157c5565b9d9c50505050505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c23578283fd5b83018035915067ffffffffffffffff821115615c3d578283fd5b602001915036819003821315613b0f57600080fd5b60405181810167ffffffffffffffff81118282101715615c6e57fe5b604052919050565b600067ffffffffffffffff821115615c8a57fe5b50601f01601f191660200190565b60005b83811015615cb3578181015183820152602001615c9b565b8381111561296d5750506000910152565b6001600160a01b038116811461506357600080fd5b801515811461506357600080fd5b8060020b811461506357600080fd5b6001600160801b038116811461506357600080fd5b60ff8116811461506357600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315065726d69743a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a164736f6c6343000706000a'; } } diff --git a/src/briefcase/deployers/v3-periphery/NonfungibleTokenPositionDescriptorDeployer.sol b/src/briefcase/deployers/v3-periphery/NonfungibleTokenPositionDescriptorDeployer.sol index d8b40fe9..cca2144b 100644 --- a/src/briefcase/deployers/v3-periphery/NonfungibleTokenPositionDescriptorDeployer.sol +++ b/src/briefcase/deployers/v3-periphery/NonfungibleTokenPositionDescriptorDeployer.sol @@ -1,9 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.7.0; -import { - INonfungibleTokenPositionDescriptor -} from '../../protocols/v3-periphery/interfaces/INonfungibleTokenPositionDescriptor.sol'; +import {INonfungibleTokenPositionDescriptor} from + '../../protocols/v3-periphery/interfaces/INonfungibleTokenPositionDescriptor.sol'; import {DeployerHelper} from '../DeployerHelper.sol'; import {NFTDescriptorDeployer} from './NFTDescriptorDeployer.sol'; diff --git a/src/briefcase/deployers/v3-periphery/QuoterV2Deployer.sol b/src/briefcase/deployers/v3-periphery/QuoterV2Deployer.sol index 806f21a3..ef754d16 100644 --- a/src/briefcase/deployers/v3-periphery/QuoterV2Deployer.sol +++ b/src/briefcase/deployers/v3-periphery/QuoterV2Deployer.sol @@ -22,6 +22,7 @@ library QuoterV2Deployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'60c06040523480156200001157600080fd5b506040516200212c3803806200212c833981016040819052620000349162000070565b6001600160601b0319606092831b8116608052911b1660a052620000a7565b80516001600160a01b03811681146200006b57600080fd5b919050565b6000806040838503121562000083578182fd5b6200008e8362000053565b91506200009e6020840162000053565b90509250929050565b60805160601c60a05160601c612051620000db60003980610321525080610577528061095d5280610b9252506120516000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100e6578063c6a5026a146100ee578063cdca175314610101578063fa461e33146101145761007d565b80632f80bb1d146100825780634aa4a4fc146100ae578063bd21704a146100c3575b600080fd5b610095610090366004611b2b565b610129565b6040516100a59493929190611eac565b60405180910390f35b6100b661031f565b6040516100a59190611def565b6100d66100d1366004611c49565b610343565b6040516100a59493929190611f54565b6100b6610575565b6100d66100fc366004611c49565b610599565b61009561010f366004611b2b565b610754565b610127610122366004611b91565b61092c565b005b6000606080600061013986610ae8565b67ffffffffffffffff8111801561014f57600080fd5b50604051908082528060200260200182016040528015610179578160200160208202803683370190505b50925061018586610ae8565b67ffffffffffffffff8111801561019b57600080fd5b506040519080825280602002602001820160405280156101c5578160200160208202803683370190505b50915060005b60008060006101d98a610b17565b92509250925060008060008061025c6040518060a001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610343565b9350935093509350828b898151811061027157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a89815181106102b857fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b926102e58e610b48565b156102fa576102f38e610b50565b9d5061030a565b8c9b505050505050505050610316565b505050505050506101cb565b92959194509250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff808216908416109284926103819290610b8b565b9050866080015173ffffffffffffffffffffffffffffffffffffffff16600014156103af5760408701516000555b60005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856103df8c60400151610bc9565b6000038c6080015173ffffffffffffffffffffffffffffffffffffffff1660001461040e578c60800151610434565b8761042d5773fffd8963efd1fc6a506488495d951d5263988d25610434565b6401000276a45b8d602001518e606001518f6000015160405160200161045593929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610484959493929190611e10565b6040805180830381600087803b15801561049d57600080fd5b505af19250505080156104eb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526104e891810190611b6e565b60015b610568573d808015610519576040519150601f19603f3d011682016040523d82523d6000602084013e61051e565b606091505b505a82039450886080015173ffffffffffffffffffffffffffffffffffffffff166000141561054c57600080555b610557818487610bfb565b97509750975097505050505061056e565b50505050505b9193509193565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff808216908416109284926105d79290610b8b565b905060005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856106098c60400151610bc9565b60808d015173ffffffffffffffffffffffffffffffffffffffff1615610633578c60800151610659565b876106525773fffd8963efd1fc6a506488495d951d5263988d25610659565b6401000276a45b8d600001518e606001518f6020015160405160200161067a93929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016106a9959493929190611e10565b6040805180830381600087803b1580156106c257600080fd5b505af1925050508015610710575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261070d91810190611b6e565b60015b610568573d80801561073e576040519150601f19603f3d011682016040523d82523d6000602084013e610743565b606091505b505a82039450610557818487610bfb565b6000606080600061076486610ae8565b67ffffffffffffffff8111801561077a57600080fd5b506040519080825280602002602001820160405280156107a4578160200160208202803683370190505b5092506107b086610ae8565b67ffffffffffffffff811180156107c657600080fd5b506040519080825280602002602001820160405280156107f0578160200160208202803683370190505b50915060005b60008060006108048a610b17565b9250925092506000806000806108876040518060a001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610599565b9350935093509350828b898151811061089c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a89815181106108e357fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b926109108e610b48565b156102fa5761091e8e610b50565b9d50505050505050506107f6565b600083138061093b5750600082135b61094457600080fd5b600080600061095284610b17565b9250925092506109847f0000000000000000000000000000000000000000000000000000000000000000848484610ccf565b5060008060008089136109ca578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a6000036109ff565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b9250925092506000610a12878787610b8b565b90506000808273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610a5d57600080fd5b505afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190611c6b565b5050505050915091508515610abb57604051848152826020820152816040820152606081fd5b60005415610ad1576000548414610ad157600080fd5b604051858152826020820152816040820152606081fd5b805160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec909101045b919050565b60008080610b258482610cee565b9250610b32846014610dee565b9050610b3f846017610cee565b91509193909250565b516042111590565b8051606090610b859083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901610ede565b92915050565b6000610bc17f0000000000000000000000000000000000000000000000000000000000000000610bbc8686866110c5565b611142565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210610bf757600080fd5b5090565b6000806000806000808773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610c4a57600080fd5b505afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c829190611c6b565b50939650610c9794508d935061127892505050565b91975095509050610cbf73ffffffffffffffffffffffffffffffffffffffff89168383611339565b9350869250505093509350935093565b6000610ce585610ce08686866110c5565b611991565b95945050505050565b600081826014011015610d6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015610dd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015610ed557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f011015610f5257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610fc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561103557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561105457604051915060008252602082016040526110bc565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561108d578051835260209283019201611075565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6110cd6119fa565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115611105579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061118457600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b60008060008351606014611318576044845110156112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c290611e75565b60405180910390fd5b600484019350838060200190518101906112e59190611bdf565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c29190611e62565b8380602001905181019061132c9190611d02565b9250925092509193909250565b60008060008060008060008060088b73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561138d57600080fd5b505afa1580156113a1573d6000803e3d6000fd5b505050506040513d60208110156113b757600080fd5b5051600290810b908c900b816113c957fe5b0560020b901d905060006101008c73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561141c57600080fd5b505afa158015611430573d6000803e3d6000fd5b505050506040513d602081101561144657600080fd5b5051600290810b908d900b8161145857fe5b0560020b8161146357fe5b079050600060088d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114b057600080fd5b505afa1580156114c4573d6000803e3d6000fd5b505050506040513d60208110156114da57600080fd5b5051600290810b908d900b816114ec57fe5b0560020b901d905060006101008e73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153f57600080fd5b505afa158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b5051600290810b908e900b8161157b57fe5b0560020b8161158657fe5b07905060008160ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296856040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b5051161180156116a457508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561166257600080fd5b505afa158015611676573d6000803e3d6000fd5b505050506040513d602081101561168c57600080fd5b5051600290810b908d900b8161169e57fe5b0760020b155b80156116b557508b60020b8d60020b135b945060008360ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296876040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561171557600080fd5b505afa158015611729573d6000803e3d6000fd5b505050506040513d602081101561173f57600080fd5b5051161180156117d257508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179057600080fd5b505afa1580156117a4573d6000803e3d6000fd5b505050506040513d60208110156117ba57600080fd5b5051600290810b908e900b816117cc57fe5b0760020b155b80156117e357508b60020b8d60020b125b95508160010b8460010b128061180f57508160010b8460010b14801561180f57508060ff168360ff1611155b1561182557839950829750819850809650611832565b8199508097508398508296505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff87161b9150505b8560010b8760010b13611969578560010b8760010b14156118a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff858103161c165b6000818c73ffffffffffffffffffffffffffffffffffffffff16635339c2968a6040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d602081101561192457600080fd5b5051169050611932816119c1565b61ffff16989098019750506001909501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61185e565b8115611976576001880397505b8215611983576001880397505b505050505050509392505050565b600061199d8383611142565b90503373ffffffffffffffffffffffffffffffffffffffff821614610b8557600080fd5b6000805b8215610b85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301909216916001016119c5565b604080516060810182526000808252602082018190529181019190915290565b600082601f830112611a2a578081fd5b8135611a3d611a3882611faf565b611f8b565b818152846020838601011115611a51578283fd5b816020850160208301379081016020019190915292915050565b8051600281900b8114610b1257600080fd5b600060a08284031215611a8e578081fd5b60405160a0810181811067ffffffffffffffff82111715611aab57fe5b6040529050808235611abc8161201f565b81526020830135611acc8161201f565b602082015260408381013590820152606083013562ffffff81168114611af157600080fd5b6060820152611b0260808401611b0e565b60808201525092915050565b8035610b128161201f565b805161ffff81168114610b1257600080fd5b60008060408385031215611b3d578182fd5b823567ffffffffffffffff811115611b53578283fd5b611b5f85828601611a1a565b95602094909401359450505050565b60008060408385031215611b80578182fd5b505080516020909101519092909150565b600080600060608486031215611ba5578081fd5b8335925060208401359150604084013567ffffffffffffffff811115611bc9578182fd5b611bd586828701611a1a565b9150509250925092565b600060208284031215611bf0578081fd5b815167ffffffffffffffff811115611c06578182fd5b8201601f81018413611c16578182fd5b8051611c24611a3882611faf565b818152856020838501011115611c38578384fd5b610ce5826020830160208601611fef565b600060a08284031215611c5a578081fd5b611c648383611a7d565b9392505050565b600080600080600080600060e0888a031215611c85578283fd5b8751611c908161201f565b9650611c9e60208901611a6b565b9550611cac60408901611b19565b9450611cba60608901611b19565b9350611cc860808901611b19565b925060a088015160ff81168114611cdd578283fd5b60c08901519092508015158114611cf2578182fd5b8091505092959891949750929550565b600080600060608486031215611d16578081fd5b835192506020840151611d288161201f565b9150611d3660408501611a6b565b90509250925092565b60008151808452611d57816020860160208601611fef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152611e5760a0830184611d3f565b979650505050505050565b600060208252611c646020830184611d3f565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611f0257845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611ed0565b505084810360408601528651808252908201925081870190845b81811015611f3e57825163ffffffff1685529383019391830191600101611f1c565b5050505060609290920192909252949350505050565b93845273ffffffffffffffffffffffffffffffffffffffff92909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff81118282101715611fa757fe5b604052919050565b600067ffffffffffffffff821115611fc357fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381101561200a578181015183820152602001611ff2565b83811115612019576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461204157600080fd5b5056fea164736f6c6343000706000a'; + return + hex'60c06040523480156200001157600080fd5b506040516200212c3803806200212c833981016040819052620000349162000070565b6001600160601b0319606092831b8116608052911b1660a052620000a7565b80516001600160a01b03811681146200006b57600080fd5b919050565b6000806040838503121562000083578182fd5b6200008e8362000053565b91506200009e6020840162000053565b90509250929050565b60805160601c60a05160601c612051620000db60003980610321525080610577528061095d5280610b9252506120516000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100e6578063c6a5026a146100ee578063cdca175314610101578063fa461e33146101145761007d565b80632f80bb1d146100825780634aa4a4fc146100ae578063bd21704a146100c3575b600080fd5b610095610090366004611b2b565b610129565b6040516100a59493929190611eac565b60405180910390f35b6100b661031f565b6040516100a59190611def565b6100d66100d1366004611c49565b610343565b6040516100a59493929190611f54565b6100b6610575565b6100d66100fc366004611c49565b610599565b61009561010f366004611b2b565b610754565b610127610122366004611b91565b61092c565b005b6000606080600061013986610ae8565b67ffffffffffffffff8111801561014f57600080fd5b50604051908082528060200260200182016040528015610179578160200160208202803683370190505b50925061018586610ae8565b67ffffffffffffffff8111801561019b57600080fd5b506040519080825280602002602001820160405280156101c5578160200160208202803683370190505b50915060005b60008060006101d98a610b17565b92509250925060008060008061025c6040518060a001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610343565b9350935093509350828b898151811061027157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a89815181106102b857fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b926102e58e610b48565b156102fa576102f38e610b50565b9d5061030a565b8c9b505050505050505050610316565b505050505050506101cb565b92959194509250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff808216908416109284926103819290610b8b565b9050866080015173ffffffffffffffffffffffffffffffffffffffff16600014156103af5760408701516000555b60005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856103df8c60400151610bc9565b6000038c6080015173ffffffffffffffffffffffffffffffffffffffff1660001461040e578c60800151610434565b8761042d5773fffd8963efd1fc6a506488495d951d5263988d25610434565b6401000276a45b8d602001518e606001518f6000015160405160200161045593929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610484959493929190611e10565b6040805180830381600087803b15801561049d57600080fd5b505af19250505080156104eb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526104e891810190611b6e565b60015b610568573d808015610519576040519150601f19603f3d011682016040523d82523d6000602084013e61051e565b606091505b505a82039450886080015173ffffffffffffffffffffffffffffffffffffffff166000141561054c57600080555b610557818487610bfb565b97509750975097505050505061056e565b50505050505b9193509193565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff808216908416109284926105d79290610b8b565b905060005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856106098c60400151610bc9565b60808d015173ffffffffffffffffffffffffffffffffffffffff1615610633578c60800151610659565b876106525773fffd8963efd1fc6a506488495d951d5263988d25610659565b6401000276a45b8d600001518e606001518f6020015160405160200161067a93929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016106a9959493929190611e10565b6040805180830381600087803b1580156106c257600080fd5b505af1925050508015610710575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261070d91810190611b6e565b60015b610568573d80801561073e576040519150601f19603f3d011682016040523d82523d6000602084013e610743565b606091505b505a82039450610557818487610bfb565b6000606080600061076486610ae8565b67ffffffffffffffff8111801561077a57600080fd5b506040519080825280602002602001820160405280156107a4578160200160208202803683370190505b5092506107b086610ae8565b67ffffffffffffffff811180156107c657600080fd5b506040519080825280602002602001820160405280156107f0578160200160208202803683370190505b50915060005b60008060006108048a610b17565b9250925092506000806000806108876040518060a001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610599565b9350935093509350828b898151811061089c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a89815181106108e357fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b926109108e610b48565b156102fa5761091e8e610b50565b9d50505050505050506107f6565b600083138061093b5750600082135b61094457600080fd5b600080600061095284610b17565b9250925092506109847f0000000000000000000000000000000000000000000000000000000000000000848484610ccf565b5060008060008089136109ca578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a6000036109ff565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b9250925092506000610a12878787610b8b565b90506000808273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610a5d57600080fd5b505afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190611c6b565b5050505050915091508515610abb57604051848152826020820152816040820152606081fd5b60005415610ad1576000548414610ad157600080fd5b604051858152826020820152816040820152606081fd5b805160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec909101045b919050565b60008080610b258482610cee565b9250610b32846014610dee565b9050610b3f846017610cee565b91509193909250565b516042111590565b8051606090610b859083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901610ede565b92915050565b6000610bc17f0000000000000000000000000000000000000000000000000000000000000000610bbc8686866110c5565b611142565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210610bf757600080fd5b5090565b6000806000806000808773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610c4a57600080fd5b505afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c829190611c6b565b50939650610c9794508d935061127892505050565b91975095509050610cbf73ffffffffffffffffffffffffffffffffffffffff89168383611339565b9350869250505093509350935093565b6000610ce585610ce08686866110c5565b611991565b95945050505050565b600081826014011015610d6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015610dd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015610ed557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f011015610f5257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610fc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561103557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561105457604051915060008252602082016040526110bc565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561108d578051835260209283019201611075565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6110cd6119fa565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115611105579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061118457600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b60008060008351606014611318576044845110156112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c290611e75565b60405180910390fd5b600484019350838060200190518101906112e59190611bdf565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c29190611e62565b8380602001905181019061132c9190611d02565b9250925092509193909250565b60008060008060008060008060088b73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561138d57600080fd5b505afa1580156113a1573d6000803e3d6000fd5b505050506040513d60208110156113b757600080fd5b5051600290810b908c900b816113c957fe5b0560020b901d905060006101008c73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561141c57600080fd5b505afa158015611430573d6000803e3d6000fd5b505050506040513d602081101561144657600080fd5b5051600290810b908d900b8161145857fe5b0560020b8161146357fe5b079050600060088d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114b057600080fd5b505afa1580156114c4573d6000803e3d6000fd5b505050506040513d60208110156114da57600080fd5b5051600290810b908d900b816114ec57fe5b0560020b901d905060006101008e73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153f57600080fd5b505afa158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b5051600290810b908e900b8161157b57fe5b0560020b8161158657fe5b07905060008160ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296856040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b5051161180156116a457508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561166257600080fd5b505afa158015611676573d6000803e3d6000fd5b505050506040513d602081101561168c57600080fd5b5051600290810b908d900b8161169e57fe5b0760020b155b80156116b557508b60020b8d60020b135b945060008360ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296876040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561171557600080fd5b505afa158015611729573d6000803e3d6000fd5b505050506040513d602081101561173f57600080fd5b5051161180156117d257508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179057600080fd5b505afa1580156117a4573d6000803e3d6000fd5b505050506040513d60208110156117ba57600080fd5b5051600290810b908e900b816117cc57fe5b0760020b155b80156117e357508b60020b8d60020b125b95508160010b8460010b128061180f57508160010b8460010b14801561180f57508060ff168360ff1611155b1561182557839950829750819850809650611832565b8199508097508398508296505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff87161b9150505b8560010b8760010b13611969578560010b8760010b14156118a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff858103161c165b6000818c73ffffffffffffffffffffffffffffffffffffffff16635339c2968a6040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d602081101561192457600080fd5b5051169050611932816119c1565b61ffff16989098019750506001909501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61185e565b8115611976576001880397505b8215611983576001880397505b505050505050509392505050565b600061199d8383611142565b90503373ffffffffffffffffffffffffffffffffffffffff821614610b8557600080fd5b6000805b8215610b85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301909216916001016119c5565b604080516060810182526000808252602082018190529181019190915290565b600082601f830112611a2a578081fd5b8135611a3d611a3882611faf565b611f8b565b818152846020838601011115611a51578283fd5b816020850160208301379081016020019190915292915050565b8051600281900b8114610b1257600080fd5b600060a08284031215611a8e578081fd5b60405160a0810181811067ffffffffffffffff82111715611aab57fe5b6040529050808235611abc8161201f565b81526020830135611acc8161201f565b602082015260408381013590820152606083013562ffffff81168114611af157600080fd5b6060820152611b0260808401611b0e565b60808201525092915050565b8035610b128161201f565b805161ffff81168114610b1257600080fd5b60008060408385031215611b3d578182fd5b823567ffffffffffffffff811115611b53578283fd5b611b5f85828601611a1a565b95602094909401359450505050565b60008060408385031215611b80578182fd5b505080516020909101519092909150565b600080600060608486031215611ba5578081fd5b8335925060208401359150604084013567ffffffffffffffff811115611bc9578182fd5b611bd586828701611a1a565b9150509250925092565b600060208284031215611bf0578081fd5b815167ffffffffffffffff811115611c06578182fd5b8201601f81018413611c16578182fd5b8051611c24611a3882611faf565b818152856020838501011115611c38578384fd5b610ce5826020830160208601611fef565b600060a08284031215611c5a578081fd5b611c648383611a7d565b9392505050565b600080600080600080600060e0888a031215611c85578283fd5b8751611c908161201f565b9650611c9e60208901611a6b565b9550611cac60408901611b19565b9450611cba60608901611b19565b9350611cc860808901611b19565b925060a088015160ff81168114611cdd578283fd5b60c08901519092508015158114611cf2578182fd5b8091505092959891949750929550565b600080600060608486031215611d16578081fd5b835192506020840151611d288161201f565b9150611d3660408501611a6b565b90509250925092565b60008151808452611d57816020860160208601611fef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152611e5760a0830184611d3f565b979650505050505050565b600060208252611c646020830184611d3f565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611f0257845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611ed0565b505084810360408601528651808252908201925081870190845b81811015611f3e57825163ffffffff1685529383019391830191600101611f1c565b5050505060609290920192909252949350505050565b93845273ffffffffffffffffffffffffffffffffffffffff92909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff81118282101715611fa757fe5b604052919050565b600067ffffffffffffffff821115611fc357fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381101561200a578181015183820152602001611ff2565b83811115612019576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461204157600080fd5b5056fea164736f6c6343000706000a'; } } diff --git a/src/briefcase/deployers/v3-periphery/SwapRouterDeployer.sol b/src/briefcase/deployers/v3-periphery/SwapRouterDeployer.sol index 9a61b77e..806b3ea9 100644 --- a/src/briefcase/deployers/v3-periphery/SwapRouterDeployer.sol +++ b/src/briefcase/deployers/v3-periphery/SwapRouterDeployer.sol @@ -22,6 +22,7 @@ library SwapRouterDeployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'60c06040526000196000553480156200001757600080fd5b506040516200302f3803806200302f8339810160408190526200003a9162000076565b6001600160601b0319606092831b8116608052911b1660a052620000ad565b80516001600160a01b03811681146200007157600080fd5b919050565b6000806040838503121562000089578182fd5b620000948362000059565b9150620000a46020840162000059565b90509250929050565b60805160601c60a05160601c612f26620001096000398061012f528061058352806106ad5280610747528061078752806108b15280611c435280611ca35280611d24525080610dc6528061140c5280611e265250612f266000f3fe6080604052600436106101125760003560e01c8063c04b8d59116100a5578063df2ab5bb11610074578063f28c049811610059578063f28c0498146102f5578063f3995c6714610308578063fa461e331461031b576101bd565b8063df2ab5bb146102cf578063e0e189a0146102e2576101bd565b8063c04b8d5914610281578063c2e3140a14610294578063c45a0155146102a7578063db3e2198146102bc576101bd565b80634aa4a4fc116100e15780634aa4a4fc146102195780639b2c0a371461023b578063a4a78f0c1461024e578063ac9650d814610261576101bd565b806312210e8a146101c2578063414bf389146101ca5780634659a494146101f357806349404b7c14610206576101bd565b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101bb61033b565b6101dd6101d83660046129f8565b61034d565b6040516101ea9190612df1565b60405180910390f35b6101bb610201366004612776565b6104bf565b6101bb610214366004612aff565b61057f565b34801561022557600080fd5b5061022e610745565b6040516101ea9190612c37565b6101bb610249366004612b2e565b610769565b6101bb61025c366004612776565b610981565b61027461026f3660046127d6565b610a56565b6040516101ea9190612caa565b6101dd61028f36600461294d565b610bb0565b6101bb6102a2366004612776565b610d0f565b3480156102b357600080fd5b5061022e610dc4565b6101dd6102ca3660046129f8565b610de8565b6101bb6102dd3660046126d7565b610f78565b6101bb6102f0366004612718565b611095565b6101dd610303366004612a14565b6111fb565b6101bb610316366004612776565b61132f565b34801561032757600080fd5b506101bb610336366004612868565b6113c7565b471561034b5761034b334761150e565b565b600081608001358061035d61165c565b11156103ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61047060a08401356103e260808601606087016126b4565b6103f3610100870160e088016126b4565b604080518082019091528061040b60208a018a6126b4565b61041b60608b0160408c01612adc565b61042b60408c0160208d016126b4565b60405160200161043d93929190612bc1565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611660565b91508260c001358210156104b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d72565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561055f57600080fd5b505af1158015610573573d6000803e3d6000fd5b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561060857600080fd5b505afa15801561061c573d6000803e3d6000fd5b505050506040513d602081101561063257600080fd5b50519050828110156106a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610740577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561071e57600080fd5b505af1158015610732573d6000803e3d6000fd5b50505050610740828261150e565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008211801561077a575060648211155b61078357600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561080c57600080fd5b505afa158015610820573d6000803e3d6000fd5b505050506040513d602081101561083657600080fd5b50519050848110156108a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561097a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b50505050600061271061095285846117e690919063ffffffff16565b8161095957fe5b049050801561096c5761096c838261150e565b6109788582840361150e565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610a1657600080fd5b505afa158015610a2a573d6000803e3d6000fd5b505050506040513d6020811015610a4057600080fd5b50511015610978576109788686868686866104bf565b60608167ffffffffffffffff81118015610a6f57600080fd5b50604051908082528060200260200182016040528015610aa357816020015b6060815260200190600190039081610a8e5790505b50905060005b82811015610ba95760008030868685818110610ac157fe5b9050602002810190610ad39190612dfa565b604051610ae1929190612c27565b600060405180830381855af49150503d8060008114610b1c576040519150601f19603f3d011682016040523d82523d6000602084013e610b21565b606091505b509150915081610b8757604481511015610b3a57600080fd5b60048101905080806020019051810190610b5491906128e3565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b09190612d28565b80848481518110610b9457fe5b60209081029190910101525050600101610aa9565b5092915050565b6000816040015180610bc061165c565b1115610c2d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610c3e8560000151611810565b9050610c97856060015182610c57578660200151610c59565b305b60006040518060400160405280610c738b6000015161181c565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611660565b60608601528015610cb7578451309250610cb09061182b565b8552610cc4565b8460600151935050610cca565b50610c2f565b8360800151831015610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d72565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b505110156109785761097886868686868661132f565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000816080013580610df861165c565b1115610e6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b610f0e60a0840135610e7d60808601606087016126b4565b610e8e610100870160e088016126b4565b6040518060400160405280886020016020810190610eac91906126b4565b610ebc60608b0160408c01612adc565b610ec960208c018c6126b4565b604051602001610edb93929190612bc1565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611860565b91508260c00135821115610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fe157600080fd5b505afa158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b505190508281101561107e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561108f5761108f848383611a1c565b50505050565b6000821180156110a6575060648211155b6110af57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561111857600080fd5b505afa15801561112c573d6000803e3d6000fd5b505050506040513d602081101561114257600080fd5b50519050848110156111b557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156109785760006127106111ca83866117e6565b816111d157fe5b04905080156111e5576111e5878483611a1c565b6111f28786838503611a1c565b50505050505050565b600081604001358061120b61165c565b111561127857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6112eb606084013561129060408601602087016126b4565b60408051808201909152600090806112a88980612dfa565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611860565b5060005491508260800135821115610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d3b565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561055f57600080fd5b60008413806113d65750600083135b6113df57600080fd5b60006113ed82840184612a4c565b905060008060006114018460000151611bf1565b9250925092506114337f0000000000000000000000000000000000000000000000000000000000000000848484611c22565b5060008060008a13611474578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896114a5565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b9150915081156114c4576114bf8587602001513384611c41565b610573565b85516114cf90611810565b156114f45785516114df9061182b565b86526114ee8133600089611860565b50610573565b806000819055508394506105738587602001513384611c41565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061158557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611548565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146115e7576040519150601f19603f3d011682016040523d82523d6000602084013e6115ec565b606091505b505090508061074057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b4290565b600073ffffffffffffffffffffffffffffffffffffffff8416611681573093505b60008060006116938560000151611bf1565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806116c4868686611e1f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856116ea8f611e5d565b73ffffffffffffffffffffffffffffffffffffffff8e161561170c578d611732565b8761172b5773fffd8963efd1fc6a506488495d951d5263988d25611732565b6401000276a45b8d6040516020016117439190612da9565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611772959493929190612c58565b6040805180830381600087803b15801561178b57600080fd5b505af115801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c39190612845565b91509150826117d257816117d4565b805b6000039b9a5050505050505050505050565b6000821580611801575050818102818382816117fe57fe5b04145b61180a57600080fd5b92915050565b8051604211155b919050565b606061180a826000602b611e8f565b805160609061180a9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901611e8f565b600073ffffffffffffffffffffffffffffffffffffffff8416611881573093505b60008060006118938560000151611bf1565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806118c4858786611e1f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856118ea8f611e5d565b60000373ffffffffffffffffffffffffffffffffffffffff8e161561190f578d611935565b8761192e5773fffd8963efd1fc6a506488495d951d5263988d25611935565b6401000276a45b8d6040516020016119469190612da9565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611975959493929190612c58565b6040805180830381600087803b15801561198e57600080fd5b505af11580156119a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c69190612845565b915091506000836119db5781836000036119e1565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16611a0d578b8114611a0d57600080fd5b50505050505050949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611af157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ab4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b53576040519150601f19603f3d011682016040523d82523d6000602084013e611b58565b606091505b5091509150818015611b86575080511580611b865750808060200190516020811015611b8357600080fd5b50515b61097a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008080611bff8482612076565b9250611c0c846014612176565b9050611c19846017612076565b91509193909250565b6000611c3885611c33868686612266565b6122e3565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c9c5750804710155b15611de5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611db357600080fd5b505af1158015611dc7573d6000803e3d6000fd5b505050506040513d6020811015611ddd57600080fd5b5061108f9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415611e1357611e0e848383611a1c565b61108f565b61108f84848484612313565b6000611e557f0000000000000000000000000000000000000000000000000000000000000000611e50868686612266565b6124f0565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210611e8b57600080fd5b5090565b60608182601f011015611f0357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015611f7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015611fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015612005576040519150600082526020820160405261206d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561203e578051835260209283019201612026565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000818260140110156120ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561215d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b6000818260030110156121ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561225d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b61226e612626565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1611156122a6579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b60006122ef83836124f0565b90503373ffffffffffffffffffffffffffffffffffffffff82161461180a57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106123f057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016123b3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612452576040519150601f19603f3d011682016040523d82523d6000602084013e612457565b606091505b5091509150818015612485575080511580612485575080806020019051602081101561248257600080fd5b50515b61097857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061253257600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b803561181781612ef4565b600082601f830112612661578081fd5b813561267461266f82612e88565b612e64565b818152846020838601011115612688578283fd5b816020850160208301379081016020019190915292915050565b600061010082840312156104b9578081fd5b6000602082840312156126c5578081fd5b81356126d081612ef4565b9392505050565b6000806000606084860312156126eb578182fd5b83356126f681612ef4565b925060208401359150604084013561270d81612ef4565b809150509250925092565b600080600080600060a0868803121561272f578081fd5b853561273a81612ef4565b945060208601359350604086013561275181612ef4565b925060608601359150608086013561276881612ef4565b809150509295509295909350565b60008060008060008060c0878903121561278e578081fd5b863561279981612ef4565b95506020870135945060408701359350606087013560ff811681146127bc578182fd5b9598949750929560808101359460a0909101359350915050565b600080602083850312156127e8578182fd5b823567ffffffffffffffff808211156127ff578384fd5b818501915085601f830112612812578384fd5b813581811115612820578485fd5b8660208083028501011115612833578485fd5b60209290920196919550909350505050565b60008060408385031215612857578182fd5b505080516020909101519092909150565b6000806000806060858703121561287d578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156128a2578384fd5b818701915087601f8301126128b5578384fd5b8135818111156128c3578485fd5b8860208285010111156128d4578485fd5b95989497505060200194505050565b6000602082840312156128f4578081fd5b815167ffffffffffffffff81111561290a578182fd5b8201601f8101841361291a578182fd5b805161292861266f82612e88565b81815285602083850101111561293c578384fd5b611c38826020830160208601612ec8565b60006020828403121561295e578081fd5b813567ffffffffffffffff80821115612975578283fd5b9083019060a08286031215612988578283fd5b60405160a08101818110838211171561299d57fe5b6040528235828111156129ae578485fd5b6129ba87828601612651565b8252506129c960208401612646565b602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60006101008284031215612a0a578081fd5b6126d083836126a2565b600060208284031215612a25578081fd5b813567ffffffffffffffff811115612a3b578182fd5b820160a081850312156126d0578182fd5b600060208284031215612a5d578081fd5b813567ffffffffffffffff80821115612a74578283fd5b9083019060408286031215612a87578283fd5b604051604081018181108382111715612a9c57fe5b604052823582811115612aad578485fd5b612ab987828601612651565b82525060208301359250612acc83612ef4565b6020810192909252509392505050565b600060208284031215612aed578081fd5b813562ffffff811681146126d0578182fd5b60008060408385031215612b11578182fd5b823591506020830135612b2381612ef4565b809150509250929050565b60008060008060808587031215612b43578182fd5b843593506020850135612b5581612ef4565b9250604085013591506060850135612b6c81612ef4565b939692955090935050565b60008151808452612b8f816020860160208601612ec8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152612c9f60a0830184612b77565b979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612d1b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d09858351612b77565b94509285019290850190600101612ccf565b5092979650505050505050565b6000602082526126d06020830184612b77565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060208252825160406020840152612dc56060840182612b77565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e2e578283fd5b83018035915067ffffffffffffffff821115612e48578283fd5b602001915036819003821315612e5d57600080fd5b9250929050565b60405181810167ffffffffffffffff81118282101715612e8057fe5b604052919050565b600067ffffffffffffffff821115612e9c57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612ee3578181015183820152602001612ecb565b8381111561108f5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612f1657600080fd5b5056fea164736f6c6343000706000a'; + return + hex'60c06040526000196000553480156200001757600080fd5b506040516200302f3803806200302f8339810160408190526200003a9162000076565b6001600160601b0319606092831b8116608052911b1660a052620000ad565b80516001600160a01b03811681146200007157600080fd5b919050565b6000806040838503121562000089578182fd5b620000948362000059565b9150620000a46020840162000059565b90509250929050565b60805160601c60a05160601c612f26620001096000398061012f528061058352806106ad5280610747528061078752806108b15280611c435280611ca35280611d24525080610dc6528061140c5280611e265250612f266000f3fe6080604052600436106101125760003560e01c8063c04b8d59116100a5578063df2ab5bb11610074578063f28c049811610059578063f28c0498146102f5578063f3995c6714610308578063fa461e331461031b576101bd565b8063df2ab5bb146102cf578063e0e189a0146102e2576101bd565b8063c04b8d5914610281578063c2e3140a14610294578063c45a0155146102a7578063db3e2198146102bc576101bd565b80634aa4a4fc116100e15780634aa4a4fc146102195780639b2c0a371461023b578063a4a78f0c1461024e578063ac9650d814610261576101bd565b806312210e8a146101c2578063414bf389146101ca5780634659a494146101f357806349404b7c14610206576101bd565b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101bb61033b565b6101dd6101d83660046129f8565b61034d565b6040516101ea9190612df1565b60405180910390f35b6101bb610201366004612776565b6104bf565b6101bb610214366004612aff565b61057f565b34801561022557600080fd5b5061022e610745565b6040516101ea9190612c37565b6101bb610249366004612b2e565b610769565b6101bb61025c366004612776565b610981565b61027461026f3660046127d6565b610a56565b6040516101ea9190612caa565b6101dd61028f36600461294d565b610bb0565b6101bb6102a2366004612776565b610d0f565b3480156102b357600080fd5b5061022e610dc4565b6101dd6102ca3660046129f8565b610de8565b6101bb6102dd3660046126d7565b610f78565b6101bb6102f0366004612718565b611095565b6101dd610303366004612a14565b6111fb565b6101bb610316366004612776565b61132f565b34801561032757600080fd5b506101bb610336366004612868565b6113c7565b471561034b5761034b334761150e565b565b600081608001358061035d61165c565b11156103ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61047060a08401356103e260808601606087016126b4565b6103f3610100870160e088016126b4565b604080518082019091528061040b60208a018a6126b4565b61041b60608b0160408c01612adc565b61042b60408c0160208d016126b4565b60405160200161043d93929190612bc1565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611660565b91508260c001358210156104b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d72565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561055f57600080fd5b505af1158015610573573d6000803e3d6000fd5b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561060857600080fd5b505afa15801561061c573d6000803e3d6000fd5b505050506040513d602081101561063257600080fd5b50519050828110156106a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610740577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561071e57600080fd5b505af1158015610732573d6000803e3d6000fd5b50505050610740828261150e565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008211801561077a575060648211155b61078357600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561080c57600080fd5b505afa158015610820573d6000803e3d6000fd5b505050506040513d602081101561083657600080fd5b50519050848110156108a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561097a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b50505050600061271061095285846117e690919063ffffffff16565b8161095957fe5b049050801561096c5761096c838261150e565b6109788582840361150e565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610a1657600080fd5b505afa158015610a2a573d6000803e3d6000fd5b505050506040513d6020811015610a4057600080fd5b50511015610978576109788686868686866104bf565b60608167ffffffffffffffff81118015610a6f57600080fd5b50604051908082528060200260200182016040528015610aa357816020015b6060815260200190600190039081610a8e5790505b50905060005b82811015610ba95760008030868685818110610ac157fe5b9050602002810190610ad39190612dfa565b604051610ae1929190612c27565b600060405180830381855af49150503d8060008114610b1c576040519150601f19603f3d011682016040523d82523d6000602084013e610b21565b606091505b509150915081610b8757604481511015610b3a57600080fd5b60048101905080806020019051810190610b5491906128e3565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b09190612d28565b80848481518110610b9457fe5b60209081029190910101525050600101610aa9565b5092915050565b6000816040015180610bc061165c565b1115610c2d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610c3e8560000151611810565b9050610c97856060015182610c57578660200151610c59565b305b60006040518060400160405280610c738b6000015161181c565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611660565b60608601528015610cb7578451309250610cb09061182b565b8552610cc4565b8460600151935050610cca565b50610c2f565b8360800151831015610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d72565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b505110156109785761097886868686868661132f565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000816080013580610df861165c565b1115610e6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b610f0e60a0840135610e7d60808601606087016126b4565b610e8e610100870160e088016126b4565b6040518060400160405280886020016020810190610eac91906126b4565b610ebc60608b0160408c01612adc565b610ec960208c018c6126b4565b604051602001610edb93929190612bc1565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611860565b91508260c00135821115610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fe157600080fd5b505afa158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b505190508281101561107e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561108f5761108f848383611a1c565b50505050565b6000821180156110a6575060648211155b6110af57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561111857600080fd5b505afa15801561112c573d6000803e3d6000fd5b505050506040513d602081101561114257600080fd5b50519050848110156111b557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156109785760006127106111ca83866117e6565b816111d157fe5b04905080156111e5576111e5878483611a1c565b6111f28786838503611a1c565b50505050505050565b600081604001358061120b61165c565b111561127857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6112eb606084013561129060408601602087016126b4565b60408051808201909152600090806112a88980612dfa565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611860565b5060005491508260800135821115610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d3b565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561055f57600080fd5b60008413806113d65750600083135b6113df57600080fd5b60006113ed82840184612a4c565b905060008060006114018460000151611bf1565b9250925092506114337f0000000000000000000000000000000000000000000000000000000000000000848484611c22565b5060008060008a13611474578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896114a5565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b9150915081156114c4576114bf8587602001513384611c41565b610573565b85516114cf90611810565b156114f45785516114df9061182b565b86526114ee8133600089611860565b50610573565b806000819055508394506105738587602001513384611c41565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061158557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611548565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146115e7576040519150601f19603f3d011682016040523d82523d6000602084013e6115ec565b606091505b505090508061074057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b4290565b600073ffffffffffffffffffffffffffffffffffffffff8416611681573093505b60008060006116938560000151611bf1565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806116c4868686611e1f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856116ea8f611e5d565b73ffffffffffffffffffffffffffffffffffffffff8e161561170c578d611732565b8761172b5773fffd8963efd1fc6a506488495d951d5263988d25611732565b6401000276a45b8d6040516020016117439190612da9565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611772959493929190612c58565b6040805180830381600087803b15801561178b57600080fd5b505af115801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c39190612845565b91509150826117d257816117d4565b805b6000039b9a5050505050505050505050565b6000821580611801575050818102818382816117fe57fe5b04145b61180a57600080fd5b92915050565b8051604211155b919050565b606061180a826000602b611e8f565b805160609061180a9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901611e8f565b600073ffffffffffffffffffffffffffffffffffffffff8416611881573093505b60008060006118938560000151611bf1565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806118c4858786611e1f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856118ea8f611e5d565b60000373ffffffffffffffffffffffffffffffffffffffff8e161561190f578d611935565b8761192e5773fffd8963efd1fc6a506488495d951d5263988d25611935565b6401000276a45b8d6040516020016119469190612da9565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611975959493929190612c58565b6040805180830381600087803b15801561198e57600080fd5b505af11580156119a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c69190612845565b915091506000836119db5781836000036119e1565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16611a0d578b8114611a0d57600080fd5b50505050505050949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611af157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ab4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b53576040519150601f19603f3d011682016040523d82523d6000602084013e611b58565b606091505b5091509150818015611b86575080511580611b865750808060200190516020811015611b8357600080fd5b50515b61097a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008080611bff8482612076565b9250611c0c846014612176565b9050611c19846017612076565b91509193909250565b6000611c3885611c33868686612266565b6122e3565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c9c5750804710155b15611de5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611db357600080fd5b505af1158015611dc7573d6000803e3d6000fd5b505050506040513d6020811015611ddd57600080fd5b5061108f9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415611e1357611e0e848383611a1c565b61108f565b61108f84848484612313565b6000611e557f0000000000000000000000000000000000000000000000000000000000000000611e50868686612266565b6124f0565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210611e8b57600080fd5b5090565b60608182601f011015611f0357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015611f7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015611fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015612005576040519150600082526020820160405261206d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561203e578051835260209283019201612026565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000818260140110156120ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561215d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b6000818260030110156121ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561225d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b61226e612626565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1611156122a6579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b60006122ef83836124f0565b90503373ffffffffffffffffffffffffffffffffffffffff82161461180a57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106123f057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016123b3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612452576040519150601f19603f3d011682016040523d82523d6000602084013e612457565b606091505b5091509150818015612485575080511580612485575080806020019051602081101561248257600080fd5b50515b61097857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061253257600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b803561181781612ef4565b600082601f830112612661578081fd5b813561267461266f82612e88565b612e64565b818152846020838601011115612688578283fd5b816020850160208301379081016020019190915292915050565b600061010082840312156104b9578081fd5b6000602082840312156126c5578081fd5b81356126d081612ef4565b9392505050565b6000806000606084860312156126eb578182fd5b83356126f681612ef4565b925060208401359150604084013561270d81612ef4565b809150509250925092565b600080600080600060a0868803121561272f578081fd5b853561273a81612ef4565b945060208601359350604086013561275181612ef4565b925060608601359150608086013561276881612ef4565b809150509295509295909350565b60008060008060008060c0878903121561278e578081fd5b863561279981612ef4565b95506020870135945060408701359350606087013560ff811681146127bc578182fd5b9598949750929560808101359460a0909101359350915050565b600080602083850312156127e8578182fd5b823567ffffffffffffffff808211156127ff578384fd5b818501915085601f830112612812578384fd5b813581811115612820578485fd5b8660208083028501011115612833578485fd5b60209290920196919550909350505050565b60008060408385031215612857578182fd5b505080516020909101519092909150565b6000806000806060858703121561287d578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156128a2578384fd5b818701915087601f8301126128b5578384fd5b8135818111156128c3578485fd5b8860208285010111156128d4578485fd5b95989497505060200194505050565b6000602082840312156128f4578081fd5b815167ffffffffffffffff81111561290a578182fd5b8201601f8101841361291a578182fd5b805161292861266f82612e88565b81815285602083850101111561293c578384fd5b611c38826020830160208601612ec8565b60006020828403121561295e578081fd5b813567ffffffffffffffff80821115612975578283fd5b9083019060a08286031215612988578283fd5b60405160a08101818110838211171561299d57fe5b6040528235828111156129ae578485fd5b6129ba87828601612651565b8252506129c960208401612646565b602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60006101008284031215612a0a578081fd5b6126d083836126a2565b600060208284031215612a25578081fd5b813567ffffffffffffffff811115612a3b578182fd5b820160a081850312156126d0578182fd5b600060208284031215612a5d578081fd5b813567ffffffffffffffff80821115612a74578283fd5b9083019060408286031215612a87578283fd5b604051604081018181108382111715612a9c57fe5b604052823582811115612aad578485fd5b612ab987828601612651565b82525060208301359250612acc83612ef4565b6020810192909252509392505050565b600060208284031215612aed578081fd5b813562ffffff811681146126d0578182fd5b60008060408385031215612b11578182fd5b823591506020830135612b2381612ef4565b809150509250929050565b60008060008060808587031215612b43578182fd5b843593506020850135612b5581612ef4565b9250604085013591506060850135612b6c81612ef4565b939692955090935050565b60008151808452612b8f816020860160208601612ec8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152612c9f60a0830184612b77565b979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612d1b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d09858351612b77565b94509285019290850190600101612ccf565b5092979650505050505050565b6000602082526126d06020830184612b77565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060208252825160406020840152612dc56060840182612b77565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e2e578283fd5b83018035915067ffffffffffffffff821115612e48578283fd5b602001915036819003821315612e5d57600080fd5b9250929050565b60405181810167ffffffffffffffff81118282101715612e8057fe5b604052919050565b600067ffffffffffffffff821115612e9c57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612ee3578181015183820152602001612ecb565b8381111561108f5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612f1657600080fd5b5056fea164736f6c6343000706000a'; } } diff --git a/src/briefcase/deployers/v3-periphery/TickLensDeployer.sol b/src/briefcase/deployers/v3-periphery/TickLensDeployer.sol index 1ebd3865..69c25027 100644 --- a/src/briefcase/deployers/v3-periphery/TickLensDeployer.sol +++ b/src/briefcase/deployers/v3-periphery/TickLensDeployer.sol @@ -21,6 +21,7 @@ library TickLensDeployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'608060405234801561001057600080fd5b50610569806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063351fb47814610030575b600080fd5b61004361003e36600461037c565b610059565b60405161005091906104aa565b60405180910390f35b606060008373ffffffffffffffffffffffffffffffffffffffff16635339c296846040518263ffffffff1660e01b8152600401610096919061051b565b60206040518083038186803b1580156100ae57600080fd5b505afa1580156100c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e69190610492565b90506000805b610100811015610110576001811b831615610108576001909101905b6001016100ec565b5060008573ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561015957600080fd5b505afa15801561016d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019191906103ba565b90508167ffffffffffffffff811180156101aa57600080fd5b506040519080825280602002602001820160405280156101e457816020015b6101d1610328565b8152602001906001900390816101c95790505b50935060005b61010081101561031e576001811b841615610316576040517ff30dba93000000000000000000000000000000000000000000000000000000008152600187900b60020b60081b8201830290600090819073ffffffffffffffffffffffffffffffffffffffff8b169063f30dba9390610266908690600401610529565b6101006040518083038186803b15801561027f57600080fd5b505afa158015610293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b791906103e2565b5050505050509150915060405180606001604052808460020b815260200182600f0b8152602001836fffffffffffffffffffffffffffffffff168152508887600190039750878151811061030757fe5b60200260200101819052505050505b6001016101ea565b5050505092915050565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461035857600080fd5b919050565b805161035881610537565b805163ffffffff8116811461035857600080fd5b6000806040838503121561038e578182fd5b823561039981610537565b91506020830135600181900b81146103af578182fd5b809150509250929050565b6000602082840312156103cb578081fd5b81518060020b81146103db578182fd5b9392505050565b600080600080600080600080610100898b0312156103fe578384fd5b88516fffffffffffffffffffffffffffffffff8116811461041d578485fd5b80985050602089015180600f0b8114610434578485fd5b80975050604089015195506060890151945060808901518060060b8114610459578485fd5b935061046760a08a0161035d565b925061047560c08a01610368565b915061048360e08a01610348565b90509295985092959890939650565b6000602082840312156104a3578081fd5b5051919050565b602080825282518282018190526000919060409081850190868401855b8281101561050e578151805160020b855286810151600f0b878601528501516fffffffffffffffffffffffffffffffff1685850152606090930192908501906001016104c7565b5091979650505050505050565b60019190910b815260200190565b60029190910b815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461055957600080fd5b5056fea164736f6c6343000706000a'; + return + hex'608060405234801561001057600080fd5b50610569806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063351fb47814610030575b600080fd5b61004361003e36600461037c565b610059565b60405161005091906104aa565b60405180910390f35b606060008373ffffffffffffffffffffffffffffffffffffffff16635339c296846040518263ffffffff1660e01b8152600401610096919061051b565b60206040518083038186803b1580156100ae57600080fd5b505afa1580156100c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e69190610492565b90506000805b610100811015610110576001811b831615610108576001909101905b6001016100ec565b5060008573ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561015957600080fd5b505afa15801561016d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019191906103ba565b90508167ffffffffffffffff811180156101aa57600080fd5b506040519080825280602002602001820160405280156101e457816020015b6101d1610328565b8152602001906001900390816101c95790505b50935060005b61010081101561031e576001811b841615610316576040517ff30dba93000000000000000000000000000000000000000000000000000000008152600187900b60020b60081b8201830290600090819073ffffffffffffffffffffffffffffffffffffffff8b169063f30dba9390610266908690600401610529565b6101006040518083038186803b15801561027f57600080fd5b505afa158015610293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b791906103e2565b5050505050509150915060405180606001604052808460020b815260200182600f0b8152602001836fffffffffffffffffffffffffffffffff168152508887600190039750878151811061030757fe5b60200260200101819052505050505b6001016101ea565b5050505092915050565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461035857600080fd5b919050565b805161035881610537565b805163ffffffff8116811461035857600080fd5b6000806040838503121561038e578182fd5b823561039981610537565b91506020830135600181900b81146103af578182fd5b809150509250929050565b6000602082840312156103cb578081fd5b81518060020b81146103db578182fd5b9392505050565b600080600080600080600080610100898b0312156103fe578384fd5b88516fffffffffffffffffffffffffffffffff8116811461041d578485fd5b80985050602089015180600f0b8114610434578485fd5b80975050604089015195506060890151945060808901518060060b8114610459578485fd5b935061046760a08a0161035d565b925061047560c08a01610368565b915061048360e08a01610348565b90509295985092959890939650565b6000602082840312156104a3578081fd5b5051919050565b602080825282518282018190526000919060409081850190868401855b8281101561050e578151805160020b855286810151600f0b878601528501516fffffffffffffffffffffffffffffffff1685850152606090930192908501906001016104c7565b5091979650505050505050565b60019190910b815260200190565b60029190910b815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461055957600080fd5b5056fea164736f6c6343000706000a'; } } diff --git a/src/briefcase/deployers/v3-periphery/UniswapInterfaceMulticallDeployer.sol b/src/briefcase/deployers/v3-periphery/UniswapInterfaceMulticallDeployer.sol index 729225f2..ecda21df 100644 --- a/src/briefcase/deployers/v3-periphery/UniswapInterfaceMulticallDeployer.sol +++ b/src/briefcase/deployers/v3-periphery/UniswapInterfaceMulticallDeployer.sol @@ -20,6 +20,7 @@ library UniswapInterfaceMulticallDeployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'608060405234801561001057600080fd5b50610567806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630f28c97d146100465780631749e1e3146100645780634d2301cc14610085575b600080fd5b61004e610098565b60405161005b919061041f565b60405180910390f35b6100776100723660046102a7565b61009c565b60405161005b929190610428565b61004e610093366004610286565b610220565b4290565b8051439060609067ffffffffffffffff811180156100b957600080fd5b506040519080825280602002602001820160405280156100f357816020015b6100e061023a565b8152602001906001900390816100d85790505b50905060005b835181101561021a57600080600086848151811061011357fe5b60200260200101516000015187858151811061012b57fe5b60200260200101516020015188868151811061014357fe5b60200260200101516040015192509250925060005a90506000808573ffffffffffffffffffffffffffffffffffffffff1685856040516101839190610403565b60006040518083038160008787f1925050503d80600081146101c1576040519150601f19603f3d011682016040523d82523d6000602084013e6101c6565b606091505b509150915060005a8403905060405180606001604052808415158152602001828152602001838152508989815181106101fb57fe5b60200260200101819052505050505050505080806001019150506100f9565b50915091565b73ffffffffffffffffffffffffffffffffffffffff163190565b604051806060016040528060001515815260200160008152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff8116811461028157600080fd5b919050565b600060208284031215610297578081fd5b6102a08261025d565b9392505050565b600060208083850312156102b9578182fd5b823567ffffffffffffffff808211156102d0578384fd5b818501915085601f8301126102e3578384fd5b8135818111156102ef57fe5b6102fc8485830201610506565b81815284810190848601875b848110156103f457813587017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0606081838f03011215610346578a8bfd5b60408051606081018181108b8211171561035c57fe5b8252610369848d0161025d565b8152818401358c82015260608401358a811115610384578d8efd5b8085019450508e603f850112610398578c8dfd5b8b8401358a8111156103a657fe5b6103b68d85601f84011601610506565b93508084528f838287010111156103cb578d8efd5b808386018e86013783018c018d9052908101919091528552509287019290870190600101610308565b50909998505050505050505050565b6000825161041581846020870161052a565b9190910192915050565b90815260200190565b600060408083018584526020828186015281865180845260609350838701915083838202880101838901875b838110156104f6578983037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa001855281518051151584528681015187850152880151888401889052805188850181905260806104b582828801858c0161052a565b96880196601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01694909401909301925090850190600101610454565b50909a9950505050505050505050565b60405181810167ffffffffffffffff8111828210171561052257fe5b604052919050565b60005b8381101561054557818101518382015260200161052d565b83811115610554576000848401525b5050505056fea164736f6c6343000706000a'; + return + hex'608060405234801561001057600080fd5b50610567806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630f28c97d146100465780631749e1e3146100645780634d2301cc14610085575b600080fd5b61004e610098565b60405161005b919061041f565b60405180910390f35b6100776100723660046102a7565b61009c565b60405161005b929190610428565b61004e610093366004610286565b610220565b4290565b8051439060609067ffffffffffffffff811180156100b957600080fd5b506040519080825280602002602001820160405280156100f357816020015b6100e061023a565b8152602001906001900390816100d85790505b50905060005b835181101561021a57600080600086848151811061011357fe5b60200260200101516000015187858151811061012b57fe5b60200260200101516020015188868151811061014357fe5b60200260200101516040015192509250925060005a90506000808573ffffffffffffffffffffffffffffffffffffffff1685856040516101839190610403565b60006040518083038160008787f1925050503d80600081146101c1576040519150601f19603f3d011682016040523d82523d6000602084013e6101c6565b606091505b509150915060005a8403905060405180606001604052808415158152602001828152602001838152508989815181106101fb57fe5b60200260200101819052505050505050505080806001019150506100f9565b50915091565b73ffffffffffffffffffffffffffffffffffffffff163190565b604051806060016040528060001515815260200160008152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff8116811461028157600080fd5b919050565b600060208284031215610297578081fd5b6102a08261025d565b9392505050565b600060208083850312156102b9578182fd5b823567ffffffffffffffff808211156102d0578384fd5b818501915085601f8301126102e3578384fd5b8135818111156102ef57fe5b6102fc8485830201610506565b81815284810190848601875b848110156103f457813587017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0606081838f03011215610346578a8bfd5b60408051606081018181108b8211171561035c57fe5b8252610369848d0161025d565b8152818401358c82015260608401358a811115610384578d8efd5b8085019450508e603f850112610398578c8dfd5b8b8401358a8111156103a657fe5b6103b68d85601f84011601610506565b93508084528f838287010111156103cb578d8efd5b808386018e86013783018c018d9052908101919091528552509287019290870190600101610308565b50909998505050505050505050565b6000825161041581846020870161052a565b9190910192915050565b90815260200190565b600060408083018584526020828186015281865180845260609350838701915083838202880101838901875b838110156104f6578983037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa001855281518051151584528681015187850152880151888401889052805188850181905260806104b582828801858c0161052a565b96880196601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01694909401909301925090850190600101610454565b50909a9950505050505050505050565b60405181810167ffffffffffffffff8111828210171561052257fe5b604052919050565b60005b8381101561054557818101518382015260200161052d565b83811115610554576000848401525b5050505056fea164736f6c6343000706000a'; } } diff --git a/src/briefcase/deployers/v3-periphery/V3MigratorDeployer.sol b/src/briefcase/deployers/v3-periphery/V3MigratorDeployer.sol index 9e106d5f..6ae24d66 100644 --- a/src/briefcase/deployers/v3-periphery/V3MigratorDeployer.sol +++ b/src/briefcase/deployers/v3-periphery/V3MigratorDeployer.sol @@ -25,6 +25,7 @@ library V3MigratorDeployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'60e06040523480156200001157600080fd5b5060405162001f4238038062001f42833981016040819052620000349162000079565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c2565b80516001600160a01b03811681146200007457600080fd5b919050565b6000806000606084860312156200008e578283fd5b62000099846200005c565b9250620000a9602085016200005c565b9150620000b9604085016200005c565b90509250925092565b60805160601c60a05160601c60c05160601c611e146200012e6000398061090d5280610c4c5280610c865280610cb05280610e8d52508060d252806106b25280610ee65280610f70528061105852806110e2525080610269528061036452806109e65250611e146000f3fe6080604052600436106100b55760003560e01c8063b44a272211610069578063c45a01551161004e578063c45a0155146101e5578063d44f2bf2146101fa578063f3995c671461021a57610134565b8063b44a2722146101bd578063c2e3140a146101d257610134565b80634aa4a4fc1161009a5780634aa4a4fc14610175578063a4a78f0c1461018a578063ac9650d81461019d57610134565b806313ead562146101395780634659a4941461016257610134565b36610134573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c15565b60405180910390fd5b005b600080fd5b61014c610147366004611788565b61022d565b6040516101599190611afb565b60405180910390f35b6101326101703660046117e1565b6105f0565b34801561018157600080fd5b5061014c6106b0565b6101326101983660046117e1565b6106d4565b6101b06101ab36600461183a565b6107b1565b6040516101599190611b4d565b3480156101c957600080fd5b5061014c61090b565b6101326101e03660046117e1565b61092f565b3480156101f157600080fd5b5061014c6109e4565b34801561020657600080fd5b506101326102153660046119b7565b610a08565b6101326102283660046117e1565b611176565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161061026757600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631698ee828686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff168152602001935050505060206040518083038186803b15801561031957600080fd5b505afa15801561032d573d6000803e3d6000fd5b505050506040513d602081101561034357600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166104d3577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a16712958686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff1681526020019350505050602060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b505050506040513d602081101561044057600080fd5b5051604080517ff637731d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b1580156104b657600080fd5b505af11580156104ca573d6000803e3d6000fd5b505050506105e8565b60008173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561051b57600080fd5b505afa15801561052f573d6000803e3d6000fd5b505050506040513d60e081101561054557600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166105e6578173ffffffffffffffffffffffffffffffffffffffff1663f637731d846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156105cd57600080fd5b505af11580156105e1573d6000803e3d6000fd5b505050505b505b949350505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561076957600080fd5b505afa15801561077d573d6000803e3d6000fd5b505050506040513d602081101561079357600080fd5b505110156107a9576107a98686868686866105f0565b505050505050565b60608167ffffffffffffffff811180156107ca57600080fd5b506040519080825280602002602001820160405280156107fe57816020015b60608152602001906001900390816107e95790505b50905060005b82811015610904576000803086868581811061081c57fe5b905060200281019061082e9190611d3a565b60405161083c929190611aeb565b600060405180830381855af49150503d8060008114610877576040519150601f19603f3d011682016040523d82523d6000602084013e61087c565b606091505b5091509150816108e25760448151101561089557600080fd5b600481019050808060200190518101906108af9190611902565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101299190611bcb565b808484815181106108ef57fe5b60209081029190910101525050600101610804565b5092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b1580156109a457600080fd5b505afa1580156109b8573d6000803e3d6000fd5b505050506040513d60208110156109ce57600080fd5b505110156107a9576107a9868686868686611176565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610a1a6060830160408401611a5d565b60ff1611610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611bde565b6064610a666060830160408401611a5d565b60ff161115610aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c4c565b610aae6020820182611765565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd33610ad76020850185611765565b84602001356040518463ffffffff1660e01b8152600401610afa93929190611b1c565b602060405180830381600087803b158015610b1457600080fd5b505af1158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c91906118c5565b50600080610b5d6020840184611765565b73ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b8152600401610b959190611afb565b6040805180830381600087803b158015610bae57600080fd5b505af1158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611a3a565b909250905060006064610c0c610c026060870160408801611a5d565b859060ff1661120e565b81610c1357fe5b04905060006064610c2d610c026060880160408901611a5d565b81610c3457fe5b049050610c71610c4a6080870160608801611765565b7f000000000000000000000000000000000000000000000000000000000000000084611238565b610cab610c8460a0870160808801611765565b7f000000000000000000000000000000000000000000000000000000000000000083611238565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663883164566040518061016001604052808a6060016020810190610d099190611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3460a08c0160808d01611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d5f60c08c0160a08d016119cf565b62ffffff168152602001610d7960e08c0160c08d016118e1565b60020b8152602001610d926101008c0160e08d016118e1565b60020b815260208101889052604081018790526101008b013560608201526101208b0135608082015260a001610dd06101608c016101408d01611765565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a61016001358152506040518263ffffffff1660e01b8152600401610e109190611c83565b608060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6291906119e9565b935093505050858210156110025783821015610eb357610eb3610e8b6080890160608a01611765565b7f00000000000000000000000000000000000000000000000000000000000000006000611238565b818603610ec86101a089016101808a016118a9565b8015610f2e575073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1660808a0160608b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15610fe6576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90610fa5908490600401611d31565b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b50505050610fe13382611414565b611000565b611000610ff960808a0160608b01611765565b3383611567565b505b8481101561116d578281101561102557611025610e8b60a0890160808a01611765565b80850361103a6101a089016101808a016118a9565b80156110a0575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661108860a08a0160808b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15611158576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90611117908490600401611d31565b600060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505050506111533382611414565b61116b565b61116b610ff960a08a0160808b01611765565b505b50505050505050565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561069057600080fd5b60008215806112295750508181028183828161122657fe5b04145b61123257600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061130d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016112d0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461136f576040519150601f19603f3d011682016040523d82523d6000602084013e611374565b606091505b50915091508180156113a25750805115806113a2575080806020019051602081101561139f57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061148b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161144e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114ed576040519150601f19603f3d011682016040523d82523d6000602084013e6114f2565b606091505b505090508061156257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061163c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115ff565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461169e576040519150601f19603f3d011682016040523d82523d6000602084013e6116a3565b606091505b50915091508180156116d15750805115806116d157508080602001905160208110156116ce57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b803562ffffff8116811461174f57600080fd5b919050565b803560ff8116811461174f57600080fd5b600060208284031215611776578081fd5b813561178181611dd4565b9392505050565b6000806000806080858703121561179d578283fd5b84356117a881611dd4565b935060208501356117b881611dd4565b92506117c66040860161173c565b915060608501356117d681611dd4565b939692955090935050565b60008060008060008060c087890312156117f9578182fd5b863561180481611dd4565b9550602087013594506040870135935061182060608801611754565b92506080870135915060a087013590509295509295509295565b6000806020838503121561184c578182fd5b823567ffffffffffffffff80821115611863578384fd5b818501915085601f830112611876578384fd5b813581811115611884578485fd5b8660208083028501011115611897578485fd5b60209290920196919550909350505050565b6000602082840312156118ba578081fd5b813561178181611df9565b6000602082840312156118d6578081fd5b815161178181611df9565b6000602082840312156118f2578081fd5b81358060020b8114611781578182fd5b600060208284031215611913578081fd5b815167ffffffffffffffff8082111561192a578283fd5b818401915084601f83011261193d578283fd5b81518181111561194957fe5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116820101818110848211171561198557fe5b60405281815283820160200187101561199c578485fd5b6119ad826020830160208701611da4565b9695505050505050565b60006101a082840312156119c9578081fd5b50919050565b6000602082840312156119e0578081fd5b6117818261173c565b600080600080608085870312156119fe578384fd5b8451935060208501516fffffffffffffffffffffffffffffffff81168114611a24578384fd5b6040860151606090960151949790965092505050565b60008060408385031215611a4c578182fd5b505080516020909101519092909150565b600060208284031215611a6e578081fd5b61178182611754565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452611aa9816020860160208601611da4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611bbe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452611bac858351611a91565b94509285019290850190600101611b72565b5092979650505050505050565b6000602082526117816020830184611a91565b60208082526014908201527f50657263656e7461676520746f6f20736d616c6c000000000000000000000000604082015260600190565b60208082526009908201527f4e6f742057455448390000000000000000000000000000000000000000000000604082015260600190565b60208082526014908201527f50657263656e7461676520746f6f206c61726765000000000000000000000000604082015260600190565b600061016082019050611c97828451611a77565b6020830151611ca96020840182611a77565b506040830151611cbc6040840182611ae2565b506060830151611ccf6060840182611adb565b506080830151611ce26080840182611adb565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151611d2082850182611a77565b505061014092830151919092015290565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611d6e578283fd5b83018035915067ffffffffffffffff821115611d88578283fd5b602001915036819003821315611d9d57600080fd5b9250929050565b60005b83811015611dbf578181015183820152602001611da7565b83811115611dce576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611df657600080fd5b50565b8015158114611df657600080fdfea164736f6c6343000706000a'; + return + hex'60e06040523480156200001157600080fd5b5060405162001f4238038062001f42833981016040819052620000349162000079565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c2565b80516001600160a01b03811681146200007457600080fd5b919050565b6000806000606084860312156200008e578283fd5b62000099846200005c565b9250620000a9602085016200005c565b9150620000b9604085016200005c565b90509250925092565b60805160601c60a05160601c60c05160601c611e146200012e6000398061090d5280610c4c5280610c865280610cb05280610e8d52508060d252806106b25280610ee65280610f70528061105852806110e2525080610269528061036452806109e65250611e146000f3fe6080604052600436106100b55760003560e01c8063b44a272211610069578063c45a01551161004e578063c45a0155146101e5578063d44f2bf2146101fa578063f3995c671461021a57610134565b8063b44a2722146101bd578063c2e3140a146101d257610134565b80634aa4a4fc1161009a5780634aa4a4fc14610175578063a4a78f0c1461018a578063ac9650d81461019d57610134565b806313ead562146101395780634659a4941461016257610134565b36610134573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c15565b60405180910390fd5b005b600080fd5b61014c610147366004611788565b61022d565b6040516101599190611afb565b60405180910390f35b6101326101703660046117e1565b6105f0565b34801561018157600080fd5b5061014c6106b0565b6101326101983660046117e1565b6106d4565b6101b06101ab36600461183a565b6107b1565b6040516101599190611b4d565b3480156101c957600080fd5b5061014c61090b565b6101326101e03660046117e1565b61092f565b3480156101f157600080fd5b5061014c6109e4565b34801561020657600080fd5b506101326102153660046119b7565b610a08565b6101326102283660046117e1565b611176565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161061026757600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631698ee828686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff168152602001935050505060206040518083038186803b15801561031957600080fd5b505afa15801561032d573d6000803e3d6000fd5b505050506040513d602081101561034357600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166104d3577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a16712958686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff1681526020019350505050602060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b505050506040513d602081101561044057600080fd5b5051604080517ff637731d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b1580156104b657600080fd5b505af11580156104ca573d6000803e3d6000fd5b505050506105e8565b60008173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561051b57600080fd5b505afa15801561052f573d6000803e3d6000fd5b505050506040513d60e081101561054557600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166105e6578173ffffffffffffffffffffffffffffffffffffffff1663f637731d846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156105cd57600080fd5b505af11580156105e1573d6000803e3d6000fd5b505050505b505b949350505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561076957600080fd5b505afa15801561077d573d6000803e3d6000fd5b505050506040513d602081101561079357600080fd5b505110156107a9576107a98686868686866105f0565b505050505050565b60608167ffffffffffffffff811180156107ca57600080fd5b506040519080825280602002602001820160405280156107fe57816020015b60608152602001906001900390816107e95790505b50905060005b82811015610904576000803086868581811061081c57fe5b905060200281019061082e9190611d3a565b60405161083c929190611aeb565b600060405180830381855af49150503d8060008114610877576040519150601f19603f3d011682016040523d82523d6000602084013e61087c565b606091505b5091509150816108e25760448151101561089557600080fd5b600481019050808060200190518101906108af9190611902565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101299190611bcb565b808484815181106108ef57fe5b60209081029190910101525050600101610804565b5092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b1580156109a457600080fd5b505afa1580156109b8573d6000803e3d6000fd5b505050506040513d60208110156109ce57600080fd5b505110156107a9576107a9868686868686611176565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610a1a6060830160408401611a5d565b60ff1611610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611bde565b6064610a666060830160408401611a5d565b60ff161115610aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c4c565b610aae6020820182611765565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd33610ad76020850185611765565b84602001356040518463ffffffff1660e01b8152600401610afa93929190611b1c565b602060405180830381600087803b158015610b1457600080fd5b505af1158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c91906118c5565b50600080610b5d6020840184611765565b73ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b8152600401610b959190611afb565b6040805180830381600087803b158015610bae57600080fd5b505af1158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611a3a565b909250905060006064610c0c610c026060870160408801611a5d565b859060ff1661120e565b81610c1357fe5b04905060006064610c2d610c026060880160408901611a5d565b81610c3457fe5b049050610c71610c4a6080870160608801611765565b7f000000000000000000000000000000000000000000000000000000000000000084611238565b610cab610c8460a0870160808801611765565b7f000000000000000000000000000000000000000000000000000000000000000083611238565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663883164566040518061016001604052808a6060016020810190610d099190611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3460a08c0160808d01611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d5f60c08c0160a08d016119cf565b62ffffff168152602001610d7960e08c0160c08d016118e1565b60020b8152602001610d926101008c0160e08d016118e1565b60020b815260208101889052604081018790526101008b013560608201526101208b0135608082015260a001610dd06101608c016101408d01611765565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a61016001358152506040518263ffffffff1660e01b8152600401610e109190611c83565b608060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6291906119e9565b935093505050858210156110025783821015610eb357610eb3610e8b6080890160608a01611765565b7f00000000000000000000000000000000000000000000000000000000000000006000611238565b818603610ec86101a089016101808a016118a9565b8015610f2e575073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1660808a0160608b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15610fe6576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90610fa5908490600401611d31565b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b50505050610fe13382611414565b611000565b611000610ff960808a0160608b01611765565b3383611567565b505b8481101561116d578281101561102557611025610e8b60a0890160808a01611765565b80850361103a6101a089016101808a016118a9565b80156110a0575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661108860a08a0160808b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15611158576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90611117908490600401611d31565b600060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505050506111533382611414565b61116b565b61116b610ff960a08a0160808b01611765565b505b50505050505050565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561069057600080fd5b60008215806112295750508181028183828161122657fe5b04145b61123257600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061130d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016112d0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461136f576040519150601f19603f3d011682016040523d82523d6000602084013e611374565b606091505b50915091508180156113a25750805115806113a2575080806020019051602081101561139f57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061148b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161144e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114ed576040519150601f19603f3d011682016040523d82523d6000602084013e6114f2565b606091505b505090508061156257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061163c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115ff565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461169e576040519150601f19603f3d011682016040523d82523d6000602084013e6116a3565b606091505b50915091508180156116d15750805115806116d157508080602001905160208110156116ce57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b803562ffffff8116811461174f57600080fd5b919050565b803560ff8116811461174f57600080fd5b600060208284031215611776578081fd5b813561178181611dd4565b9392505050565b6000806000806080858703121561179d578283fd5b84356117a881611dd4565b935060208501356117b881611dd4565b92506117c66040860161173c565b915060608501356117d681611dd4565b939692955090935050565b60008060008060008060c087890312156117f9578182fd5b863561180481611dd4565b9550602087013594506040870135935061182060608801611754565b92506080870135915060a087013590509295509295509295565b6000806020838503121561184c578182fd5b823567ffffffffffffffff80821115611863578384fd5b818501915085601f830112611876578384fd5b813581811115611884578485fd5b8660208083028501011115611897578485fd5b60209290920196919550909350505050565b6000602082840312156118ba578081fd5b813561178181611df9565b6000602082840312156118d6578081fd5b815161178181611df9565b6000602082840312156118f2578081fd5b81358060020b8114611781578182fd5b600060208284031215611913578081fd5b815167ffffffffffffffff8082111561192a578283fd5b818401915084601f83011261193d578283fd5b81518181111561194957fe5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116820101818110848211171561198557fe5b60405281815283820160200187101561199c578485fd5b6119ad826020830160208701611da4565b9695505050505050565b60006101a082840312156119c9578081fd5b50919050565b6000602082840312156119e0578081fd5b6117818261173c565b600080600080608085870312156119fe578384fd5b8451935060208501516fffffffffffffffffffffffffffffffff81168114611a24578384fd5b6040860151606090960151949790965092505050565b60008060408385031215611a4c578182fd5b505080516020909101519092909150565b600060208284031215611a6e578081fd5b61178182611754565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452611aa9816020860160208601611da4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611bbe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452611bac858351611a91565b94509285019290850190600101611b72565b5092979650505050505050565b6000602082526117816020830184611a91565b60208082526014908201527f50657263656e7461676520746f6f20736d616c6c000000000000000000000000604082015260600190565b60208082526009908201527f4e6f742057455448390000000000000000000000000000000000000000000000604082015260600190565b60208082526014908201527f50657263656e7461676520746f6f206c61726765000000000000000000000000604082015260600190565b600061016082019050611c97828451611a77565b6020830151611ca96020840182611a77565b506040830151611cbc6040840182611ae2565b506060830151611ccf6060840182611adb565b506080830151611ce26080840182611adb565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151611d2082850182611a77565b505061014092830151919092015290565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611d6e578283fd5b83018035915067ffffffffffffffff821115611d88578283fd5b602001915036819003821315611d9d57600080fd5b9250929050565b60005b83811015611dbf578181015183820152602001611da7565b83811115611dce576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611df657600080fd5b50565b8015158114611df657600080fdfea164736f6c6343000706000a'; } } diff --git a/src/briefcase/deployers/v4-core/PoolManagerDeployer.sol b/src/briefcase/deployers/v4-core/PoolManagerDeployer.sol index 66523e30..6cd01672 100644 --- a/src/briefcase/deployers/v4-core/PoolManagerDeployer.sol +++ b/src/briefcase/deployers/v4-core/PoolManagerDeployer.sol @@ -22,6 +22,7 @@ library PoolManagerDeployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'60a03460a057601f615e8238819003918201601f19168301916001600160401b0383118484101760a45780849260209460405283398101031260a057516001600160a01b0381169081900360a0575f80546001600160a01b0319168217815560405191907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a330608052615dc990816100b98239608051816135260152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60a0806040526004361015610012575f80fd5b5f3560e01c908162fdd58e14612cd55750806301ffc9a714612c16578063095bcdb614612b6c5780630b0d9c0914612ae057806311da60b414612a85578063156e29f6146129d55780631e2eaeaf1461299b578063234266d7146126fc5780632d7713891461265157806335fd631a146125dd5780633dd45adb14612579578063426a8493146124f557806348c894911461226a5780635275965114612152578063558a72971461207b578063598af9e714611fe35780635a6bcfda1461144f5780636276cbbe14610f965780637e87ce7d14610e5957806380f0b44c14610d875780638161b87414610c315780638da5cb5b14610be157806397e8cd4e14610b7e5780639bf6645f14610b31578063a584119414610a66578063b6363cf2146109d5578063dbd035ff1461097f578063f02de3b21461092e578063f135baaa146108f4578063f2fde38b14610848578063f3cd914c146104ff578063f5298aca146103345763fe99049a14610186575f80fd5b346103305760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576101bd612d3f565b6101c5612d62565b90604435917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885961027973ffffffffffffffffffffffffffffffffffffffff80606435951693843314158061030d575b610287575b845f52600460205260405f20875f5260205260405f2061023a878254612fed565b90551693845f52600460205260405f20865f5260205260405f2061025f828254612ffa565b905560408051338152602081019290925290918291820190565b0390a4602060405160018152f35b845f52600560205260405f208233165f5260205260405f20875f5260205260405f2054867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036102da575b5050610219565b6102e391612fed565b855f52600560205260405f208333165f5260205260405f20885f5260205260405f20555f866102d3565b50845f52600360205260405f208233165f5260205260ff60405f20541615610214565b5f80fd5b346103305761034236612d85565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d7577f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac7288596103ed73ffffffffffffffffffffffffffffffffffffffff805f9516956103bb6103b3866130aa565b3390896130f0565b169233841415806104a0575b6103f2575b8385526004602052604085208686526020526040852061025f828254612fed565b0390a4005b83855260056020526040852073ffffffffffffffffffffffffffffffffffffffff33168652602052604085208686526020526040852054817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610459575b50506103cc565b61046291612fed565b84865260056020526040862073ffffffffffffffffffffffffffffffffffffffff331687526020526040862087875260205260408620558681610452565b5083855260036020526040852073ffffffffffffffffffffffffffffffffffffffff3316865260205260ff604086205416156103c7565b7f54e3ca0d000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610330576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305761053836612e81565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c360112610330576040519061056f82612df6565b60a4358015158103610330578252602082019060c435825260e4359073ffffffffffffffffffffffffffffffffffffffff8216820361033057604084019182526101043567ffffffffffffffff8111610330576105d0903690600401612f4d565b9290937fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d75761060261350f565b51156108205760a0822092835f52600660205260405f209061062382613576565b60808401958482828a8a5173ffffffffffffffffffffffffffffffffffffffff169361064e94613b44565b90949195606088015160020b908b511515905173ffffffffffffffffffffffffffffffffffffffff1691604051986106858a612e12565b895260208901526040880152606087015262ffffff166080860152885115155f149862ffffff6107a2986106db61078f9860209d6108005773ffffffffffffffffffffffffffffffffffffffff8b511695614959565b9492968291926107d3575b505073ffffffffffffffffffffffffffffffffffffffff845116938e6fffffffffffffffffffffffffffffffff60408301511691015160020b90604051958860801d600f0b875288600f0b60208801526040870152606086015260808501521660a08301527f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f60c03393a38673ffffffffffffffffffffffffffffffffffffffff8a5116613d81565b809491946107aa575b5050823391613652565b604051908152f35b73ffffffffffffffffffffffffffffffffffffffff6107cc9251169083613652565b8480610798565b73ffffffffffffffffffffffffffffffffffffffff165f5260018f5260405f209081540190558e806106e6565b73ffffffffffffffffffffffffffffffffffffffff8e8c01511695614959565b7fbe8b8507000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330577fffffffffffffffffffffffff00000000000000000000000000000000000000006108a0612d3f565b73ffffffffffffffffffffffffffffffffffffffff5f54916108c58284163314613007565b1691829116175f55337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576004355c5f5260205ff35b34610330575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346103305761098d36612f7b565b6040519160408360208152836020820152019160051b8301916020806040850193925b83355481520191019084838210156109cc5750602080916109b0565b60408186030190f35b346103305760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610a0c612d3f565b73ffffffffffffffffffffffffffffffffffffffff610a29612d62565b91165f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610a9d612d3f565b73ffffffffffffffffffffffffffffffffffffffff81169081610ae15750505f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d005b610aea90613a92565b907f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d005b3461033057610b3f36612f7b565b6040519160408360208152836020820152019160051b8301916020806040850193925b83355c81520191019084838210156109cc575060208091610b62565b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305773ffffffffffffffffffffffffffffffffffffffff610bca612d3f565b165f526001602052602060405f2054604051908152f35b34610330575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346103305760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610c68612d3f565b610c70612d62565b60443573ffffffffffffffffffffffffffffffffffffffff600254163303610d5f5773ffffffffffffffffffffffffffffffffffffffff821680151580610d1f575b610cf7576020936107a29280610cef5750815f526001855260405f20549384925b5f526001865260405f20610ce8848254612fed565b90556131f8565b938492610cd3565b7fc79e5948000000000000000000000000000000000000000000000000000000005f5260045ffd5b508073ffffffffffffffffffffffffffffffffffffffff7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c1614610cb2565b7f48f5c3ed000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103305760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610dbe612d3f565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d757335f90815273ffffffffffffffffffffffffffffffffffffffff8216602052604090205c610e146024356130aa565b9081600f0b03610e3157610e2f9133915f03600f0b906130f0565b005b7fbda73abf000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103305760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610e9136612e81565b610e99612e6f565b9073ffffffffffffffffffffffffffffffffffffffff600254163303610d5f57623e900062fff0008316106103e9610fff8416101615610f6557602060a07fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f9922092835f526006825260405f20610f0f81613576565b805479ffffff00000000000000000000000000000000000000000000008360b81b16907fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff1617905562ffffff60405191168152a2005b62ffffff827fa7abe2f7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b346103305760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610fce36612e81565b60a4359073ffffffffffffffffffffffffffffffffffffffff821680830361033057610ff861350f565b6060820191825160020b617fff81136114245750825160020b600181126113f9575073ffffffffffffffffffffffffffffffffffffffff815116602082019073ffffffffffffffffffffffffffffffffffffffff825116808210156113c2575050608082019073ffffffffffffffffffffffffffffffffffffffff82511690604084019161108c62ffffff845116826139b7565b1561139757506110a162ffffff835116613a75565b96835173ffffffffffffffffffffffffffffffffffffffff8116908133036112e0575b505060a0852090815f52600660205260405f2090815473ffffffffffffffffffffffffffffffffffffffff166112b8576020997fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438927cffffff000000000000000000000000000000000000000000000000000061114260a0946145fc565b9260d01b168a76ffffff000000000000000000000000000000000000000084861b161717905562ffffff73ffffffffffffffffffffffffffffffffffffffff808a5116965116965116995160020b73ffffffffffffffffffffffffffffffffffffffff885116906040519b8c528c8c015260408b01528860608b015260020b98896080820152a45173ffffffffffffffffffffffffffffffffffffffff8116908133036111f4575b8585604051908152f35b61100016611203575b806111ea565b6112af9261128d604051937f6fe7e6eb0000000000000000000000000000000000000000000000000000000088860152336024860152604485019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60e48301528361010483015261010482526112aa61012483612e2e565b613f25565b508280806111fd565b7f7983c051000000000000000000000000000000000000000000000000000000005f5260045ffd5b612000166112ef575b806110c4565b61139090604051907fdc98354e00000000000000000000000000000000000000000000000000000000602083015233602483015261137a604483018973ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8860e483015260e482526112aa61010483612e2e565b50886112e9565b7fe65af6a0000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60449250604051917f6e6c983000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b7fe9e90588000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb70024f8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b34610330576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305761148836612e81565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c36011261033057604051906114bf82612dda565b60a4358060020b810361033057825260c4358060020b810361033057602083015260e43560408301526101043560608301526101243567ffffffffffffffff811161033057611512903690600401612f4d565b90927fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d75761154361350f565b60a0832093845f52600660205260405f20608052611562608051613576565b608084015173ffffffffffffffffffffffffffffffffffffffff811690813303611ede575b5050815160020b92602083015160020b916115a56040850151613785565b93606087015160020b9760608201516040519960c08b018b811067ffffffffffffffff821117611eb157604052338b528860208c01528660408c015287600f0b60608c015260808b015260a08a01525f9185881215611e7a577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276188812611e4e57620d89e88613611e22576040519261163c84612dda565b5f84525f60208501525f60408501525f606085015287600f0b611b25575b600460805101978960020b5f528860205260405f20988860020b5f5260205260405f206080515460a01c60020b8b81125f14611acf575060028060018c0154600184015490039b015491015490039b5b60a073ffffffffffffffffffffffffffffffffffffffff825116910151906040519160268301528960068301528b600383015281525f603a600c83012091816040820152816020820152525f5260066080510160205260405f20976fffffffffffffffffffffffffffffffff8954169982600f0b155f14611a72578a15611a4a5761176f61176960409f9b61184e9c6118609e5b60018301956117616002611755848a548503615703565b95019283548503615703565b9655556130aa565b916130aa565b6fffffffffffffffffffffffffffffffff169060801b179a8b965f84600f0b126119dc575b5082600f0b611898575b5050506117c46117b58560801d8360801d01613785565b9185600f0b90600f0b01613785565b6fffffffffffffffffffffffffffffffff169060801b1791815160020b90602083015160020b8c8401516060850151918e5194855260208501528d84015260608301527ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec60803393a38873ffffffffffffffffffffffffffffffffffffffff60808201511661385b565b8094919461186c575b50833391613652565b82519182526020820152f35b6118929073ffffffffffffffffffffffffffffffffffffffff6080840151169083613652565b85611857565b60805154929350909173ffffffffffffffffffffffffffffffffffffffff81169060a01c60020b828112156118fe575050906118f2926118e76118dd6118ed94614158565b91600f0b92614158565b90614527565b613785565b60801b5b8b808061179e565b92809193125f146119a95761193d9161192a6118ed6118ed9361192488600f0b91614158565b87614527565b9361193886600f0b92614158565b6144ca565b6fffffffffffffffffffffffffffffffff169060801b17906fffffffffffffffffffffffffffffffff61197c60036080510192600f0b8284541661456e565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161790556118f6565b906118ed9250926119bf6118dd6119c595614158565b906144ca565b6fffffffffffffffffffffffffffffffff166118f6565b808f9151611a1e575b01516119f2575b8e611794565b611a198260805160049160020b5f52016020525f6002604082208281558260018201550155565b6119ec565b611a458360805160049160020b5f52016020525f6002604082208281558260018201550155565b6119e5565b7faefeb924000000000000000000000000000000000000000000000000000000005f5260045ffd5b61176f61176960409f9b61184e9c6118609e6fffffffffffffffffffffffffffffffff611aa289600f0b8361456e565b167fffffffffffffffffffffffffffffffff0000000000000000000000000000000084541617835561173e565b9099908913611af55760028060018c0154600184015490039b015491015490039b6116aa565b9860026001608051015460018c01549003600183015490039a81806080510154910154900391015490039b6116aa565b6004608051018960020b5f5280602052898960405f20611b7e81546fffffffffffffffffffffffffffffffff611b6181831695600f0b8661456e565b16931594858515141595611dee575b508d600f0b9060801d613d3a565b60801b82179055602087015285528760020b5f5260205260405f208054906fffffffffffffffffffffffffffffffff8216611bbc8b600f0b8261456e565b901592836fffffffffffffffffffffffffffffffff831615141593611dc1575b8b600f0b9060801d600f0b03916f7fffffffffffffffffffffffffffffff83137fffffffffffffffffffffffffffffffff80000000000000000000000000000000841217611d9457826fffffffffffffffffffffffffffffffff935060801b83831617905516606086015260408501525f88600f0b1215611ca1575b8351611c85575b60408401511561165a57611c8060808c015160020b8860056080510161410c565b61165a565b611c9c60808c015160020b8a60056080510161410c565b611c5f565b60808b015160020b6fffffffffffffffffffffffffffffffff600181602088015116925f817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180712817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618050390620d89e8050301810416809111611d68576fffffffffffffffffffffffffffffffff6060860151161115611c5857867fb8e3c385000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b897fb8e3c385000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6080515460a01c60020b8b13611bdc57600160805101546001840155600260805101546002840155611bdc565b6080515460a01c60020b1215611e05575b8e611b70565b600160805101546001840155600260805101546002840155611dff565b857f1ad777f8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b877fd5e2f7ab000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60448887604051917fc4433ed500000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f604085015113808091611fd6575b15611f6b5750506040517f259982e5000000000000000000000000000000000000000000000000000000006020820152611f62916112aa82611f368887898c33602487016136cb565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612e2e565b505b8580611587565b159081611fc8575b50611f7f575b50611f64565b6040517f21d0ee70000000000000000000000000000000000000000000000000000000006020820152611fc1916112aa82611f368887898c33602487016136cb565b5085611f79565b610200915016151587611f73565b5061080082161515611eed565b346103305760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305761201a612d3f565b73ffffffffffffffffffffffffffffffffffffffff612037612d62565b91165f52600560205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f5260205260405f206044355f52602052602060405f2054604051908152f35b346103305760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576120b2612d3f565b602435908115158092036103305773ffffffffffffffffffffffffffffffffffffffff90335f52600360205260405f208282165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff851617905560405192835216907fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa26760203392a3602060405160018152f35b346103305760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305761218a36612e81565b612192612e6f565b906280000062ffffff60408301511614801590612246575b61221e5760a0906121ba8361368e565b205f52600660205260405f20906121d082613576565b81547fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff1660d09190911b7cffffff000000000000000000000000000000000000000000000000000016179055005b7f30d21641000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff6080820151163314156121aa565b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305760043567ffffffffffffffff8111610330576122b9903690600401612f4d565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c6124cd57612345915f9160017fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d60405193849283927f91dd734600000000000000000000000000000000000000000000000000000000845260206004850152602484019161306c565b038183335af19081156124c2575f9161241a575b507f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c6123f25760406020915f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b7f5212cba1000000000000000000000000000000000000000000000000000000005f5260045ffd5b90503d805f833e61242b8183612e2e565b8101906020818303126103305780519067ffffffffffffffff8211610330570181601f820112156103305780519067ffffffffffffffff8211611eb1576040519261249e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185612e2e565b8284526020838301011161033057815f9260208093018386015e8301015281612359565b6040513d5f823e3d90fd5b7f5090d6c6000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103305773ffffffffffffffffffffffffffffffffffffffff61251836612d85565b91929092335f52600560205260405f208282165f5260205260405f20845f526020528260405f205560405192835216907fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a760203392a4602060405160018152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576125ab612d3f565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d7576107a260209161342d565b346103305760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576024356004356040519160408360208152826020820152019060051b8301916001602060408501935b835481520191019084838210156109cc57506020600191612635565b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305773ffffffffffffffffffffffffffffffffffffffff61269d612d3f565b6126ab825f54163314613007565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc5f80a2005b34610330576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305761273536612e81565b60c4359060a43560e43567ffffffffffffffff81116103305761275c903690600401612f4d565b9190937fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d75761278e61350f565b60a0842094855f52600660205260405f20946127a986613576565b60808101805173ffffffffffffffffffffffffffffffffffffffff811690813303612943575b50506fffffffffffffffffffffffffffffffff60038801541697881561291b576020986127fb876130aa565b5f03612806876130aa565b5f036fffffffffffffffffffffffffffffffff169060801b179887612907575b866128f2575b5050612839338985613652565b60405190868252858a8301527f29ef05caaff9404b7cb6d1c0e9bbae9eaa7ab2541feba1a9c4248594c08156cb60403393a3519273ffffffffffffffffffffffffffffffffffffffff841693843303612897575b8888604051908152f35b6010166128a5575b8061288d565b6128e6956112aa93611f36926040519788957fe1b4af69000000000000000000000000000000000000000000000000000000008d88015233602488016135bc565b5082808080808061289f565b600201908660801b048154019055898061282c565b60018101828960801b048154019055612826565b7fa74f97ab000000000000000000000000000000000000000000000000000000005f5260045ffd5b602016612951575b806127cf565b6040517fb6a8b0fa000000000000000000000000000000000000000000000000000000006020820152612994916112aa82611f368b898b8d8b33602488016135bc565b508861294b565b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057600435545f5260205ff35b34610330576129e336612d85565b907fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d7577f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac7288596103ed73ffffffffffffffffffffffffffffffffffffffff805f941695612a62612a55876130aa565b8603600f0b3390896130f0565b16938484526004602052604084208685526020526040842061025f828254612ffa565b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330577fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d75760206107a23361342d565b346103305760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057612b17612d3f565b612b1f612d62565b604435907fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d757610e2f92612b67612b5a846130aa565b5f03600f0b3390836130f0565b6131f8565b346103305773ffffffffffffffffffffffffffffffffffffffff612b8f36612d85565b91929092335f52600460205260405f20845f5260205260405f20612bb4848254612fed565b90551690815f52600460205260405f20835f5260205260405f20612bd9828254612ffa565b9055604080513380825260208201939093527f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac7288599181908101610279565b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361033057807f01ffc9a70000000000000000000000000000000000000000000000000000000060209214908115612cab575b506040519015158152f35b7f0f632fb30000000000000000000000000000000000000000000000000000000091501482612ca0565b346103305760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305760209073ffffffffffffffffffffffffffffffffffffffff612d24612d3f565b165f526004825260405f206024355f52825260405f20548152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361033057565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361033057565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60609101126103305760043573ffffffffffffffffffffffffffffffffffffffff8116810361033057906024359060443590565b6080810190811067ffffffffffffffff821117611eb157604052565b6060810190811067ffffffffffffffff821117611eb157604052565b60a0810190811067ffffffffffffffff821117611eb157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611eb157604052565b60a4359062ffffff8216820361033057565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126103305760405190612eb882612e12565b8160043573ffffffffffffffffffffffffffffffffffffffff8116810361033057815260243573ffffffffffffffffffffffffffffffffffffffff8116810361033057602082015260443562ffffff811681036103305760408201526064358060020b81036103305760608201526084359073ffffffffffffffffffffffffffffffffffffffff821682036103305760800152565b9181601f840112156103305782359167ffffffffffffffff8311610330576020838186019501011161033057565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103305760043567ffffffffffffffff811161033057826023820112156103305780600401359267ffffffffffffffff84116103305760248460051b83010111610330576024019190565b91908203918211611d9457565b91908201809211611d9457565b1561300e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152fd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b6f800000000000000000000000000000008110156130c857600f0b90565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190600f0b9182156131f357613126919073ffffffffffffffffffffffffffffffffffffffff8092165f521660205260405f2090565b613132815c9283613b29565b80915d6131a357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c017f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5d5b565b156131aa57565b60017f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c017f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5d565b505050565b90919073ffffffffffffffffffffffffffffffffffffffff811690816132ea5750505f80808093855af11561322a5750565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011673ffffffffffffffffffffffffffffffffffffffff604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301525f6024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff4b3b1bc0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b60205f60448194968260409573ffffffffffffffffffffffffffffffffffffffff988751998a947fa9059cbb00000000000000000000000000000000000000000000000000000000865216600485015260248401525af13d15601f3d116001855114161716928281528260208201520152156133635750565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d0116604051917f90bfb86500000000000000000000000000000000000000000000000000000000835260048301527fa9059cbb000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c919073ffffffffffffffffffffffffffffffffffffffff8316613482576131a19034935b61347c856130aa565b906130f0565b346134e7576131a1906134be7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955c6134b986613a92565b612fed565b935f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d613473565b7fb0ec849e000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361354e57565b7f0d89438e000000000000000000000000000000000000000000000000000000005f5260045ffd5b5473ffffffffffffffffffffffffffffffffffffffff161561359457565b7f486aa307000000000000000000000000000000000000000000000000000000005f5260045ffd5b91926136376101209473ffffffffffffffffffffffffffffffffffffffff61364f999794168552602085019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60c083015260e082015281610100820152019161306c565b90565b9073ffffffffffffffffffffffffffffffffffffffff60206131a1949361368185848351168660801d906130f0565b01511690600f0b906130f0565b62ffffff16620f424081116136a05750565b7f14002113000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9061364f95936137486101609473ffffffffffffffffffffffffffffffffffffffff61377794168552602085019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051600290810b60c08501526020820151900b60e0840152604081015161010084015260600151610120830152565b81610140820152019161306c565b9081600f0b9182036130c857565b926138419061381261364f99979473ffffffffffffffffffffffffffffffffffffffff6101a09895168752602087019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051600290810b60c08701526020820151900b60e0860152604081015161010086015260600151610120850152565b61014083015261016082015281610180820152019161306c565b939590919296945f9673ffffffffffffffffffffffffffffffffffffffff861633146139ac57885f6040870151135f1461393b5761040087166138a2575b50505050505050565b61392e9799985092613927969594926138ef9261391b956040519788967f9f063efc0000000000000000000000000000000000000000000000000000000060208901523360248901613793565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612e2e565b6002821615159161459f565b80926145bf565b915f808080808080613899565b95949392919061010086166139535750505050505050565b61392e979950869850916138ef916139a09493613927986040519788967f6c2bbe7e0000000000000000000000000000000000000000000000000000000060208901523360248901613793565b6001821615159161459f565b505f96505050505050565b608081161580613a69575b613a3f57604081161580613a5d575b613a3f5761040081161580613a51575b613a3f5761010081161580613a45575b613a3f5773ffffffffffffffffffffffffffffffffffffffff8116613a1f575062ffffff1662800000141590565b613fff161590811591613a30575090565b62800000915062ffffff161490565b50505f90565b506001811615156139f1565b506002811615156139e1565b506004811615156139d1565b506008811615156139c2565b6280000062ffffff821614613a8d5761364f8161368e565b505f90565b73ffffffffffffffffffffffffffffffffffffffff1680613ab257504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9081156124c2575f91613afa575090565b90506020813d602011613b21575b81613b1560209383612e2e565b81010312610330575190565b3d9150613b08565b9190915f8382019384129112908015821691151617611d9457565b6020830151955f9586959194913373ffffffffffffffffffffffffffffffffffffffff851614613d2d5760808416613b7e575b5050505050565b613c66926138ef613c6092613c4c946040519586947f575e24b4000000000000000000000000000000000000000000000000000000006020870152336024870152613c16604487018c73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051151560e487015260208101516101048701526040015173ffffffffffffffffffffffffffffffffffffffff16610124860152565b61014061014485015261016484019161306c565b82613f25565b916060835103613d05576040015162ffffff166280000014613cf9575b600816613c94575b80808080613b77565b604001519250608083901d600f0b8015613c8b57613cb5905f861295613b29565b9315613cf1575f84135b613cc9575f613c8b565b7ffa0b71d6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f8412613cbf565b60608201519350613c83565b7f1e048e1d000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f965086955050505050565b90600f0b90600f0b01907fffffffffffffffffffffffffffffffff8000000000000000000000000000000082126f7fffffffffffffffffffffffffffffff831317611d9457565b9196959394929473ffffffffffffffffffffffffffffffffffffffff83163314613f18578460801d94600f0b938860408516613e40575b50505050505f9481600f0b15801590613e34575b613dd8575b5050509190565b613e0f9395505f60208201511290511515145f14613e17576fffffffffffffffffffffffffffffffff169060801b175b80936145bf565b5f8080613dd1565b906fffffffffffffffffffffffffffffffff169060801b17613e08565b5082600f0b1515613dcc565b613efc613f08946138ef6118ed95613f0e999895613ee1613c16966040519788967fb47b2fb1000000000000000000000000000000000000000000000000000000006020890152336024890152604488019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8c61014485015261016061016485015261018484019161306c565b6004821615159161459f565b90613d3a565b5f80808088613db8565b5050505050909150905f90565b9190918251925f8060208301958682865af115613fc3575050604051917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f3d011683016040523d83523d9060208401915f833e6020845110918215613f8f575b5050613d0557565b5190517fffffffff000000000000000000000000000000000000000000000000000000009182169116141590505f80613f87565b5183517fffffffff00000000000000000000000000000000000000000000000000000000811691600481106140d7575b50507fffffffff000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01169173ffffffffffffffffffffffffffffffffffffffff604051947f90bfb865000000000000000000000000000000000000000000000000000000008652166004850152166024830152608060448301528060a00160648301523d60848301523d5f60a484013e7fa9e35b2f0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffff000000000000000000000000000000000000000000000000000000009250829060040360031b1b16168280613ff3565b919060020b9060020b9081810761413a5705908160081d5f52602052600160ff60405f2092161b8154189055565b601c906044926040519163d4d8f3e683526020830152604082015201fd5b60020b908160ff1d82810118620d89e8811161449e5763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189160028116614482575b60048116614466575b6008811661444a575b6010811661442e575b60208116614412575b604081166143f6575b608081166143da575b61010081166143be575b61020081166143a2575b6104008116614386575b610800811661436a575b611000811661434e575b6120008116614332575b6140008116614316575b61800081166142fa575b6201000081166142de575b6202000081166142c3575b6204000081166142a8575b620800001661428f575b5f12614268575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04614261565b6b048a170391f7dc42444e8fa290910260801c9061425a565b6d2216e584f5fa1ea926041bedfe9890920260801c91614250565b916e5d6af8dedb81196699c329225ee6040260801c91614245565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161423a565b916f31be135f97d08fd981231505542fcfa60260801c9161422f565b916f70d869a156d2a1b890bb3df62baf32f70260801c91614225565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161421b565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91614211565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91614207565b916ff3392b0822b70005940c7a398e4b70f30260801c916141fd565b916ff987a7253ac413176f2b074cf7815e540260801c916141f3565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c916141e9565b916ffe5dee046a99a2a811c461f1969c30530260801c916141df565b916fff2ea16466c96a3843ec78b326b528610260801c916141d6565b916fff973b41fa98c081472e6896dfb254c00260801c916141cd565b916fffcb9843d60f6159c9db58835c9266440260801c916141c4565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916141bb565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916141b2565b916ffff97272373d413259a46990580e213a0260801c916141a9565b827f8b86327a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b905f83600f0b125f146144ff576144f5925f036fffffffffffffffffffffffffffffffff1691615a3d565b5f81126130c85790565b61451b926fffffffffffffffffffffffffffffffff16916159e2565b5f81126130c8575f0390565b905f83600f0b125f14614552576144f5925f036fffffffffffffffffffffffffffffffff1691615b34565b61451b926fffffffffffffffffffffffffffffffff1691615a7d565b906fffffffffffffffffffffffffffffffff90600f0b911601908160801c61459257565b6393dafdf15f526004601cfd5b906145a991613f25565b9015613a8d576040815103613d05576040015190565b6145e2906145d48360801d8260801d03613785565b92600f0b90600f0b03613785565b6fffffffffffffffffffffffffffffffff169060801b1790565b73fffd8963efd1fc6a506488495d951d516396168273ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffd895d830116116148e05777ffffffffffffffffffffffffffffffffffffffff000000008160201b168060ff61467983615bdb565b1691608083106148d457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8182011c5b800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c800260cd1c6604000000000000169d60cc1c6608000000000000169c60cb1c6610000000000000169b60ca1c6620000000000000169a60c91c6640000000000000169960c81c6680000000000000169860c71c670100000000000000169760c61c670200000000000000169660c51c670400000000000000169560c41c670800000000000000169460c31c671000000000000000169360c21c672000000000000000169260c11c674000000000000000169160c01c67800000000000000016907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800160401b1717171717171717171717171717693627a301d71055774c85027ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc556810160801d60020b906fdb2df09e81959a81455e260799a0632f0160801d60020b918282145f146148915750905090565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff6148c584614158565b16116148cf575090565b905090565b905081607f031b6146a9565b73ffffffffffffffffffffffffffffffffffffffff907f61487524000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b811561492c570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6040519290915f61496985612df6565b5f855260208501925f845260408601955f875280968654956040860151159586155f146156f557610fff8860b81c16945b8151925f948a73ffffffffffffffffffffffffffffffffffffffff16918288528b60a01c60020b90526fffffffffffffffffffffffffffffffff60038d0154169052608083015162400000811615155f146156e65762bfffff166149fd8161368e565b61ffff88166156cb575b8096620f424062ffffff8316101561569a575b8451156156845750508861562457606083019073ffffffffffffffffffffffffffffffffffffffff825116818110156155ed5750505173ffffffffffffffffffffffffffffffffffffffff166401000276a38111156155c257505b604051986101008a018a811067ffffffffffffffff821117611eb1576040525f8a525f60208b01525f60408b01525f60608b01525f60808b01525f60a08b01525f60c08b015288155f146155b45760018b0154949390945b60e08b01525b8015801561557a575b6154205788868d8c8e73ffffffffffffffffffffffffffffffffffffffff8351168252602083015160020b602089015160020b90815f8183071291050386155f14615275576fffffffffffffffffffffffffffffffff937ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761860409460019484600560ff60609716938260020b60081d890b5f5201602052875f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8460ff031c9054169283151593845f146152635790614bb760ff92615bdb565b90031660020b900360020b0260020b5b905b15158684015260020b8060208401521315615238575b620d89e8602082015160020b121561522a575b73ffffffffffffffffffffffffffffffffffffffff614c17602083015160020b614158565b16918291015273ffffffffffffffffffffffffffffffffffffffff8551169673ffffffffffffffffffffffffffffffffffffffff60608c0151169283911516818310189118021892015116928d73ffffffffffffffffffffffffffffffffffffffff8316821015915f87125f1461507f5762ffffff8516620f424003614c9f81895f03615785565b94841561506e57614cb1888483615a7d565b955b868110614fb257509660a093929173ffffffffffffffffffffffffffffffffffffffff98978891620f424062ffffff8316145f14614f9e575050865b955b15614f905791614d0092615a3d565b925b60c0820152015260808d0152168c525f8351135f14614f605760a08a0151905f82126130c8570392614d3d60808b015160c08c015190612ffa565b5f81126130c8578103908113600116611d9457935b61ffff8716614f18575b6fffffffffffffffffffffffffffffffff60408d01511680614efe575b5073ffffffffffffffffffffffffffffffffffffffff8c511673ffffffffffffffffffffffffffffffffffffffff60608c01511681145f14614ec2575060408a0151614e10575b88614e03577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208b015160020b0160020b5b60020b60208d01525b9392614ad3565b60208a015160020b614df3565b88614e96576fffffffffffffffffffffffffffffffff614e7d8d8d8d600460e08201519260206002820154935b015160020b60020b5f520160205260405f2091600183019081549003905560028201908154900390555460801d908c15614e88575b60400151831661456e565b1660408d0152614dc0565b5f91909103600f0b90614e72565b6fffffffffffffffffffffffffffffffff614e7d8d8d8d6004600183015492602060e084015193614e3d565b73ffffffffffffffffffffffffffffffffffffffff8b51168103614ee7575b50614dfc565b614ef0906145fc565b60020b60208d01525f614ee1565b60c08b015160801b0460e08b01510160e08b01525f614d79565b9662ffffff861661ffff881603614f435760c08a0151905b8160c08c01510360c08c01520196614d5c565b620f424060808b015161ffff89169060c08d015101020490614f30565b60808a015160c08b015101905f82126130c857019260a08a01515f81126130c857614f8a91613b29565b93614d52565b614f9992615b34565b614d00565b62ffffff614fad921689615c68565b614cef565b9650505092505082918415811517615061578e60a09173ffffffffffffffffffffffffffffffffffffffff96845f14614ffc57614ff0878284615d07565b80978a015f0395614cf1565b87871161503a576150356150306150286fffffffffffffffffffffffffffffffff84168a60601b614922565b8a8516612ffa565b615d9b565b614ff0565b61503561503061505c6fffffffffffffffffffffffffffffffff84168a61588a565b615028565b634f2461b85f526004601cfd5b6150798882856159e2565b95614cb3565b9193509190831561521957615095858284615a3d565b915b8287106150f7579073ffffffffffffffffffffffffffffffffffffffff9560a09280965b156150e857916150ca92615a7d565b925b6150e362ffffff8d16620f42408190039086615c68565b614d02565b6150f1926159e2565b926150cc565b50915050838315821517615061578d83156151ef575073ffffffffffffffffffffffffffffffffffffffff851161519c578460601b6fffffffffffffffffffffffffffffffff851680820615159104015b73ffffffffffffffffffffffffffffffffffffffff8316928184111561518f578f939573ffffffffffffffffffffffffffffffffffffffff60a093819803165b80966150bb565b634323a5555f526004601cfd5b6fffffffffffffffffffffffffffffffff84166151c7816c0100000000000000000000000088615943565b90801561492c576c010000000000000000000000008709156151485760010180615148575f80fd5b9180856152148873ffffffffffffffffffffffffffffffffffffffff9860a095615c91565b615188565b615224858383615b34565b91615097565b620d89e86020820152614bf2565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276186020820152614bdf565b5060020b900360020b0260020b614bc7565b60019194939650600592955001938460020b60081d60010b5f520160205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600160ff86161b0119905416908d8b831592831597885f146153c15750505050610330578f9160018f8f96907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276186060928f989560409660ff896fffffffffffffffffffffffffffffffff9a5f03166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f85851693831c63d76453e004161a17031660020b9060020b0160020b0260020b5b90614bc9565b90956fffffffffffffffffffffffffffffffff955060409450600193987ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618918960ff6060969b811681031660020b9060020b0160020b0260020b6153bb565b949891955099969298919598602088015160a01b76ffffff0000000000000000000000000000000000000000167fffffffffffffffffff000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8a51169216171782556fffffffffffffffffffffffffffffffff6003830154166fffffffffffffffffffffffffffffffff604089015116809103615535575b5082156155265760e060029101519101555b825190155f82121461551057506154ee6154f69293613785565b925103613785565b6fffffffffffffffffffffffffffffffff169060801b1793565b6154f69250906155209103613785565b91613785565b60e060019101519101556154d4565b6fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000006003840154161760038301555f6154c2565b5073ffffffffffffffffffffffffffffffffffffffff8c511673ffffffffffffffffffffffffffffffffffffffff60608501511614614adc565b60028b015494939094614acd565b7f9e4d7cc7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60449250604051917f7c9c6e8f00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b606083019073ffffffffffffffffffffffffffffffffffffffff825116818111156155ed5750505173ffffffffffffffffffffffffffffffffffffffff1673fffd8963efd1fc6a506488495d951d5263988d268110156155c25750614a75565b9a509a50509950505050505050505f925f929190565b5f85511315614a1a577f96206246000000000000000000000000000000000000000000000000000000005f5260045ffd5b62ffffff610fff89169116620f424081830204910103614a07565b508960d01c62ffffff166149fd565b610fff8860c41c169461499a565b90808202917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828209918380841093039280840393847001000000000000000000000000000000001115610330571461577c57700100000000000000000000000000000000910990828211900360801b910360801c1790565b50505060801c90565b818102907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83820990828083109203918083039283620f424011156103305714615804577fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c2613993620f4240910990828211900360fa1b910360061c170290565b5050620f424091500490565b90808202917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828209918380841093039280840393846c0100000000000000000000000011156103305714615881576c01000000000000000000000000910990828211900360a01b910360601c1790565b50505060601c90565b908160601b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c01000000000000000000000000840992828085109403938085039485841115610330571461593c576c0100000000000000000000000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b91818302917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8185099383808610950394808603958685111561033057146159da579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b6fffffffffffffffffffffffffffffffff6c010000000000000000000000009173ffffffffffffffffffffffffffffffffffffffff80600195169116038060ff1d90810118931692615a348185615810565b93091515160190565b6fffffffffffffffffffffffffffffffff9073ffffffffffffffffffffffffffffffffffffffff8061364f9594169116038060ff1d908101189116615810565b9073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff831611615b2e575b73ffffffffffffffffffffffffffffffffffffffff8216928315615b22577bffffffffffffffffffffffffffffffff00000000000000000000000073ffffffffffffffffffffffffffffffffffffffff615b16948185169403169160601b16615c68565b90808206151591040190565b62bfc9215f526004601cfd5b90615ab2565b73ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff821611615bd5575b73ffffffffffffffffffffffffffffffffffffffff8116918215615b225761364f937bffffffffffffffffffffffffffffffff00000000000000000000000073ffffffffffffffffffffffffffffffffffffffff615bd0948185169403169160601b16615943565b614922565b90615b68565b8015610330577f07060605060205000602030205040001060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a1790565b929190615c76828286615943565b93821561492c5709615c8457565b9060010190811561033057565b91908115615d02577bffffffffffffffffffffffffffffffff00000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9160601b169216918282029183838311918404141615615cf55761364f9261503092820391615c68565b63f5c787f15f526004601cfd5b505090565b90918015615d955773ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffffffffffffffffffff000000000000000000000000819460601b16921680820281615d578483614922565b14615d7d575b5090615d6c615d719284614922565b612ffa565b80820615159104011690565b8301838110615d5d579150615d9192615c68565b1690565b50905090565b9073ffffffffffffffffffffffffffffffffffffffff82169182036130c85756fea164736f6c634300081a000a'; + return + hex'60a03460a057601f615e8238819003918201601f19168301916001600160401b0383118484101760a45780849260209460405283398101031260a057516001600160a01b0381169081900360a0575f80546001600160a01b0319168217815560405191907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a330608052615dc990816100b98239608051816135260152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60a0806040526004361015610012575f80fd5b5f3560e01c908162fdd58e14612cd55750806301ffc9a714612c16578063095bcdb614612b6c5780630b0d9c0914612ae057806311da60b414612a85578063156e29f6146129d55780631e2eaeaf1461299b578063234266d7146126fc5780632d7713891461265157806335fd631a146125dd5780633dd45adb14612579578063426a8493146124f557806348c894911461226a5780635275965114612152578063558a72971461207b578063598af9e714611fe35780635a6bcfda1461144f5780636276cbbe14610f965780637e87ce7d14610e5957806380f0b44c14610d875780638161b87414610c315780638da5cb5b14610be157806397e8cd4e14610b7e5780639bf6645f14610b31578063a584119414610a66578063b6363cf2146109d5578063dbd035ff1461097f578063f02de3b21461092e578063f135baaa146108f4578063f2fde38b14610848578063f3cd914c146104ff578063f5298aca146103345763fe99049a14610186575f80fd5b346103305760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576101bd612d3f565b6101c5612d62565b90604435917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885961027973ffffffffffffffffffffffffffffffffffffffff80606435951693843314158061030d575b610287575b845f52600460205260405f20875f5260205260405f2061023a878254612fed565b90551693845f52600460205260405f20865f5260205260405f2061025f828254612ffa565b905560408051338152602081019290925290918291820190565b0390a4602060405160018152f35b845f52600560205260405f208233165f5260205260405f20875f5260205260405f2054867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036102da575b5050610219565b6102e391612fed565b855f52600560205260405f208333165f5260205260405f20885f5260205260405f20555f866102d3565b50845f52600360205260405f208233165f5260205260ff60405f20541615610214565b5f80fd5b346103305761034236612d85565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d7577f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac7288596103ed73ffffffffffffffffffffffffffffffffffffffff805f9516956103bb6103b3866130aa565b3390896130f0565b169233841415806104a0575b6103f2575b8385526004602052604085208686526020526040852061025f828254612fed565b0390a4005b83855260056020526040852073ffffffffffffffffffffffffffffffffffffffff33168652602052604085208686526020526040852054817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610459575b50506103cc565b61046291612fed565b84865260056020526040862073ffffffffffffffffffffffffffffffffffffffff331687526020526040862087875260205260408620558681610452565b5083855260036020526040852073ffffffffffffffffffffffffffffffffffffffff3316865260205260ff604086205416156103c7565b7f54e3ca0d000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610330576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305761053836612e81565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c360112610330576040519061056f82612df6565b60a4358015158103610330578252602082019060c435825260e4359073ffffffffffffffffffffffffffffffffffffffff8216820361033057604084019182526101043567ffffffffffffffff8111610330576105d0903690600401612f4d565b9290937fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d75761060261350f565b51156108205760a0822092835f52600660205260405f209061062382613576565b60808401958482828a8a5173ffffffffffffffffffffffffffffffffffffffff169361064e94613b44565b90949195606088015160020b908b511515905173ffffffffffffffffffffffffffffffffffffffff1691604051986106858a612e12565b895260208901526040880152606087015262ffffff166080860152885115155f149862ffffff6107a2986106db61078f9860209d6108005773ffffffffffffffffffffffffffffffffffffffff8b511695614959565b9492968291926107d3575b505073ffffffffffffffffffffffffffffffffffffffff845116938e6fffffffffffffffffffffffffffffffff60408301511691015160020b90604051958860801d600f0b875288600f0b60208801526040870152606086015260808501521660a08301527f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f60c03393a38673ffffffffffffffffffffffffffffffffffffffff8a5116613d81565b809491946107aa575b5050823391613652565b604051908152f35b73ffffffffffffffffffffffffffffffffffffffff6107cc9251169083613652565b8480610798565b73ffffffffffffffffffffffffffffffffffffffff165f5260018f5260405f209081540190558e806106e6565b73ffffffffffffffffffffffffffffffffffffffff8e8c01511695614959565b7fbe8b8507000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330577fffffffffffffffffffffffff00000000000000000000000000000000000000006108a0612d3f565b73ffffffffffffffffffffffffffffffffffffffff5f54916108c58284163314613007565b1691829116175f55337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576004355c5f5260205ff35b34610330575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346103305761098d36612f7b565b6040519160408360208152836020820152019160051b8301916020806040850193925b83355481520191019084838210156109cc5750602080916109b0565b60408186030190f35b346103305760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610a0c612d3f565b73ffffffffffffffffffffffffffffffffffffffff610a29612d62565b91165f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610a9d612d3f565b73ffffffffffffffffffffffffffffffffffffffff81169081610ae15750505f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d005b610aea90613a92565b907f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d005b3461033057610b3f36612f7b565b6040519160408360208152836020820152019160051b8301916020806040850193925b83355c81520191019084838210156109cc575060208091610b62565b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305773ffffffffffffffffffffffffffffffffffffffff610bca612d3f565b165f526001602052602060405f2054604051908152f35b34610330575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346103305760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610c68612d3f565b610c70612d62565b60443573ffffffffffffffffffffffffffffffffffffffff600254163303610d5f5773ffffffffffffffffffffffffffffffffffffffff821680151580610d1f575b610cf7576020936107a29280610cef5750815f526001855260405f20549384925b5f526001865260405f20610ce8848254612fed565b90556131f8565b938492610cd3565b7fc79e5948000000000000000000000000000000000000000000000000000000005f5260045ffd5b508073ffffffffffffffffffffffffffffffffffffffff7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c1614610cb2565b7f48f5c3ed000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103305760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610dbe612d3f565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d757335f90815273ffffffffffffffffffffffffffffffffffffffff8216602052604090205c610e146024356130aa565b9081600f0b03610e3157610e2f9133915f03600f0b906130f0565b005b7fbda73abf000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103305760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610e9136612e81565b610e99612e6f565b9073ffffffffffffffffffffffffffffffffffffffff600254163303610d5f57623e900062fff0008316106103e9610fff8416101615610f6557602060a07fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f9922092835f526006825260405f20610f0f81613576565b805479ffffff00000000000000000000000000000000000000000000008360b81b16907fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff1617905562ffffff60405191168152a2005b62ffffff827fa7abe2f7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b346103305760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057610fce36612e81565b60a4359073ffffffffffffffffffffffffffffffffffffffff821680830361033057610ff861350f565b6060820191825160020b617fff81136114245750825160020b600181126113f9575073ffffffffffffffffffffffffffffffffffffffff815116602082019073ffffffffffffffffffffffffffffffffffffffff825116808210156113c2575050608082019073ffffffffffffffffffffffffffffffffffffffff82511690604084019161108c62ffffff845116826139b7565b1561139757506110a162ffffff835116613a75565b96835173ffffffffffffffffffffffffffffffffffffffff8116908133036112e0575b505060a0852090815f52600660205260405f2090815473ffffffffffffffffffffffffffffffffffffffff166112b8576020997fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438927cffffff000000000000000000000000000000000000000000000000000061114260a0946145fc565b9260d01b168a76ffffff000000000000000000000000000000000000000084861b161717905562ffffff73ffffffffffffffffffffffffffffffffffffffff808a5116965116965116995160020b73ffffffffffffffffffffffffffffffffffffffff885116906040519b8c528c8c015260408b01528860608b015260020b98896080820152a45173ffffffffffffffffffffffffffffffffffffffff8116908133036111f4575b8585604051908152f35b61100016611203575b806111ea565b6112af9261128d604051937f6fe7e6eb0000000000000000000000000000000000000000000000000000000088860152336024860152604485019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60e48301528361010483015261010482526112aa61012483612e2e565b613f25565b508280806111fd565b7f7983c051000000000000000000000000000000000000000000000000000000005f5260045ffd5b612000166112ef575b806110c4565b61139090604051907fdc98354e00000000000000000000000000000000000000000000000000000000602083015233602483015261137a604483018973ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8860e483015260e482526112aa61010483612e2e565b50886112e9565b7fe65af6a0000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60449250604051917f6e6c983000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b7fe9e90588000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb70024f8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b34610330576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305761148836612e81565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c36011261033057604051906114bf82612dda565b60a4358060020b810361033057825260c4358060020b810361033057602083015260e43560408301526101043560608301526101243567ffffffffffffffff811161033057611512903690600401612f4d565b90927fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d75761154361350f565b60a0832093845f52600660205260405f20608052611562608051613576565b608084015173ffffffffffffffffffffffffffffffffffffffff811690813303611ede575b5050815160020b92602083015160020b916115a56040850151613785565b93606087015160020b9760608201516040519960c08b018b811067ffffffffffffffff821117611eb157604052338b528860208c01528660408c015287600f0b60608c015260808b015260a08a01525f9185881215611e7a577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276188812611e4e57620d89e88613611e22576040519261163c84612dda565b5f84525f60208501525f60408501525f606085015287600f0b611b25575b600460805101978960020b5f528860205260405f20988860020b5f5260205260405f206080515460a01c60020b8b81125f14611acf575060028060018c0154600184015490039b015491015490039b5b60a073ffffffffffffffffffffffffffffffffffffffff825116910151906040519160268301528960068301528b600383015281525f603a600c83012091816040820152816020820152525f5260066080510160205260405f20976fffffffffffffffffffffffffffffffff8954169982600f0b155f14611a72578a15611a4a5761176f61176960409f9b61184e9c6118609e5b60018301956117616002611755848a548503615703565b95019283548503615703565b9655556130aa565b916130aa565b6fffffffffffffffffffffffffffffffff169060801b179a8b965f84600f0b126119dc575b5082600f0b611898575b5050506117c46117b58560801d8360801d01613785565b9185600f0b90600f0b01613785565b6fffffffffffffffffffffffffffffffff169060801b1791815160020b90602083015160020b8c8401516060850151918e5194855260208501528d84015260608301527ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec60803393a38873ffffffffffffffffffffffffffffffffffffffff60808201511661385b565b8094919461186c575b50833391613652565b82519182526020820152f35b6118929073ffffffffffffffffffffffffffffffffffffffff6080840151169083613652565b85611857565b60805154929350909173ffffffffffffffffffffffffffffffffffffffff81169060a01c60020b828112156118fe575050906118f2926118e76118dd6118ed94614158565b91600f0b92614158565b90614527565b613785565b60801b5b8b808061179e565b92809193125f146119a95761193d9161192a6118ed6118ed9361192488600f0b91614158565b87614527565b9361193886600f0b92614158565b6144ca565b6fffffffffffffffffffffffffffffffff169060801b17906fffffffffffffffffffffffffffffffff61197c60036080510192600f0b8284541661456e565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161790556118f6565b906118ed9250926119bf6118dd6119c595614158565b906144ca565b6fffffffffffffffffffffffffffffffff166118f6565b808f9151611a1e575b01516119f2575b8e611794565b611a198260805160049160020b5f52016020525f6002604082208281558260018201550155565b6119ec565b611a458360805160049160020b5f52016020525f6002604082208281558260018201550155565b6119e5565b7faefeb924000000000000000000000000000000000000000000000000000000005f5260045ffd5b61176f61176960409f9b61184e9c6118609e6fffffffffffffffffffffffffffffffff611aa289600f0b8361456e565b167fffffffffffffffffffffffffffffffff0000000000000000000000000000000084541617835561173e565b9099908913611af55760028060018c0154600184015490039b015491015490039b6116aa565b9860026001608051015460018c01549003600183015490039a81806080510154910154900391015490039b6116aa565b6004608051018960020b5f5280602052898960405f20611b7e81546fffffffffffffffffffffffffffffffff611b6181831695600f0b8661456e565b16931594858515141595611dee575b508d600f0b9060801d613d3a565b60801b82179055602087015285528760020b5f5260205260405f208054906fffffffffffffffffffffffffffffffff8216611bbc8b600f0b8261456e565b901592836fffffffffffffffffffffffffffffffff831615141593611dc1575b8b600f0b9060801d600f0b03916f7fffffffffffffffffffffffffffffff83137fffffffffffffffffffffffffffffffff80000000000000000000000000000000841217611d9457826fffffffffffffffffffffffffffffffff935060801b83831617905516606086015260408501525f88600f0b1215611ca1575b8351611c85575b60408401511561165a57611c8060808c015160020b8860056080510161410c565b61165a565b611c9c60808c015160020b8a60056080510161410c565b611c5f565b60808b015160020b6fffffffffffffffffffffffffffffffff600181602088015116925f817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180712817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618050390620d89e8050301810416809111611d68576fffffffffffffffffffffffffffffffff6060860151161115611c5857867fb8e3c385000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b897fb8e3c385000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6080515460a01c60020b8b13611bdc57600160805101546001840155600260805101546002840155611bdc565b6080515460a01c60020b1215611e05575b8e611b70565b600160805101546001840155600260805101546002840155611dff565b857f1ad777f8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b877fd5e2f7ab000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60448887604051917fc4433ed500000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f604085015113808091611fd6575b15611f6b5750506040517f259982e5000000000000000000000000000000000000000000000000000000006020820152611f62916112aa82611f368887898c33602487016136cb565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612e2e565b505b8580611587565b159081611fc8575b50611f7f575b50611f64565b6040517f21d0ee70000000000000000000000000000000000000000000000000000000006020820152611fc1916112aa82611f368887898c33602487016136cb565b5085611f79565b610200915016151587611f73565b5061080082161515611eed565b346103305760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305761201a612d3f565b73ffffffffffffffffffffffffffffffffffffffff612037612d62565b91165f52600560205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f5260205260405f206044355f52602052602060405f2054604051908152f35b346103305760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576120b2612d3f565b602435908115158092036103305773ffffffffffffffffffffffffffffffffffffffff90335f52600360205260405f208282165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff851617905560405192835216907fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa26760203392a3602060405160018152f35b346103305760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305761218a36612e81565b612192612e6f565b906280000062ffffff60408301511614801590612246575b61221e5760a0906121ba8361368e565b205f52600660205260405f20906121d082613576565b81547fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff1660d09190911b7cffffff000000000000000000000000000000000000000000000000000016179055005b7f30d21641000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff6080820151163314156121aa565b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305760043567ffffffffffffffff8111610330576122b9903690600401612f4d565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c6124cd57612345915f9160017fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d60405193849283927f91dd734600000000000000000000000000000000000000000000000000000000845260206004850152602484019161306c565b038183335af19081156124c2575f9161241a575b507f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c6123f25760406020915f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b7f5212cba1000000000000000000000000000000000000000000000000000000005f5260045ffd5b90503d805f833e61242b8183612e2e565b8101906020818303126103305780519067ffffffffffffffff8211610330570181601f820112156103305780519067ffffffffffffffff8211611eb1576040519261249e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185612e2e565b8284526020838301011161033057815f9260208093018386015e8301015281612359565b6040513d5f823e3d90fd5b7f5090d6c6000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103305773ffffffffffffffffffffffffffffffffffffffff61251836612d85565b91929092335f52600560205260405f208282165f5260205260405f20845f526020528260405f205560405192835216907fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a760203392a4602060405160018152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576125ab612d3f565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d7576107a260209161342d565b346103305760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576024356004356040519160408360208152826020820152019060051b8301916001602060408501935b835481520191019084838210156109cc57506020600191612635565b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305773ffffffffffffffffffffffffffffffffffffffff61269d612d3f565b6126ab825f54163314613007565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc5f80a2005b34610330576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305761273536612e81565b60c4359060a43560e43567ffffffffffffffff81116103305761275c903690600401612f4d565b9190937fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d75761278e61350f565b60a0842094855f52600660205260405f20946127a986613576565b60808101805173ffffffffffffffffffffffffffffffffffffffff811690813303612943575b50506fffffffffffffffffffffffffffffffff60038801541697881561291b576020986127fb876130aa565b5f03612806876130aa565b5f036fffffffffffffffffffffffffffffffff169060801b179887612907575b866128f2575b5050612839338985613652565b60405190868252858a8301527f29ef05caaff9404b7cb6d1c0e9bbae9eaa7ab2541feba1a9c4248594c08156cb60403393a3519273ffffffffffffffffffffffffffffffffffffffff841693843303612897575b8888604051908152f35b6010166128a5575b8061288d565b6128e6956112aa93611f36926040519788957fe1b4af69000000000000000000000000000000000000000000000000000000008d88015233602488016135bc565b5082808080808061289f565b600201908660801b048154019055898061282c565b60018101828960801b048154019055612826565b7fa74f97ab000000000000000000000000000000000000000000000000000000005f5260045ffd5b602016612951575b806127cf565b6040517fb6a8b0fa000000000000000000000000000000000000000000000000000000006020820152612994916112aa82611f368b898b8d8b33602488016135bc565b508861294b565b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057600435545f5260205ff35b34610330576129e336612d85565b907fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d7577f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac7288596103ed73ffffffffffffffffffffffffffffffffffffffff805f941695612a62612a55876130aa565b8603600f0b3390896130f0565b16938484526004602052604084208685526020526040842061025f828254612ffa565b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330577fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d75760206107a23361342d565b346103305760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033057612b17612d3f565b612b1f612d62565b604435907fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104d757610e2f92612b67612b5a846130aa565b5f03600f0b3390836130f0565b6131f8565b346103305773ffffffffffffffffffffffffffffffffffffffff612b8f36612d85565b91929092335f52600460205260405f20845f5260205260405f20612bb4848254612fed565b90551690815f52600460205260405f20835f5260205260405f20612bd9828254612ffa565b9055604080513380825260208201939093527f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac7288599181908101610279565b346103305760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610330576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361033057807f01ffc9a70000000000000000000000000000000000000000000000000000000060209214908115612cab575b506040519015158152f35b7f0f632fb30000000000000000000000000000000000000000000000000000000091501482612ca0565b346103305760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103305760209073ffffffffffffffffffffffffffffffffffffffff612d24612d3f565b165f526004825260405f206024355f52825260405f20548152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361033057565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361033057565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60609101126103305760043573ffffffffffffffffffffffffffffffffffffffff8116810361033057906024359060443590565b6080810190811067ffffffffffffffff821117611eb157604052565b6060810190811067ffffffffffffffff821117611eb157604052565b60a0810190811067ffffffffffffffff821117611eb157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611eb157604052565b60a4359062ffffff8216820361033057565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126103305760405190612eb882612e12565b8160043573ffffffffffffffffffffffffffffffffffffffff8116810361033057815260243573ffffffffffffffffffffffffffffffffffffffff8116810361033057602082015260443562ffffff811681036103305760408201526064358060020b81036103305760608201526084359073ffffffffffffffffffffffffffffffffffffffff821682036103305760800152565b9181601f840112156103305782359167ffffffffffffffff8311610330576020838186019501011161033057565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103305760043567ffffffffffffffff811161033057826023820112156103305780600401359267ffffffffffffffff84116103305760248460051b83010111610330576024019190565b91908203918211611d9457565b91908201809211611d9457565b1561300e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152fd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b6f800000000000000000000000000000008110156130c857600f0b90565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190600f0b9182156131f357613126919073ffffffffffffffffffffffffffffffffffffffff8092165f521660205260405f2090565b613132815c9283613b29565b80915d6131a357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c017f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5d5b565b156131aa57565b60017f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c017f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5d565b505050565b90919073ffffffffffffffffffffffffffffffffffffffff811690816132ea5750505f80808093855af11561322a5750565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011673ffffffffffffffffffffffffffffffffffffffff604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301525f6024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff4b3b1bc0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b60205f60448194968260409573ffffffffffffffffffffffffffffffffffffffff988751998a947fa9059cbb00000000000000000000000000000000000000000000000000000000865216600485015260248401525af13d15601f3d116001855114161716928281528260208201520152156133635750565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d0116604051917f90bfb86500000000000000000000000000000000000000000000000000000000835260048301527fa9059cbb000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c919073ffffffffffffffffffffffffffffffffffffffff8316613482576131a19034935b61347c856130aa565b906130f0565b346134e7576131a1906134be7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955c6134b986613a92565b612fed565b935f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d613473565b7fb0ec849e000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361354e57565b7f0d89438e000000000000000000000000000000000000000000000000000000005f5260045ffd5b5473ffffffffffffffffffffffffffffffffffffffff161561359457565b7f486aa307000000000000000000000000000000000000000000000000000000005f5260045ffd5b91926136376101209473ffffffffffffffffffffffffffffffffffffffff61364f999794168552602085019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60c083015260e082015281610100820152019161306c565b90565b9073ffffffffffffffffffffffffffffffffffffffff60206131a1949361368185848351168660801d906130f0565b01511690600f0b906130f0565b62ffffff16620f424081116136a05750565b7f14002113000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9061364f95936137486101609473ffffffffffffffffffffffffffffffffffffffff61377794168552602085019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051600290810b60c08501526020820151900b60e0840152604081015161010084015260600151610120830152565b81610140820152019161306c565b9081600f0b9182036130c857565b926138419061381261364f99979473ffffffffffffffffffffffffffffffffffffffff6101a09895168752602087019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051600290810b60c08701526020820151900b60e0860152604081015161010086015260600151610120850152565b61014083015261016082015281610180820152019161306c565b939590919296945f9673ffffffffffffffffffffffffffffffffffffffff861633146139ac57885f6040870151135f1461393b5761040087166138a2575b50505050505050565b61392e9799985092613927969594926138ef9261391b956040519788967f9f063efc0000000000000000000000000000000000000000000000000000000060208901523360248901613793565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612e2e565b6002821615159161459f565b80926145bf565b915f808080808080613899565b95949392919061010086166139535750505050505050565b61392e979950869850916138ef916139a09493613927986040519788967f6c2bbe7e0000000000000000000000000000000000000000000000000000000060208901523360248901613793565b6001821615159161459f565b505f96505050505050565b608081161580613a69575b613a3f57604081161580613a5d575b613a3f5761040081161580613a51575b613a3f5761010081161580613a45575b613a3f5773ffffffffffffffffffffffffffffffffffffffff8116613a1f575062ffffff1662800000141590565b613fff161590811591613a30575090565b62800000915062ffffff161490565b50505f90565b506001811615156139f1565b506002811615156139e1565b506004811615156139d1565b506008811615156139c2565b6280000062ffffff821614613a8d5761364f8161368e565b505f90565b73ffffffffffffffffffffffffffffffffffffffff1680613ab257504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9081156124c2575f91613afa575090565b90506020813d602011613b21575b81613b1560209383612e2e565b81010312610330575190565b3d9150613b08565b9190915f8382019384129112908015821691151617611d9457565b6020830151955f9586959194913373ffffffffffffffffffffffffffffffffffffffff851614613d2d5760808416613b7e575b5050505050565b613c66926138ef613c6092613c4c946040519586947f575e24b4000000000000000000000000000000000000000000000000000000006020870152336024870152613c16604487018c73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051151560e487015260208101516101048701526040015173ffffffffffffffffffffffffffffffffffffffff16610124860152565b61014061014485015261016484019161306c565b82613f25565b916060835103613d05576040015162ffffff166280000014613cf9575b600816613c94575b80808080613b77565b604001519250608083901d600f0b8015613c8b57613cb5905f861295613b29565b9315613cf1575f84135b613cc9575f613c8b565b7ffa0b71d6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f8412613cbf565b60608201519350613c83565b7f1e048e1d000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f965086955050505050565b90600f0b90600f0b01907fffffffffffffffffffffffffffffffff8000000000000000000000000000000082126f7fffffffffffffffffffffffffffffff831317611d9457565b9196959394929473ffffffffffffffffffffffffffffffffffffffff83163314613f18578460801d94600f0b938860408516613e40575b50505050505f9481600f0b15801590613e34575b613dd8575b5050509190565b613e0f9395505f60208201511290511515145f14613e17576fffffffffffffffffffffffffffffffff169060801b175b80936145bf565b5f8080613dd1565b906fffffffffffffffffffffffffffffffff169060801b17613e08565b5082600f0b1515613dcc565b613efc613f08946138ef6118ed95613f0e999895613ee1613c16966040519788967fb47b2fb1000000000000000000000000000000000000000000000000000000006020890152336024890152604488019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8c61014485015261016061016485015261018484019161306c565b6004821615159161459f565b90613d3a565b5f80808088613db8565b5050505050909150905f90565b9190918251925f8060208301958682865af115613fc3575050604051917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f3d011683016040523d83523d9060208401915f833e6020845110918215613f8f575b5050613d0557565b5190517fffffffff000000000000000000000000000000000000000000000000000000009182169116141590505f80613f87565b5183517fffffffff00000000000000000000000000000000000000000000000000000000811691600481106140d7575b50507fffffffff000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01169173ffffffffffffffffffffffffffffffffffffffff604051947f90bfb865000000000000000000000000000000000000000000000000000000008652166004850152166024830152608060448301528060a00160648301523d60848301523d5f60a484013e7fa9e35b2f0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffff000000000000000000000000000000000000000000000000000000009250829060040360031b1b16168280613ff3565b919060020b9060020b9081810761413a5705908160081d5f52602052600160ff60405f2092161b8154189055565b601c906044926040519163d4d8f3e683526020830152604082015201fd5b60020b908160ff1d82810118620d89e8811161449e5763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189160028116614482575b60048116614466575b6008811661444a575b6010811661442e575b60208116614412575b604081166143f6575b608081166143da575b61010081166143be575b61020081166143a2575b6104008116614386575b610800811661436a575b611000811661434e575b6120008116614332575b6140008116614316575b61800081166142fa575b6201000081166142de575b6202000081166142c3575b6204000081166142a8575b620800001661428f575b5f12614268575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04614261565b6b048a170391f7dc42444e8fa290910260801c9061425a565b6d2216e584f5fa1ea926041bedfe9890920260801c91614250565b916e5d6af8dedb81196699c329225ee6040260801c91614245565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161423a565b916f31be135f97d08fd981231505542fcfa60260801c9161422f565b916f70d869a156d2a1b890bb3df62baf32f70260801c91614225565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161421b565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91614211565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91614207565b916ff3392b0822b70005940c7a398e4b70f30260801c916141fd565b916ff987a7253ac413176f2b074cf7815e540260801c916141f3565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c916141e9565b916ffe5dee046a99a2a811c461f1969c30530260801c916141df565b916fff2ea16466c96a3843ec78b326b528610260801c916141d6565b916fff973b41fa98c081472e6896dfb254c00260801c916141cd565b916fffcb9843d60f6159c9db58835c9266440260801c916141c4565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916141bb565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916141b2565b916ffff97272373d413259a46990580e213a0260801c916141a9565b827f8b86327a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b905f83600f0b125f146144ff576144f5925f036fffffffffffffffffffffffffffffffff1691615a3d565b5f81126130c85790565b61451b926fffffffffffffffffffffffffffffffff16916159e2565b5f81126130c8575f0390565b905f83600f0b125f14614552576144f5925f036fffffffffffffffffffffffffffffffff1691615b34565b61451b926fffffffffffffffffffffffffffffffff1691615a7d565b906fffffffffffffffffffffffffffffffff90600f0b911601908160801c61459257565b6393dafdf15f526004601cfd5b906145a991613f25565b9015613a8d576040815103613d05576040015190565b6145e2906145d48360801d8260801d03613785565b92600f0b90600f0b03613785565b6fffffffffffffffffffffffffffffffff169060801b1790565b73fffd8963efd1fc6a506488495d951d516396168273ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffd895d830116116148e05777ffffffffffffffffffffffffffffffffffffffff000000008160201b168060ff61467983615bdb565b1691608083106148d457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8182011c5b800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c800260cd1c6604000000000000169d60cc1c6608000000000000169c60cb1c6610000000000000169b60ca1c6620000000000000169a60c91c6640000000000000169960c81c6680000000000000169860c71c670100000000000000169760c61c670200000000000000169660c51c670400000000000000169560c41c670800000000000000169460c31c671000000000000000169360c21c672000000000000000169260c11c674000000000000000169160c01c67800000000000000016907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800160401b1717171717171717171717171717693627a301d71055774c85027ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc556810160801d60020b906fdb2df09e81959a81455e260799a0632f0160801d60020b918282145f146148915750905090565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff6148c584614158565b16116148cf575090565b905090565b905081607f031b6146a9565b73ffffffffffffffffffffffffffffffffffffffff907f61487524000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b811561492c570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6040519290915f61496985612df6565b5f855260208501925f845260408601955f875280968654956040860151159586155f146156f557610fff8860b81c16945b8151925f948a73ffffffffffffffffffffffffffffffffffffffff16918288528b60a01c60020b90526fffffffffffffffffffffffffffffffff60038d0154169052608083015162400000811615155f146156e65762bfffff166149fd8161368e565b61ffff88166156cb575b8096620f424062ffffff8316101561569a575b8451156156845750508861562457606083019073ffffffffffffffffffffffffffffffffffffffff825116818110156155ed5750505173ffffffffffffffffffffffffffffffffffffffff166401000276a38111156155c257505b604051986101008a018a811067ffffffffffffffff821117611eb1576040525f8a525f60208b01525f60408b01525f60608b01525f60808b01525f60a08b01525f60c08b015288155f146155b45760018b0154949390945b60e08b01525b8015801561557a575b6154205788868d8c8e73ffffffffffffffffffffffffffffffffffffffff8351168252602083015160020b602089015160020b90815f8183071291050386155f14615275576fffffffffffffffffffffffffffffffff937ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761860409460019484600560ff60609716938260020b60081d890b5f5201602052875f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8460ff031c9054169283151593845f146152635790614bb760ff92615bdb565b90031660020b900360020b0260020b5b905b15158684015260020b8060208401521315615238575b620d89e8602082015160020b121561522a575b73ffffffffffffffffffffffffffffffffffffffff614c17602083015160020b614158565b16918291015273ffffffffffffffffffffffffffffffffffffffff8551169673ffffffffffffffffffffffffffffffffffffffff60608c0151169283911516818310189118021892015116928d73ffffffffffffffffffffffffffffffffffffffff8316821015915f87125f1461507f5762ffffff8516620f424003614c9f81895f03615785565b94841561506e57614cb1888483615a7d565b955b868110614fb257509660a093929173ffffffffffffffffffffffffffffffffffffffff98978891620f424062ffffff8316145f14614f9e575050865b955b15614f905791614d0092615a3d565b925b60c0820152015260808d0152168c525f8351135f14614f605760a08a0151905f82126130c8570392614d3d60808b015160c08c015190612ffa565b5f81126130c8578103908113600116611d9457935b61ffff8716614f18575b6fffffffffffffffffffffffffffffffff60408d01511680614efe575b5073ffffffffffffffffffffffffffffffffffffffff8c511673ffffffffffffffffffffffffffffffffffffffff60608c01511681145f14614ec2575060408a0151614e10575b88614e03577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208b015160020b0160020b5b60020b60208d01525b9392614ad3565b60208a015160020b614df3565b88614e96576fffffffffffffffffffffffffffffffff614e7d8d8d8d600460e08201519260206002820154935b015160020b60020b5f520160205260405f2091600183019081549003905560028201908154900390555460801d908c15614e88575b60400151831661456e565b1660408d0152614dc0565b5f91909103600f0b90614e72565b6fffffffffffffffffffffffffffffffff614e7d8d8d8d6004600183015492602060e084015193614e3d565b73ffffffffffffffffffffffffffffffffffffffff8b51168103614ee7575b50614dfc565b614ef0906145fc565b60020b60208d01525f614ee1565b60c08b015160801b0460e08b01510160e08b01525f614d79565b9662ffffff861661ffff881603614f435760c08a0151905b8160c08c01510360c08c01520196614d5c565b620f424060808b015161ffff89169060c08d015101020490614f30565b60808a015160c08b015101905f82126130c857019260a08a01515f81126130c857614f8a91613b29565b93614d52565b614f9992615b34565b614d00565b62ffffff614fad921689615c68565b614cef565b9650505092505082918415811517615061578e60a09173ffffffffffffffffffffffffffffffffffffffff96845f14614ffc57614ff0878284615d07565b80978a015f0395614cf1565b87871161503a576150356150306150286fffffffffffffffffffffffffffffffff84168a60601b614922565b8a8516612ffa565b615d9b565b614ff0565b61503561503061505c6fffffffffffffffffffffffffffffffff84168a61588a565b615028565b634f2461b85f526004601cfd5b6150798882856159e2565b95614cb3565b9193509190831561521957615095858284615a3d565b915b8287106150f7579073ffffffffffffffffffffffffffffffffffffffff9560a09280965b156150e857916150ca92615a7d565b925b6150e362ffffff8d16620f42408190039086615c68565b614d02565b6150f1926159e2565b926150cc565b50915050838315821517615061578d83156151ef575073ffffffffffffffffffffffffffffffffffffffff851161519c578460601b6fffffffffffffffffffffffffffffffff851680820615159104015b73ffffffffffffffffffffffffffffffffffffffff8316928184111561518f578f939573ffffffffffffffffffffffffffffffffffffffff60a093819803165b80966150bb565b634323a5555f526004601cfd5b6fffffffffffffffffffffffffffffffff84166151c7816c0100000000000000000000000088615943565b90801561492c576c010000000000000000000000008709156151485760010180615148575f80fd5b9180856152148873ffffffffffffffffffffffffffffffffffffffff9860a095615c91565b615188565b615224858383615b34565b91615097565b620d89e86020820152614bf2565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276186020820152614bdf565b5060020b900360020b0260020b614bc7565b60019194939650600592955001938460020b60081d60010b5f520160205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600160ff86161b0119905416908d8b831592831597885f146153c15750505050610330578f9160018f8f96907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276186060928f989560409660ff896fffffffffffffffffffffffffffffffff9a5f03166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f85851693831c63d76453e004161a17031660020b9060020b0160020b0260020b5b90614bc9565b90956fffffffffffffffffffffffffffffffff955060409450600193987ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618918960ff6060969b811681031660020b9060020b0160020b0260020b6153bb565b949891955099969298919598602088015160a01b76ffffff0000000000000000000000000000000000000000167fffffffffffffffffff000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8a51169216171782556fffffffffffffffffffffffffffffffff6003830154166fffffffffffffffffffffffffffffffff604089015116809103615535575b5082156155265760e060029101519101555b825190155f82121461551057506154ee6154f69293613785565b925103613785565b6fffffffffffffffffffffffffffffffff169060801b1793565b6154f69250906155209103613785565b91613785565b60e060019101519101556154d4565b6fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff000000000000000000000000000000006003840154161760038301555f6154c2565b5073ffffffffffffffffffffffffffffffffffffffff8c511673ffffffffffffffffffffffffffffffffffffffff60608501511614614adc565b60028b015494939094614acd565b7f9e4d7cc7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60449250604051917f7c9c6e8f00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b606083019073ffffffffffffffffffffffffffffffffffffffff825116818111156155ed5750505173ffffffffffffffffffffffffffffffffffffffff1673fffd8963efd1fc6a506488495d951d5263988d268110156155c25750614a75565b9a509a50509950505050505050505f925f929190565b5f85511315614a1a577f96206246000000000000000000000000000000000000000000000000000000005f5260045ffd5b62ffffff610fff89169116620f424081830204910103614a07565b508960d01c62ffffff166149fd565b610fff8860c41c169461499a565b90808202917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828209918380841093039280840393847001000000000000000000000000000000001115610330571461577c57700100000000000000000000000000000000910990828211900360801b910360801c1790565b50505060801c90565b818102907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83820990828083109203918083039283620f424011156103305714615804577fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c2613993620f4240910990828211900360fa1b910360061c170290565b5050620f424091500490565b90808202917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828209918380841093039280840393846c0100000000000000000000000011156103305714615881576c01000000000000000000000000910990828211900360a01b910360601c1790565b50505060601c90565b908160601b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c01000000000000000000000000840992828085109403938085039485841115610330571461593c576c0100000000000000000000000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b91818302917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8185099383808610950394808603958685111561033057146159da579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b6fffffffffffffffffffffffffffffffff6c010000000000000000000000009173ffffffffffffffffffffffffffffffffffffffff80600195169116038060ff1d90810118931692615a348185615810565b93091515160190565b6fffffffffffffffffffffffffffffffff9073ffffffffffffffffffffffffffffffffffffffff8061364f9594169116038060ff1d908101189116615810565b9073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff831611615b2e575b73ffffffffffffffffffffffffffffffffffffffff8216928315615b22577bffffffffffffffffffffffffffffffff00000000000000000000000073ffffffffffffffffffffffffffffffffffffffff615b16948185169403169160601b16615c68565b90808206151591040190565b62bfc9215f526004601cfd5b90615ab2565b73ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff821611615bd5575b73ffffffffffffffffffffffffffffffffffffffff8116918215615b225761364f937bffffffffffffffffffffffffffffffff00000000000000000000000073ffffffffffffffffffffffffffffffffffffffff615bd0948185169403169160601b16615943565b614922565b90615b68565b8015610330577f07060605060205000602030205040001060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a1790565b929190615c76828286615943565b93821561492c5709615c8457565b9060010190811561033057565b91908115615d02577bffffffffffffffffffffffffffffffff00000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9160601b169216918282029183838311918404141615615cf55761364f9261503092820391615c68565b63f5c787f15f526004601cfd5b505090565b90918015615d955773ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffffffffffffffffffff000000000000000000000000819460601b16921680820281615d578483614922565b14615d7d575b5090615d6c615d719284614922565b612ffa565b80820615159104011690565b8301838110615d5d579150615d9192615c68565b1690565b50905090565b9073ffffffffffffffffffffffffffffffffffffffff82169182036130c85756fea164736f6c634300081a000a'; } } diff --git a/src/briefcase/deployers/v4-periphery/PositionDescriptorDeployer.sol b/src/briefcase/deployers/v4-periphery/PositionDescriptorDeployer.sol index 11789afb..64b98301 100644 --- a/src/briefcase/deployers/v4-periphery/PositionDescriptorDeployer.sol +++ b/src/briefcase/deployers/v4-periphery/PositionDescriptorDeployer.sol @@ -25,6 +25,7 @@ library PositionDescriptorDeployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'60e0346100b357601f615ed138819003918201601f19168301916001600160401b038311848410176100b7578084926060946040528339810103126100b3578051906001600160a01b03821682036100b3576020810151906001600160a01b03821682036100b357604001519160c05260805260a052604051615e0590816100cc8239608051818181607a0152613f05015260a05181818161402c0152614082015260c0518181816101530152613d6c0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe610440806040526004361015610013575f80fd5b5f60a0525f3560e01c908163166c597814613dc257508063b7af3cdc14613d9b578063dc4c90d314613d57578063dee91a2c14613d0e578063e9dc6375146100af5763eb6d3a1114610063575f80fd5b346100a95760a0513660031901126100a9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60a05180fd5b34613c29576040366003190112613c29576004356001600160a01b03811690819003613c2957602460c081359260405192838092637ba03aad60e01b82528660048301525afa8015613c35575f915f91613c53575b5066ffffffffffffff19811615613c405760a08220604051602081019182526006604082015260408152610139606082613f42565b519020604051631e2eaeaf60e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693909290602084602481885afa938415613c35575f94613bfd575b50815160208301516001600160a01b039182169691166101b587613e2a565b6101be82613e2a565b129687159188613bf65780925b15613bee5750955b6101e46101de614001565b836140cb565b956101f66101f0614001565b896140cb565b6101ff84614254565b976102098a614254565b99606089015160020b9562ffffff60408b01511699608060018060a01b0391015116986040516102c0526101e06102c051016102c051811060018060401b03821117613b82576040526102c05152600160a01b60019003166102c05160200152600160a01b60019003166102c051604001526102c051606001526102c051608001526102c05160a0019660ff1687526102c05160c0019760ff1688526102c05160e0019889528060081c60020b6102c051610100015260201c60020b6102c051610120015260a01c60020b6102c05161014001526102c0516101600152826102c05161018001526102c0516101a001526102c0516101c0015261030b9061458d565b906102c0516060015161031d90614828565b916102c0516080015161032f90614828565b93855115805f149660036020600298602a82849a816103bc61046b9f9c60019b610388849f9c859d613bdd576101006102c051015160020b5b6101606102c051015160020b9160ff85511690159260ff87511692614d92565b9a51158015613bcb576101206102c051015160020b915b60ff806101606102c051015160020b925116921594511692614d92565b9a6040516103e0526902ab734b9bbb0b81016960b51b826103e0510152805191829101856103e051015e6103e05101906201016960ed1b84830152805192839101602d83015e010190602f60f81b84830152805192839101600483015e0101906201016960ed1b84830152805192839101600483015e010190611e1f60f11b84830152805192839101600583015e01015f828201526103e051900301601f1981016103e051526103e051613f42565b6105ec6002605961048260606102c0510151614828565b61049260806102c0510151614828565b90600160206104af828060a01b036101a06102c051015116615481565b604051610400527f54686973204e465420726570726573656e74732061206c697175696469747920826104005101527803837b9b4ba34b7b71034b71030902ab734b9bbb0b8103b1a1603d1b604061040051015285828551968187019780898561040051015e610400510190602d60f81b84830152805192839101605a83015e010190660103837b7b617160cd1b848301527f546865206f776e6572206f662074686973204e46542063616e206d6f646966796008830152791037b9103932b232b2b6903a3432903837b9b4ba34b7b7172e3760311b60288301527702e372837b7b61026b0b730b3b2b91020b2323932b9b99d160451b6042830152805192839101605a83015e010190612e3760f11b84830152518092605b83015e01015f8282015261040051900301601f198101610400515261040051613f42565b61085c60ac600c8060206106036102c0515161492e565b60108261061660806102c0510151614828565b6102c0518201516001600160a01b031680613bb95750600a826106376142d5565b925b6102c051604001516001600160a01b031680613ba8575060028261065b6142d5565b6102c0516101c001516001600160a01b031680613b965750602a8261067e6142f9565b955b8161069762ffffff6101806102c05101511661458d565b9a6040516103c0526901020b2323932b9b99d160b51b826103c0510152805191829101856103c051015e6103c0510190612e3760f11b84830152805192839101602c83015e0101906901020b2323932b9b99d160b51b848301528051928391018d83015e0101906f02e372437b7b59020b2323932b9b99d160851b84830152805192839101601a83015e0101906b02e372332b2902a34b2b91d160a51b84830152805192839101601c83015e0101906b02e372a37b5b2b71024a21d160a51b84830152805192839101601883015e0101632e372e3760e11b828201527fe29aa0efb88f20444953434c41494d45523a204475652064696c6967656e636560108201527f20697320696d7065726174697665207768656e20617373657373696e6720746860308201527f6973204e46542e204d616b6520737572652063757272656e637920616464726560508201527f73736573206d61746368207468652065787065637465642063757272656e636960708201527f65732c2061732063757272656e63792073796d626f6c73206d6179206265206960908201526736b4ba30ba32b21760c11b60b08201526103c051900301608c81016103c05152016103c051613f42565b6102c05160200151610876906001600160a01b0316615481565b6102c05160400151610890906001600160a01b0316615481565b610320526102c0516101c08101516001600160a01b03166102e05260608101516080820151610180909201519091906108cd9062ffffff1661458d565b6101006102c051015160020b916101206102c051015160020b610360526101606102c051015160020b610380526109136101406102c051015160020b610360518561553d565b610420526102c051519361093560018060a01b0360206102c051015116615564565b610300526102c05160400151610953906001600160a01b0316615564565b6102c05160200151909690610970906001600160a01b03166155c3565b610260526102c0516040015161098e906001600160a01b03166155c3565b610280526102c0516020810151905160ff916109af919060101c8316614a76565b6101026103a08190529190068181029181159183041417156137e25760ff610340526109e36109e891610340519004614527565b61492e565b6102a0526102c051604081015190516103405191610a14919060101c83166001600160901b0316614a76565b6101806102408190529190068181029181159183041417156137e2576103405115613b15576109e3610a4b91610340519004614535565b610220526102c05160208181015191516103405192610a75921c83166001600160801b0316614a76565b6103a0519190068181029181159183041417156137e2576103405115613b15576109e3610aa791610340519004614527565b610200526102c051604081015190516103405191610ad3919060201c83166001600160801b0316614a76565b610240519190068181029181159183041417156137e2576103405115613b15576109e3610b0591610340519004614535565b6101e0526102c051602081015190516103405191610b31919060301c83166001600160701b0316614a76565b6103a0519190068181029181159183041417156137e2576103405115613b15576109e3610b6391610340519004614527565b6101c0526102c051604081015190516103405191610b8f919060301c83166001600160701b0316614a76565b610240519190068181029181159183041417156137e2576103405115613b15576109e3610bc191610340519004614535565b6101a0526040516101808190526102a081019081106001600160401b03821117613b825760405261018051526103205160206101805101526102e05160406101805101526060610180510152608061018051015260a061018051015260c06101805101526103605160e061018051015261038051610100610180510152610420515f0b6101206101805101526101406101805101526103005161016061018051015261024051610180510152610260516101a0610180510152610280516101c06101805101526102a0516101e061018051015261022051610200610180510152610200516102206101805101526101e0516102406101805101526101c0516102606101805101526101a051610280610180510152611c206101e4610655603f6020610da36040515f80516020615cb9833981519152838201525f80516020615db983398151915260408201527f2f2f7777772e77332e6f72672f323030302f737667273e3c726563742077696460608201527f74683d27323930707827206865696768743d273530307078272066696c6c3d276080820152602360f81b60a0820152610d9e600960a1836103005151808861030051018484015e81016813979f1e17b9bb339f60b91b838201520301601619810184520182613f42565b614a89565b603e82610e4f81610d9e600960136101e0610180510151600685610200610180510151816102405161018051015191604051998a96610de3828901615661565b90805192839101825e019065272063793d2760d01b82528051928391018683015e0190722720723d273132307078272066696c6c3d272360681b84830152805192839101601983015e01016813979f1e17b9bb339f60b91b838201520301601619810184520182613f42565b8282610e8d81610d9e60096013610220610180510151600685610240610180510151816101a061018051015191604051998a96610de3828901615661565b60f382610f3881610d9e60096013610260610180510151600685610280610180510151816101c061018051015191604051998a96610ecc828901615661565b90805192839101825e019065272063793d2760d01b82528051928391018683015e0190722720723d273130307078272066696c6c3d272360681b84830152805192839101601983015e01016813979f1e17b9bb339f60b91b838201520301601619810184520182613f42565b95816101606101805101519a60405160c0527f3c7376672077696474683d2232393022206865696768743d22353030222076698260c05101527f6577426f783d2230203020323930203530302220786d6c6e733d22687474703a604060c0510152751797bbbbbb973b999737b933979918181817b9bb339160511b606060c05101527f20786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f607660c05101526b189c9c9c97bc3634b735939f60a11b609660c0510152651e3232b3399f60d11b60a260c05101527f3c66696c7465722069643d226631223e3c6665496d61676520726573756c743d60a860c05101527f2270302220786c696e6b3a687265663d22646174613a696d6167652f7376672b60c860c05101526a1e1b5b0ed8985cd94d8d0b60aa1b60e860c05101528051918291018560c051015e60c05101907f222f3e3c6665496d61676520726573756c743d2270312220786c696e6b3a6872848301525f80516020615c9983398151915261011383015280519283910161013183015e0101907f222f3e3c6665496d61676520726573756c743d2270322220786c696e6b3a6872848301525f80516020615c99833981519152605e830152805192839101607c83015e010190631110179f60e11b848301527f3c6665496d61676520726573756c743d2270332220786c696e6b3a687265663d60428301527a0899185d184e9a5b5859d94bdcdd99cade1b5b0ed8985cd94d8d0b602a1b6062830152805192839101607d83015e7f22202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e3d22910191909101848101919091527f70302220696e323d22703122202f3e3c6665426c656e64206d6f64653d226578605f8201527f636c7573696f6e2220696e323d22703222202f3e3c6665426c656e64206d6f64607f8201527f653d226f7665726c61792220696e323d2270332220726573756c743d22626c65609f820152780373227baba1110179f1e3332a3b0bab9b9b4b0b721363ab91603d1b60bf8201527f696e3d22626c656e644f75742220737464446576696174696f6e3d223432222060d88201527f2f3e3c2f66696c7465723e203c636c6970506174682069643d22636f726e657260f88201527f73223e3c726563742077696474683d2232393022206865696768743d223530306101188201527f222072783d223432222072793d22343222202f3e3c2f636c6970506174683e006101388201527f3c706174682069643d22746578742d706174682d612220643d224d34302031326101578201527f20483235302041323820323820302030203120323738203430205634363020416101778201527f32382032382030203020312032353020343838204834302041323820323820306101978201527f20302031203132203436302056343020413238203238203020302031203430206101b7820152671899103d1110179f60c11b6101d78201527f3c706174682069643d226d696e696d61702220643d224d3233342034343443326101df8201527f3334203435372e393439203234322e323120343633203235332034363322202f6101ff820152601f60f91b61021f8201527f3c66696c7465722069643d22746f702d726567696f6e2d626c7572223e3c66656102208201527f476175737369616e426c757220696e3d22536f757263654772617068696322206102408201527f737464446576696174696f6e3d22323422202f3e3c2f66696c7465723e0000006102608201527f3c6c696e6561724772616469656e742069643d22677261642d7570222078313d61027d8201527f2231222078323d2230222079313d2231222079323d2230223e3c73746f70206f61029d8201527f66667365743d22302e30222073746f702d636f6c6f723d2277686974652220736102bd820152713a37b816b7b830b1b4ba3c9e91189110179f60711b6102dd8201527f3c73746f70206f66667365743d222e39222073746f702d636f6c6f723d2277686102ef8201527f697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e65617261030f8201526823b930b234b2b73a1f60b91b61032f8201527f3c6c696e6561724772616469656e742069643d22677261642d646f776e2220786103388201527f313d2230222078323d2231222079313d2230222079323d2231223e3c73746f706103588201527f206f66667365743d22302e30222073746f702d636f6c6f723d227768697465226103788201527f2073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365746103988201527f3d22302e39222073746f702d636f6c6f723d227768697465222073746f702d6f6103b88201527f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e00006103d88201527f3c6d61736b2069643d22666164652d757022206d61736b436f6e74656e74556e6103f68201527f6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696104168201527f6474683d223122206865696768743d2231222066696c6c3d2275726c282367726104368201527030b216bab8149110179f1e17b6b0b9b59f60791b6104568201527f3c6d61736b2069643d22666164652d646f776e22206d61736b436f6e74656e746104678201527f556e6974733d226f626a656374426f756e64696e67426f78223e3c72656374206104878201527f77696474683d223122206865696768743d2231222066696c6c3d2275726c28236104a78201527433b930b216b237bbb7149110179f1e17b6b0b9b59f60591b6104c78201527f3c6d61736b2069643d226e6f6e6522206d61736b436f6e74656e74556e6974736104dc8201527f3d226f626a656374426f756e64696e67426f78223e3c726563742077696474686104fc8201527f3d223122206865696768743d2231222066696c6c3d22776869746522202f3e3c61051c8201526517b6b0b9b59f60d11b61053c8201527f3c6c696e6561724772616469656e742069643d22677261642d73796d626f6c226105428201527f3e3c73746f70206f66667365743d22302e37222073746f702d636f6c6f723d226105628201527f7768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206105828201527f6f66667365743d222e3935222073746f702d636f6c6f723d22776869746522206105a28201527f73746f702d6f7061636974793d223022202f3e3c2f6c696e65617247726164696105c28201526332b73a1f60e11b6105e28201527f3c6d61736b2069643d22666164652d73796d626f6c22206d61736b436f6e74656105e68201527f6e74556e6974733d227573657253706163654f6e557365223e3c7265637420776106068201527f696474683d22323930707822206865696768743d223230307078222066696c6c6106268201527f3d2275726c2823677261642d73796d626f6c2922202f3e3c2f6d61736b3e3c2f610646820152643232b3399f60d91b6106668201527f3c6720636c69702d706174683d2275726c2823636f726e65727329223e00000061066b8201526b1e3932b1ba103334b6361e9160a11b610688820152815192909183910161069483015e01017f2220783d223070782220793d22307078222077696474683d223239307078222082820152703432b4b3b43a1e911a9818383c1110179f60791b6106758201527f3c72656374207374796c653d2266696c7465723a2075726c28236631292220786106868201527f3d223070782220793d22307078222077696474683d22323930707822206865696106a68201526d33b43a1e911a9818383c1110179f60911b6106c68201527f203c67207374796c653d2266696c7465723a75726c2823746f702d726567696f6106d48201527f6e2d626c7572293b207472616e73666f726d3a7363616c6528312e35293b20746106f48201527f72616e73666f726d2d6f726967696e3a63656e74657220746f703b223e0000006107148201527f3c726563742066696c6c3d226e6f6e652220783d223070782220793d223070786107318201527f222077696474683d22323930707822206865696768743d22353030707822202f610751820152601f60f91b6107718201527f3c656c6c697073652063783d22353025222063793d22307078222072783d22316107728201527f38307078222072793d223132307078222066696c6c3d222330303022206f70616107928201527131b4ba3c9e9118171c1a9110179f1e17b39f60711b6107b28201527f3c7265637420783d22302220793d2230222077696474683d22323930222068656107c48201527f696768743d22353030222072783d223432222072793d223432222066696c6c3d6107e48201527f227267626128302c302c302c302922207374726f6b653d2272676261283235356108048201527416191a9a96191a9a96181719149110179f1e17b39f60591b61082482015260c0519003016101c4810160c051520160c051613f42565b61217f608b6005610100610180515160206101805101518360606101805101519160806101805101519060405186527f3c7465787420746578742d72656e646572696e673d226f7074696d697a6553706020875101526432b2b2111f60d91b6040875101527f3c74657874506174682073746172744f66667365743d222d31303025222066696045875101527f6c6c3d2277686974652220666f6e742d66616d696c793d2227436f75726965726065875101527f204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d223130706085875101527f782220786c696e6b3a687265663d2223746578742d706174682d61223e00000060a5875101528281516020830190808260c28b51015e8851019264010714051160dd1b60c285015260c285516020870195818760c783015e0101905f80516020615c79833981519152848301525f80516020615d5983398151915260258301525f80516020615d398339815191526045830152783832b0ba21b7bab73a1e9134b73232b334b734ba329110179f60391b60658301527f3c2f74657874506174683e203c74657874506174682073746172744f66667365607e8301527f743d223025222066696c6c3d2277686974652220666f6e742d66616d696c793d609e8301527f2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d60be8301527f73697a653d22313070782220786c696e6b3a687265663d2223746578742d706160de830152653a3416b0911f60d11b60fe83015251809261010483015e01019164010714051160dd1b6103405184015251809161010484015e610340519101015f80516020615c79833981519152828201525f80516020615d5983398151915260258201525f80516020615d3983398151915260458201527f70656174436f756e743d22696e646566696e69746522202f3e203c2f746578746065820152642830ba341f60d91b60858201527f3c74657874506174682073746172744f66667365743d22353025222066696c6c608a8201527f3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e60aa8201527f6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782260ca8201527a103c3634b7359d343932b31e9111ba32bc3a16b830ba3416b0911f60291b60ea8201528184516020860192818461010583015e01019364010714051160dd1b868601528584516020860196818861010583015e0101905f80516020615c79833981519152848301525f80516020615d5983398151915260258301527f6f3d22313030252220626567696e3d22307322206475723d223330732200000060458301527f20726570656174436f756e743d22696e646566696e69746522202f3e3c2f746560628301527f7874506174683e3c74657874506174682073746172744f66667365743d222d3560828301527f3025222066696c6c3d2277686974652220666f6e742d66616d696c793d22274360a28301527f6f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a60c28301527f653d22313070782220786c696e6b3a687265663d2223746578742d706174682d60e28301526230911f60e91b6103a05183015251809261010583015e01019064010714051160dd1b8483015251809261010583015e01015f80516020615c79833981519152828201525f80516020615d5983398151915260258201525f80516020615d3983398151915260458201527f70656174436f756e743d22696e646566696e69746522202f3e3c2f746578745060658201526a30ba341f1e17ba32bc3a1f60a91b608582015261010051900301606b810161010051520161010051613f42565b6020612418607e60776060610180510151600185608061018051015160ed8260a0610180510151926040519a8b977f3c67206d61736b3d2275726c2823666164652d73796d626f6c29223e3c726563828a01527f742066696c6c3d226e6f6e652220783d223070782220793d223070782220776960408a01527f6474683d22323930707822206865696768743d22323030707822202f3e203c7460608a01527f65787420793d22373070782220783d2233327078222066696c6c3d227768697460808a01527f652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d60a08a01527f6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e7460c08a01526c16b9b4bd329e91199b383c111f60991b60e08a0152805191829101858a015e870190602f60f81b8483015280519283910160ee83015e0101907f3c2f746578743e3c7465787420793d2231313570782220783d22333270782220848301527f66696c6c3d2277686974652220666f6e742d66616d696c793d2227436f75726960218301527f6572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d6041830152761119181811103337b73a16b9b4bd329e91199b383c111f60491b6061830152805192839101607883015e01016a1e17ba32bc3a1f1e17b39f60a91b838201527f3c7265637420783d2231362220793d223136222077696474683d22323538222060828201527f6865696768743d22343638222072783d223236222072793d223236222066696c60a28201527f6c3d227267626128302c302c302c302922207374726f6b653d2272676261283260c2820152721a9a96191a9a96191a9a96181719149110179f60691b60e28201520301605e810184520182613f42565b60c061018051015160020b9060e061018051015160020b9161010061018051015160020b906101206101805101515f0b90600182145f14613b2957604051612461604082613f42565b6008815267023666164652d75760c41b6020820152945b03627fffff198112627fffff8213176137e25760020b908215613b1557627fffff1982145f198414166137e25761293f926048920560020b600481136139365750607960206040516124cb604082613f42565b601a8152794d3120314334312034312031303520313035203134352031343560301b82820152925b60406101608190528051906125089082613f42565b6002815261373360f01b838201908152610160518051939061252a9085613f42565b60038452848401906203139360ec1b825261016051519261254e6101605185613f42565b60038452868401926232313760e81b84526101605151936125726101605186613f42565b6003855288850191620ccccd60ea1b8352600185146001860361392c575b15613840575050505092602786602a946008828196602c82809c6126c39c5f191493845f14613839578a5b85156138325782985b861561382a5750945b156138225750955b61016051516b1e31b4b931b6329031bc1e9160a11b8f8201528a51909e8f9b829101858d015e8a019067383c111031bc9e9160c11b84830152805192839101603483015e0101907f70782220723d22347078222066696c6c3d22776869746522202f3e3c63697263848301526636329031bc1e9160c91b6028830152805192839101602f83015e01019067383c111031bc9e9160c11b84830152805192839101602f83015e01017f70782220723d2232347078222066696c6c3d226e6f6e6522207374726f6b653d8382015269113bb434ba329110179f60b11b60288201520301600a810184520182613f42565b606561016051519889956c078ce40dac2e6d67a44eae4d85609b1b85880152858251868401908082602d8c015e89019361149160f11b602d8601525f80516020615dd9833981519152602f8601527f2c313839707829223e3c7265637420783d222d313670782220793d222d313670604f8601527f78222077696474683d22313830707822206865696768743d2231383070782220606f860152763334b6361e913737b7329110179f1e3830ba3410321e9160491b608f860152602d845189860196818860a683015e0101907f22207374726f6b653d227267626128302c302c302c302e332922207374726f6b848301527f652d77696474683d2233327078222066696c6c3d226e6f6e6522207374726f6b6099830152733296b634b732b1b0b81e913937bab7321110179f60611b60b9830152700785ece7c78ce40dac2e6d67a44eae4d85607b1b60cd83015251809260de83015e01019061149160f11b848301525f80516020615dd983398151915260678301526816189c1cb83c14911f60b91b60878301527f3c7265637420783d222d313670782220793d222d31367078222077696474683d60908301527f22313830707822206865696768743d223138307078222066696c6c3d226e6f6e60b083015264329110179f60d91b60d0830152681e3830ba3410321e9160b91b60d583015251809260de83015e0101907f22207374726f6b653d2272676261283235352c3235352c3235352c3129222066848301527f696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e646099830152671110179f1e17b39f60c11b60b983015280519283910160c183015e01015f838201520301601f198101845283613f42565b61295061014061018051015161492e565b60018060a01b0360406101805101511660c061018051015160020b9160e061018051015160020b9261298183615481565b60e05261298d8161591c565b6129968561591c565b928051946004860186116137e2576136bb576129b06142f9565b80519360058501928386116136a357845191600a83018084116136a357885195600a8701928388116136a35760049c6129e891615a45565b9c909b6008810191829101116136a357806007029060078204036136a357612a1160099161492e565b99018091116136a357806007029060078204036136a357612a33600e9161492e565b94018091116136a357806007029060078204036136a357612a55600e9161492e565b95018091116136a35760078181020481036136a357600702612a769061492e565b9561016051516080526080516020015f80516020615d9983398151915290526c1cb83c1610199a9a383c14911f60991b6101605160805101526c1e3932b1ba103bb4b23a341e9160991b608051604d015280516020819201608051605a015e60805101605a0160a0518152612aea906156bc565b5f80516020615cf98339815191528152602081015f80516020615cd983398151915290526101605181015f80516020615d798339815191529052606081015f80516020615d198339815191529052608081016c1f24a21d101e17ba39b830b71f60991b905281516020819301608d83015e6a1e17ba32bc3a1f1e17b39f60a91b608d92909101918201525f80516020615d9983398151915260988201526c1cb83c1610199c1a383c14911f60991b60b88201526c1e3932b1ba103bb4b23a341e9160991b60c5820152815191829060200160d283015e01608d0160450160a0518152612bd5906156bc565b5f80516020615cf98339815191528152602081015f80516020615cd983398151915290526101605181015f80516020615d798339815191529052606081015f80516020615d198339815191529052608081016e1f2437b7b59d101e17ba39b830b71f60891b905281516020819301608f83015e6a1e17ba32bc3a1f1e17b39f60a91b608f92909101918201525f80516020615d99833981519152609a8201526c1cb83c16101a189a383c14911f60991b60ba8201526c1e3932b1ba103bb4b23a341e9160991b60c7820152815191829060200160d483015e01608f0160450160a0518152612cc2906156bc565b5f80516020615cf98339815191528152602081015f80516020615cd983398151915290526101605181015f80516020615d798339815191529052606081015f80516020615d19833981519152905260808101721f26b4b7102a34b1b59d101e17ba39b830b71f60691b905281516020819301609383015e6a1e17ba32bc3a1f1e17b39f60a91b609392909101918201525f80516020615d99833981519152609e8201526c1cb83c16101a1a1a383c14911f60991b60be8201526c1e3932b1ba103bb4b23a341e9160991b60cb820152815191829060200160d883015e0160930160450160a0518152612db3906156bc565b5f80516020615cf98339815191528152602081015f80516020615cd983398151915290526101605181015f80516020615d798339815191529052606081015f80516020615d19833981519152905260808101721f26b0bc102a34b1b59d101e17ba39b830b71f60691b905281516020819301609383015e7f3c2f746578743e3c2f673e3c67207374796c653d227472616e73666f726d3a7460939290910191820152773930b739b630ba329419191b383c16101a1999b83c14911f60411b60b38201527f3c726563742077696474683d223336707822206865696768743d22333670782260cb8201527f2072783d22387078222072793d22387078222066696c6c3d226e6f6e6522207360eb8201527f74726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e61010b8201527f3c70617468207374726f6b652d6c696e656361703d22726f756e642220643d2261012b8201527f4d38203943382e30303030342032322e393439342031362e323039392032382061014b8201527f3237203238222066696c6c3d226e6f6e6522207374726f6b653d22776869746561016b820152631110179f60e11b61018b8201527f3c636972636c65207374796c653d227472616e73666f726d3a7472616e736c6161018f820152640e8ca66c8560db1b6101af82015281519182906020016101b483015e016093016101218101630383c16160e51b90528151602081930161012583015e7f70782c2030707829222063783d22307078222063793d223070782220723d2234610125929091019182015275383c11103334b6361e913bb434ba3291179f1e17b39f60511b6101458201526080805161013b9281900392830190525161303b9161015b0190613f42565b61018051610140015191610180516040015160a0515060606101605151906020820192868452600160601b6001900319911b166101605182015260348152613084605482613f42565b5190209280156100a9578060018060801b031060071b81811c60018060401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c610340511060031b17906f8421084210842108cc6318c6db6d54be7b01c1818141808140018080c0814100004181408140c0c100414140c160221b91831c1c601f161a1760011b6101fe811660fe8216036136a35760fe9060a0515016600101906103405182116136a3576103405182161561368b5761360f6020610d9e6002602761353c84610d9e6006829b83603d9b61366c9f61365e9e61034051165f1904115f14613670578161016051517f3c67207374796c653d227472616e73666f726d3a7472616e736c617465283232828201527f3670782c20333932707829223e3c726563742077696474683d22333670782220610160518201527f6865696768743d2233367078222072783d22387078222072793d22387078222060608201527f66696c6c3d226e6f6e6522207374726f6b653d2272676261283235352c32353560808201526c16191a9a96181719149110179f60991b60a08201527f3c673e3c70617468207374796c653d227472616e73666f726d3a7472616e736c60ad8201527f617465283670782c367078292220643d224d313220304c31322e36353232203960cd8201527f2e35363538374c313820312e363037374c31332e373831392031302e3231383160ed82015272026191917199c9919901b26189a171a199a189606d1b61010d8201527f31312e333437384c32342031324c31342e343334312031322e363532324c32326101208201527f2e333932332031384c31332e373831392031332e373831394c31382032322e336101408201527f3932334c31322e363532322031342e343334314c31322032344c31312e33343761016082015270382031342e343334314c362032322e333960781b610240518201527f32334c31302e323138312031332e373831394c312e363037372031384c392e356101918201527f363538372031322e363532324c302031324c392e35363538372031312e3334376101b18201527f384c312e3630373720364c31302e323138312031302e323138314c3620312e366101d18201527f3037374c31312e3334373820392e35363538374c313220305a222066696c6c3d6101f182015269113bb434ba329110179f60b11b6102118201527f3c616e696d6174655472616e73666f726d206174747269627574654e616d653d61021b8201527f227472616e73666f726d2220747970653d22726f74617465222066726f6d3d2261023b8201527f302031382031382220746f3d2233363020313820313822206475723d2231307361025b8201527f2220726570656174436f756e743d22696e646566696e697465222f3e3c2f673e61027b820152631e17b39f60e11b61029b82015261027f81526134ac61029f82613f42565b915b61016051519788958160c05151808260c05101838b015e88018181019060a051825261010051518092846101005101905e01019060a0518252805192839101825e019060a0518252805192839101825e0160a05181526080515190818460805101825e019060a0518252805192839101825e01651e17b9bb339f60d11b815203601919810184520182613f42565b6101605151948591683d913730b6b2911d1160b91b82840152601260296103e0515180856103e051018388015e850171111610113232b9b1b934b83a34b7b7111d1160711b8282015261040051519081866104005101603b83015e01018181019060a05182526103c051518092866103c05101905e0101906c1116101134b6b0b3b2911d101160991b82527919185d184e9a5b5859d94bdcdd99cade1b5b0ed8985cd94d8d0b60321b600d8301528051928391018583015e0161227d60f01b838201520301601d19810184520182613f42565b61016051519384917f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000828401528051918291018484015e810160a051838201520301601f198101835282613f42565b610160515191829182613e00565b0390f35b8161016051516136808282613f42565b60a0518152916134ae565b634e487b7160e01b60a051526012600452602460a051fd5b634e487b7160e01b60a051526011600452602460a051fd5b60055f60a0526136cb6005613f65565b610140526101605151610120526136e86101405161012051613f42565b600561012051526101205150601f196137016005613f65565b013660206101205101375f5b8181106137f65750505f60a052600361372581613f65565b61373461016051519182613f42565b818152601f1961374383613f65565b0136602083013760275b602a81106137ac5750602091816137a792508361016051519485926101205151808361012051018487015e8401906217171760e91b83830152805192839101602383015e01015f838201520301601f198101835282613f42565b6129b0565b60ff60f81b6137bd8260e051613fdc565b51169060261981018181116137e2576137db6001935f1a9185613fdc565b530161374d565b634e487b7160e01b5f52601160045260245ffd5b60019060ff60f81b61380a8260e051613fdc565b51165f1a61381b8261012051613fdc565b530161370d565b9050956125d5565b9050946125cd565b81986125c4565b879a6125bb565b61392797945060089591601b97602c88936027979c61016051519d8e9a6b1e31b4b931b6329031bc1e9160a11b60208d0152518091858d015e8a019067383c111031bc9e9160c11b84830152518092603483015e0101907a383c1110391e911a383c11103334b6361e913bb434ba329110179f60291b848301526b1e31b4b931b6329031bc1e9160a11b6023830152518092602f83015e01019067383c111031bc9e9160c11b84830152518092602f83015e01017a383c1110391e911a383c11103334b6361e913bb434ba329110179f60291b838201520301600419810184520182613f42565b6126c3565b505f198514612590565b6008811361397c575060796020604051613951604082613f42565b60198152784d31203143333320343920393720313133203134352031343560381b82820152926124f3565b601081136139c2575060796020604051613997604082613f42565b60198152784d31203143333320353720383920313133203134352031343560381b82820152926124f3565b60208113613a085750607960206040516139dd604082613f42565b60198152784d31203143323520363520383120313231203134352031343560381b82820152926124f3565b60408113613a4e575060796020604051613a23604082613f42565b60198152784d31203143313720373320373320313239203134352031343560381b82820152926124f3565b60808113613a93575060796020604051613a69604082613f42565b60188152774d312031433920383120363520313337203134352031343560401b82820152926124f3565b61010012613ad95760796020604051613aad604082613f42565b601a8152794d31203143312038392035372e3520313435203134352031343560301b82820152926124f3565b60796020604051613aeb604082613f42565b60188152774d312031433120393720343920313435203134352031343560401b82820152926124f3565b634e487b7160e01b5f52601260045260245ffd5b5f198203613b5d57604051613b3f604082613f42565b600a81526911b330b23296b237bbb760b11b60208201525b94612478565b604051613b6b604082613f42565b6005815264236e6f6e6560d81b6020820152613b57565b634e487b7160e01b5f52604160045260245ffd5b82613ba2602a92615481565b95610680565b82613bb4600292615481565b61065b565b82613bc5600a92615481565b92610639565b6101006102c051015160020b9161039f565b6101206102c051015160020b610368565b9050956101d3565b81926101cb565b9093506020813d602011613c2d575b81613c1960209383613f42565b81010312613c2957519285610196565b5f80fd5b3d9150613c0c565b6040513d5f823e3d90fd5b8263ed15e6cf60e01b5f5260045260245ffd5b9150508060c03d60c011613d07575b613c6c8183613f42565b81010360c08112613c295760a013613c29576040519060a082016001600160401b03811183821017613b8257604052613ca4816140b7565b8252613cb2602082016140b7565b6020830152604081015162ffffff81168103613c2957604083015260608101518060020b8103613c295760608301526080810151906001600160a01b0382168203613c295760a0916080840152015183610104565b503d613c62565b34613c29576040366003190112613c2957613d27613dea565b6024356001600160a01b0381168103613c2957613d4e613d48602093613e2a565b91613e2a565b12604051908152f35b34613c29575f366003190112613c29576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34613c29575f366003190112613c295761366c613db6614001565b60405191829182613e00565b34613c29576020366003190112613c2957602090613de6613de1613dea565b613e2a565b8152f35b600435906001600160a01b0382168203613c2957565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b6001600160a01b031680158015613f02575b613efb5760014614613e4e575b505f90565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488103613e70575061012c90565b73dac17f958d2ee523a2206206994597c13d831ec78103613e91575060c890565b736b175474e89094c44da98b954eedeac495271d0f8103613eb25750606490565b738daebade922df735c38c80c7ebd708af50815faa8103613ed4575060c71990565b732260fac5e5542a773aa44fbcfedf7c193bc2c59914613ef4575f613e49565b61012b1990565b5060631990565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168114613e3c565b5f1981146137e25760010190565b601f909101601f19168101906001600160401b03821190821017613b8257604052565b6001600160401b038111613b8257601f01601f191660200190565b613f8a6006613f65565b90613f986040519283613f42565b6006825281601f19613faa6006613f65565b0190602036910137565b90613fbe82613f65565b613fcb6040519182613f42565b8281528092613faa601f1991613f65565b908151811015613fed570160200190565b634e487b7160e01b5f52603260045260245ffd5b5f5b602081108061407b575b156140205761401b90613f34565b614003565b61402981613fb4565b907f0000000000000000000000000000000000000000000000000000000000000000905f5b81811061405b5750505090565b6020811015613fed5780836001921a6140748287613fdc565b530161404e565b15613fed577f0000000000000000000000000000000000000000000000000000000000000000811a60f81b6001600160f81b031916151561400d565b51906001600160a01b0382168203613c2957565b6001600160a01b038116915f9190831561421e57506140e99061431e565b9182511561416b5750600c8251116140ff575090565b9061410a600c613f65565b916141186040519384613f42565b600c8352601f19614129600c613f65565b01366020850137805b600c81106141405750505090565b6001906001600160f81b03196141568286613fdc565b5116831a6141648287613fdc565b5301614132565b915050614176613f80565b905f5b6003811061418657505090565b80601303601381116137e2576001600160fd1b03811681036137e257829060031b1c9060f080600f198416161660ff8316039160ff83116137e257600f6141d09160041c1661561f565b600182901b926001600160ff1b03831683036137e2576141fc915f1a6141f68588613fdc565b5361561f565b91600181018091116137e2576142176001935f1a9186613fdc565b5301614179565b9250505090565b3d1561424f573d9061423682613f65565b916142446040519384613f42565b82523d5f602084013e565b606090565b6001600160a01b038116156142cf575f8091604051602081019063313ce56760e01b825260048152614287602482613f42565b51915afa614293614225565b9015613e49578051602081146142aa575b50505f90565b8160209181010312613c29576020015160ff8111156142c957806142a4565b60ff1690565b50601290565b604051906142e4604083613f42565b60068252654e617469766560d01b6020830152565b60405190614308604083613f42565b60078252664e6f20486f6f6b60c81b6020830152565b5f809160405160208101906395d89b4160e01b825260048152614342602482613f42565b51915afa61434e614225565b90156144ad57805160208103614420575060208151918180820193849201010312613c2957519060405191614384604084613f42565b602080845236848201375f905f5b602081106143e15750506143a581613fb4565b905f5b8181106143b6575090925050565b6001906001600160f81b03196143cc8288613fdc565b51165f1a6143da8286613fdc565b53016143a8565b81811a60f881901b6001600160f81b031916614401575b50600101614392565b83614419916144136001949689613fdc565b53613f34565b92906143f8565b6040811161443e575050604051614438602082613f42565b5f815290565b810190602081818401930312613c29576020810151906001600160401b038211613c29570181603f82011215613c295760208101519061447d82613f65565b9261448b6040519485613f42565b82845260408284010111613c2957815f926040602093018386015e8301015290565b50604051614438602082613f42565b60ff1660ff81146137e25760010190565b6040519061010082016001600160401b03811183821017613b82576040525f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b919082039182116137e257565b90601082018092116137e257565b90606482018092116137e257565b919082018092116137e257565b60ff5f199116019060ff82116137e257565b60ff6004199116019060ff82116137e257565b604d81116137e257600a0a90565b8115613b15570490565b62ffffff8116906280000082146148015781156147df575f9262ffffff5f925b169182156146195760ff8116156145de57600a6145d66145d062ffffff936144bc565b96613f34565b9593046145ad565b9362ffffff600a8406166145fc575b600a6145d662ffffff92613f34565b93600a6145d661460f62ffffff936144bc565b96925050506145ed565b90939291506146266144cd565b916005841061475f5760ff8216916004614640848761451a565b106147565760ff5f5b169260041986018681116137e25760ff61466284614550565b1681101561473a57505f905b60808601918183526146808183614543565b5f198101939084116137e2576146b18760ff6146ab8180958d60a0836146bc9c169101525116614550565b16614543565b166040880152614543565b92600184018094116137e25760ff6146f292816146df6146ed946146f898614543565b1660208801525b168661451a565b614575565b90614583565b8152600160e0820152600482111561472d5760031982019182116137e25760ff8061472a93165b166060820152614be7565b90565b61472a915060ff5f61471f565b6147509060ff61474985614550565b169061451a565b9061466e565b60ff6001614649565b83600503600581116137e2576002608085015260028101908181116137e257600181019182116137e25760ff61479f921660a086015260ff841690614543565b600281018091116137e25760ff168060208501526001190160ff81116137e2576146ed60ff6146f894816146f294166040880152600160c08801526146e6565b50506040516147ef604082613f42565b6002815261302560f01b602082015290565b5050604051614811604082613f42565b600781526644796e616d696360c81b602082015290565b905f805b835160ff82169081101561488157614859906001600160f81b0319906148529087613fdc565b5116615413565b61486c575b614867906144bc565b61482c565b90614879614867916144bc565b91905061485e565b505060ff168061488e5750565b61489c6148a1918451614543565b613fb4565b5f925f5b815160ff8216908110156149265761490691906148ce6001600160f81b03196148528387613fdc565b61490b575b6001600160f81b0319906148e79085613fdc565b5116956149006148f682613f34565b975f1a9186613fdc565b536144bc565b6148a5565b605c61492061491989613f34565b9887613fdc565b536148d3565b509193505050565b5f908072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b811015614a53575b600a906904ee2d6d415b85acef8160201b811015614a37575b662386f26fc10000811015614a23575b6305f5e100811015614a12575b612710811015614a03575b60648110156149f5575b10156149ea575b600a60216149b260018501613fb4565b938401015b5f1901916f181899199a1a9b1b9c1cb0b131b232b360811b8282061a83530480156149e557600a90916149b7565b505090565b6001909101906149a2565b60646002910493019261499b565b61271060049104930192614991565b6305f5e10060089104930192614986565b662386f26fc1000060109104930192614979565b602093909301926904ee2d6d415b85acef8160201b9004614969565b506040915072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8104614950565b818102929181159184041417156137e257565b90815115614bc55760405191614aa0606084613f42565b604083527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208401527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f60408401528051600281018091116137e257600390046001600160fe1b03811681036137e257614b1d9060021b613fb4565b90602082019080815182019560208701908151925f83525b888110614b775750506003939495965052510680600114614b6557600214614b5b575090565b603d905f19015390565b50603d90815f19820153600119015390565b600360049199969901986001603f8b5182828260121c16870101518453828282600c1c16870101518385015382828260061c1687010151600285015316840101516003820153019497614b35565b9050604051614438602082613f42565b60ff60019116019060ff82116137e257565b614bf760ff602083015116613fb4565b9060e0810151614d1a575b60c0810151614cf6575b60ff6080820151165b60ff614c268160a085015116614bd5565b16811015614c4457806030614c3d60019386613fdc565b5301614c15565b50915b825115614cf15760ff6060840151168015159081614ce0575b50614cb4575b600a835106603001806030116137e257604084018051909160f81b6001600160f81b0319165f1a90614c9b9060ff1685613fdc565b5360ff5f198183511601169052600a8351048352614c47565b6040830160ff8151169081156137e2575f19820160ff169052602e90614cda9084613fdc565b53614c66565b905060ff604085015116145f614c60565b915090565b815115613fed5760306020830153815160011015613fed57602e6021830153614c0c565b81515f1981019081116137e257614d3360259184613fdc565b53614c02565b9060020b9060020b02908160020b9182036137e257565b60405190614d5f604083613f42565b600382526226a4a760e91b6020830152565b60405190614d80604083613f42565b600382526209a82b60eb1b6020830152565b909392938060020b8015613b1557614db08282620d89e71905614d39565b600293840b930b8303614dda57505050509050155f14614dd25761472a614d50565b61472a614d71565b90614de991620d89e805614d39565b60020b8103614e0c57505015159050614e045761472a614d71565b61472a614d50565b8060ff1d8181011890620d89e882116154015763ffffffff91600160801b7001fffcb933bd6fad37aa2d162d1a5940016001831602189190600281166153e5575b600481166153c9575b600881166153ad575b60108116615391575b60208116615375575b60408116615359575b6080811661533d575b6101008116615321575b6102008116615305575b61040081166152e9575b61080081166152cd575b61100081166152b1575b6120008116615295575b6140008116615279575b618000811661525d575b620100008116615241575b620200008116615226575b62040000811661520b575b62080000166151f2575b5f126151ea575b0160201c916151c5575b60ff80911692168083035f8212848212811690858313901516176137e2575f81126151b257925b831515806151a7575b156151955760019283929091111561516957614f6d90614f6085841c614575565b90838060a01b0316614a76565b92161461515b575b614f7f8180615826565b600160601b9190911190811561514c57614f98906158b9565b905b815f815b61513857614fac9150614550565b905f83600560ff85161161510c575b50600a6004818606119404936150fa575b620186a084146150ec575b6150dc575b614fe46144cd565b9181156150605760ff16602b039260ff84116137e25760ff84166007019360ff85116137e25760ff602085019516855260026080850152602b81116137e257600181018091116137e25761504760ff61472a968180941660a08801525116614550565b1660408401525b825260c08201525f60e0820152614be7565b60ff811690600982106150aa5750600319019260ff84116137e25760ff6150988161472a961680602087015260056080870152614550565b1660a08401526004604084015261504e565b61472a9491506150d16150cc60ff926006602088015260056040880152614562565b614bd5565b16606084015261504e565b906150e6906144bc565b90614fdc565b5091600a9004916001614fd7565b92600181018091116137e25792614fcc565b90935060ff61511a84614562565b1690604d82116137e25761513191600a0a90614583565b925f614fbb565b615143600a916144bc565b91049081614f9e565b6151559061586f565b90614f9a565b615164906157aa565b614f75565b6151859061517885841c614575565b90838060a01b0316614583565b921603614f75576151649061570b565b50506001600160a01b03169050614f75565b506012841115614f3f565b600160ff1b81146137e2575f0392614f36565b906001600160a01b03168015613b1557600160c01b046001600160a01b031690614f0f565b5f1904614f05565b6b048a170391f7dc42444e8fa290910260801c90614efe565b6d2216e584f5fa1ea926041bedfe9890920260801c91614ef4565b916e5d6af8dedb81196699c329225ee6040260801c91614ee9565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91614ede565b916f31be135f97d08fd981231505542fcfa60260801c91614ed3565b916f70d869a156d2a1b890bb3df62baf32f70260801c91614ec9565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91614ebf565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91614eb5565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91614eab565b916ff3392b0822b70005940c7a398e4b70f30260801c91614ea1565b916ff987a7253ac413176f2b074cf7815e540260801c91614e97565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91614e8d565b916ffe5dee046a99a2a811c461f1969c30530260801c91614e83565b916fff2ea16466c96a3843ec78b326b528610260801c91614e7a565b916fff973b41fa98c081472e6896dfb254c00260801c91614e71565b916fffcb9843d60f6159c9db58835c9266440260801c91614e68565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91614e5f565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91614e56565b916ffff97272373d413259a46990580e213a0260801c91614e4d565b6345c3193d60e11b5f5260045260245ffd5b60ff60f81b16601160f91b8114908115615467575b8115615459575b811561544b575b8115615440575090565b600960f81b14919050565b600d60f81b81149150615436565b600560f91b8114915061542f565b600360fa1b81149150615428565b80156137e2575f190190565b8061548c602a613f65565b9161549a6040519384613f42565b602a83526154a8602a613f65565b6020840190601f1901368237835115613fed5760309053825160011015613fed576078602184015360295b600181116154fb57506154e4575090565b63e22e27eb60e01b5f52600452601460245260445ffd5b90600f8116906010821015613fed57615538916f181899199a1a9b1b9c1cb0b131b232b360811b901a61552e8487613fdc565b5360041c91615475565b6154d3565b600292830b920b8212156155525750505f1990565b60020b121561556057600190565b5f90565b60881c61556f613f80565b90815190815b61557e57505090565b600f8116906010821015613fed575f1983018381116137e2576155bc926f181899199a1a9b1b9c1cb0b131b232b360811b901a9061552e9086613fdc565b9081615575565b6155cb613f80565b90815190815b6155da57505090565b600f8116906010821015613fed575f1983018381116137e257615618926f181899199a1a9b1b9c1cb0b131b232b360811b901a9061552e9086613fdc565b90816155d1565b60ff16600a8110156156465760300160ff81116137e25760f81b6001600160f81b03191690565b60370160ff81116137e25760f81b6001600160f81b03191690565b5f80516020615cb983398151915281525f80516020615db983398151915260208201527f2f2f7777772e77332e6f72672f323030302f737667273e3c636972636c652063604082015262783d2760e81b606082015260630190565b7f707822206865696768743d2232367078222072783d22387078222072793d223881527f7078222066696c6c3d227267626128302c302c302c302e362922202f3e0000006020820152603d0190565b608081901b5f19600160801b83098180821091039080820391827003298b075b4b6a5240945790619b37fd4a1115613c295714615791577f1f514b8ee5362595de309a65c03ce543f7e851e1625ea646b8fe88b81023b92d927003298b075b4b6a5240945790619b37fd4a90600160801b900990828211900360ff1b910360011c170290565b507003298b075b4b6a5240945790619b37fd4a91500490565b7003298b075b4b6a5240945790619b37fd4a8102905f197003298b075b4b6a5240945790619b37fd4a820990828083109203918083039283600160801b1115613c29571461581e57600160801b907003298b075b4b6a5240945790619b37fd4a900990828211900360801b910360801c1790565b505060801c90565b81810291905f1982820991838084109303928084039384600160401b1115613c29571461586657600160401b910990828211900360c01b910360401c1790565b50505060401c90565b620186a08102905f19620186a0820990828083109203918083039283600160801b1115613c29571461581e57600160801b90620186a0900990828211900360801b910360801c1790565b6c47bf19673df52e37f2410011d1602c1b81810291905f1990820990828083109203918083039283600160801b1115613c29571461581e57600160801b906c47bf19673df52e37f2410011d1602c1b900990828211900360801b910360801c1790565b60209060405161592c8382613f42565b5f8152828260020b5f8112615983575b508061594f62ffffff61472a951661492e565b6040519584879551918291018487015e8401908282015f8152815193849201905e01015f815203601f198101835282613f42565b925050505f038060020b9081036137e25761472a90828061594f62ffffff6040516159af604082613f42565b60018152602d60f81b84820152949550505061593c565b604051906159d5604083613f42565b6002825261323760f01b6020830152565b604051906159f5604083613f42565b6002825261323160f01b6020830152565b60405190615a15604083613f42565b6002825261062760f31b6020830152565b60405190615a35604083613f42565b60018252600760fb1b6020830152565b9060020b9060020b01627fffff198112627fffff8213176137e257600290810b0560020b6201e8471981125f14615a9f5750615a7f615a26565b90604051615a8e604082613f42565b60018152603760f81b602082015290565b620124f719811215615ad75750615ab4615a26565b90604051615ac3604082613f42565b600481526331302e3560e01b602082015290565b6161a719811215615b0f5750615aeb615a26565b90604051615afa604082613f42565b600581526431342e323560d81b602082015290565b61138719811215615b415750604051615b29604082613f42565b6002815261031360f41b60208201529061472a615a06565b5f811215615b705750604051615b58604082613f42565b6002815261313160f01b60208201529061472a6159e6565b611388811215615bb95750604051615b89604082613f42565b6002815261313360f01b602082015290604051615ba7604082613f42565b6002815261323360f01b602082015290565b6161a8811215615c025750604051615bd2604082613f42565b6002815261313560f01b602082015290604051615bf0604082613f42565b6002815261323560f01b602082015290565b620124f8811215615c375750615c16615a06565b90604051615c25604082613f42565b6002815261191b60f11b602082015290565b6201e8481315615c5257615c496159e6565b9061472a6159c6565b604051615c60604082613f42565b60028152610c8d60f21b60208201529061472a6159c656fe203c616e696d6174652061646469746976653d2273756d22206174747269627565663d22646174613a696d6167652f7376672b786d6c3b6261736536342c00003c7376672077696474683d2732393027206865696768743d2735303027207669696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220663c7465787420783d22313270782220793d22313770782220666f6e742d66616d70616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629226f3d22313030252220626567696e3d22307322206475723d223330732220726574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f6e742d73697a653d2231317078222066696c6c3d227768697465223e3c7473203c67207374796c653d227472616e73666f726d3a7472616e736c61746528326577426f783d2730203020323930203530302720786d6c6e733d27687474703a207374796c653d227472616e73666f726d3a7472616e736c6174652837327078a164736f6c634300081a000a'; + return + hex'60e0346100b357601f615ed138819003918201601f19168301916001600160401b038311848410176100b7578084926060946040528339810103126100b3578051906001600160a01b03821682036100b3576020810151906001600160a01b03821682036100b357604001519160c05260805260a052604051615e0590816100cc8239608051818181607a0152613f05015260a05181818161402c0152614082015260c0518181816101530152613d6c0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe610440806040526004361015610013575f80fd5b5f60a0525f3560e01c908163166c597814613dc257508063b7af3cdc14613d9b578063dc4c90d314613d57578063dee91a2c14613d0e578063e9dc6375146100af5763eb6d3a1114610063575f80fd5b346100a95760a0513660031901126100a9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60a05180fd5b34613c29576040366003190112613c29576004356001600160a01b03811690819003613c2957602460c081359260405192838092637ba03aad60e01b82528660048301525afa8015613c35575f915f91613c53575b5066ffffffffffffff19811615613c405760a08220604051602081019182526006604082015260408152610139606082613f42565b519020604051631e2eaeaf60e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693909290602084602481885afa938415613c35575f94613bfd575b50815160208301516001600160a01b039182169691166101b587613e2a565b6101be82613e2a565b129687159188613bf65780925b15613bee5750955b6101e46101de614001565b836140cb565b956101f66101f0614001565b896140cb565b6101ff84614254565b976102098a614254565b99606089015160020b9562ffffff60408b01511699608060018060a01b0391015116986040516102c0526101e06102c051016102c051811060018060401b03821117613b82576040526102c05152600160a01b60019003166102c05160200152600160a01b60019003166102c051604001526102c051606001526102c051608001526102c05160a0019660ff1687526102c05160c0019760ff1688526102c05160e0019889528060081c60020b6102c051610100015260201c60020b6102c051610120015260a01c60020b6102c05161014001526102c0516101600152826102c05161018001526102c0516101a001526102c0516101c0015261030b9061458d565b906102c0516060015161031d90614828565b916102c0516080015161032f90614828565b93855115805f149660036020600298602a82849a816103bc61046b9f9c60019b610388849f9c859d613bdd576101006102c051015160020b5b6101606102c051015160020b9160ff85511690159260ff87511692614d92565b9a51158015613bcb576101206102c051015160020b915b60ff806101606102c051015160020b925116921594511692614d92565b9a6040516103e0526902ab734b9bbb0b81016960b51b826103e0510152805191829101856103e051015e6103e05101906201016960ed1b84830152805192839101602d83015e010190602f60f81b84830152805192839101600483015e0101906201016960ed1b84830152805192839101600483015e010190611e1f60f11b84830152805192839101600583015e01015f828201526103e051900301601f1981016103e051526103e051613f42565b6105ec6002605961048260606102c0510151614828565b61049260806102c0510151614828565b90600160206104af828060a01b036101a06102c051015116615481565b604051610400527f54686973204e465420726570726573656e74732061206c697175696469747920826104005101527803837b9b4ba34b7b71034b71030902ab734b9bbb0b8103b1a1603d1b604061040051015285828551968187019780898561040051015e610400510190602d60f81b84830152805192839101605a83015e010190660103837b7b617160cd1b848301527f546865206f776e6572206f662074686973204e46542063616e206d6f646966796008830152791037b9103932b232b2b6903a3432903837b9b4ba34b7b7172e3760311b60288301527702e372837b7b61026b0b730b3b2b91020b2323932b9b99d160451b6042830152805192839101605a83015e010190612e3760f11b84830152518092605b83015e01015f8282015261040051900301601f198101610400515261040051613f42565b61085c60ac600c8060206106036102c0515161492e565b60108261061660806102c0510151614828565b6102c0518201516001600160a01b031680613bb95750600a826106376142d5565b925b6102c051604001516001600160a01b031680613ba8575060028261065b6142d5565b6102c0516101c001516001600160a01b031680613b965750602a8261067e6142f9565b955b8161069762ffffff6101806102c05101511661458d565b9a6040516103c0526901020b2323932b9b99d160b51b826103c0510152805191829101856103c051015e6103c0510190612e3760f11b84830152805192839101602c83015e0101906901020b2323932b9b99d160b51b848301528051928391018d83015e0101906f02e372437b7b59020b2323932b9b99d160851b84830152805192839101601a83015e0101906b02e372332b2902a34b2b91d160a51b84830152805192839101601c83015e0101906b02e372a37b5b2b71024a21d160a51b84830152805192839101601883015e0101632e372e3760e11b828201527fe29aa0efb88f20444953434c41494d45523a204475652064696c6967656e636560108201527f20697320696d7065726174697665207768656e20617373657373696e6720746860308201527f6973204e46542e204d616b6520737572652063757272656e637920616464726560508201527f73736573206d61746368207468652065787065637465642063757272656e636960708201527f65732c2061732063757272656e63792073796d626f6c73206d6179206265206960908201526736b4ba30ba32b21760c11b60b08201526103c051900301608c81016103c05152016103c051613f42565b6102c05160200151610876906001600160a01b0316615481565b6102c05160400151610890906001600160a01b0316615481565b610320526102c0516101c08101516001600160a01b03166102e05260608101516080820151610180909201519091906108cd9062ffffff1661458d565b6101006102c051015160020b916101206102c051015160020b610360526101606102c051015160020b610380526109136101406102c051015160020b610360518561553d565b610420526102c051519361093560018060a01b0360206102c051015116615564565b610300526102c05160400151610953906001600160a01b0316615564565b6102c05160200151909690610970906001600160a01b03166155c3565b610260526102c0516040015161098e906001600160a01b03166155c3565b610280526102c0516020810151905160ff916109af919060101c8316614a76565b6101026103a08190529190068181029181159183041417156137e25760ff610340526109e36109e891610340519004614527565b61492e565b6102a0526102c051604081015190516103405191610a14919060101c83166001600160901b0316614a76565b6101806102408190529190068181029181159183041417156137e2576103405115613b15576109e3610a4b91610340519004614535565b610220526102c05160208181015191516103405192610a75921c83166001600160801b0316614a76565b6103a0519190068181029181159183041417156137e2576103405115613b15576109e3610aa791610340519004614527565b610200526102c051604081015190516103405191610ad3919060201c83166001600160801b0316614a76565b610240519190068181029181159183041417156137e2576103405115613b15576109e3610b0591610340519004614535565b6101e0526102c051602081015190516103405191610b31919060301c83166001600160701b0316614a76565b6103a0519190068181029181159183041417156137e2576103405115613b15576109e3610b6391610340519004614527565b6101c0526102c051604081015190516103405191610b8f919060301c83166001600160701b0316614a76565b610240519190068181029181159183041417156137e2576103405115613b15576109e3610bc191610340519004614535565b6101a0526040516101808190526102a081019081106001600160401b03821117613b825760405261018051526103205160206101805101526102e05160406101805101526060610180510152608061018051015260a061018051015260c06101805101526103605160e061018051015261038051610100610180510152610420515f0b6101206101805101526101406101805101526103005161016061018051015261024051610180510152610260516101a0610180510152610280516101c06101805101526102a0516101e061018051015261022051610200610180510152610200516102206101805101526101e0516102406101805101526101c0516102606101805101526101a051610280610180510152611c206101e4610655603f6020610da36040515f80516020615cb9833981519152838201525f80516020615db983398151915260408201527f2f2f7777772e77332e6f72672f323030302f737667273e3c726563742077696460608201527f74683d27323930707827206865696768743d273530307078272066696c6c3d276080820152602360f81b60a0820152610d9e600960a1836103005151808861030051018484015e81016813979f1e17b9bb339f60b91b838201520301601619810184520182613f42565b614a89565b603e82610e4f81610d9e600960136101e0610180510151600685610200610180510151816102405161018051015191604051998a96610de3828901615661565b90805192839101825e019065272063793d2760d01b82528051928391018683015e0190722720723d273132307078272066696c6c3d272360681b84830152805192839101601983015e01016813979f1e17b9bb339f60b91b838201520301601619810184520182613f42565b8282610e8d81610d9e60096013610220610180510151600685610240610180510151816101a061018051015191604051998a96610de3828901615661565b60f382610f3881610d9e60096013610260610180510151600685610280610180510151816101c061018051015191604051998a96610ecc828901615661565b90805192839101825e019065272063793d2760d01b82528051928391018683015e0190722720723d273130307078272066696c6c3d272360681b84830152805192839101601983015e01016813979f1e17b9bb339f60b91b838201520301601619810184520182613f42565b95816101606101805101519a60405160c0527f3c7376672077696474683d2232393022206865696768743d22353030222076698260c05101527f6577426f783d2230203020323930203530302220786d6c6e733d22687474703a604060c0510152751797bbbbbb973b999737b933979918181817b9bb339160511b606060c05101527f20786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f607660c05101526b189c9c9c97bc3634b735939f60a11b609660c0510152651e3232b3399f60d11b60a260c05101527f3c66696c7465722069643d226631223e3c6665496d61676520726573756c743d60a860c05101527f2270302220786c696e6b3a687265663d22646174613a696d6167652f7376672b60c860c05101526a1e1b5b0ed8985cd94d8d0b60aa1b60e860c05101528051918291018560c051015e60c05101907f222f3e3c6665496d61676520726573756c743d2270312220786c696e6b3a6872848301525f80516020615c9983398151915261011383015280519283910161013183015e0101907f222f3e3c6665496d61676520726573756c743d2270322220786c696e6b3a6872848301525f80516020615c99833981519152605e830152805192839101607c83015e010190631110179f60e11b848301527f3c6665496d61676520726573756c743d2270332220786c696e6b3a687265663d60428301527a0899185d184e9a5b5859d94bdcdd99cade1b5b0ed8985cd94d8d0b602a1b6062830152805192839101607d83015e7f22202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e3d22910191909101848101919091527f70302220696e323d22703122202f3e3c6665426c656e64206d6f64653d226578605f8201527f636c7573696f6e2220696e323d22703222202f3e3c6665426c656e64206d6f64607f8201527f653d226f7665726c61792220696e323d2270332220726573756c743d22626c65609f820152780373227baba1110179f1e3332a3b0bab9b9b4b0b721363ab91603d1b60bf8201527f696e3d22626c656e644f75742220737464446576696174696f6e3d223432222060d88201527f2f3e3c2f66696c7465723e203c636c6970506174682069643d22636f726e657260f88201527f73223e3c726563742077696474683d2232393022206865696768743d223530306101188201527f222072783d223432222072793d22343222202f3e3c2f636c6970506174683e006101388201527f3c706174682069643d22746578742d706174682d612220643d224d34302031326101578201527f20483235302041323820323820302030203120323738203430205634363020416101778201527f32382032382030203020312032353020343838204834302041323820323820306101978201527f20302031203132203436302056343020413238203238203020302031203430206101b7820152671899103d1110179f60c11b6101d78201527f3c706174682069643d226d696e696d61702220643d224d3233342034343443326101df8201527f3334203435372e393439203234322e323120343633203235332034363322202f6101ff820152601f60f91b61021f8201527f3c66696c7465722069643d22746f702d726567696f6e2d626c7572223e3c66656102208201527f476175737369616e426c757220696e3d22536f757263654772617068696322206102408201527f737464446576696174696f6e3d22323422202f3e3c2f66696c7465723e0000006102608201527f3c6c696e6561724772616469656e742069643d22677261642d7570222078313d61027d8201527f2231222078323d2230222079313d2231222079323d2230223e3c73746f70206f61029d8201527f66667365743d22302e30222073746f702d636f6c6f723d2277686974652220736102bd820152713a37b816b7b830b1b4ba3c9e91189110179f60711b6102dd8201527f3c73746f70206f66667365743d222e39222073746f702d636f6c6f723d2277686102ef8201527f697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e65617261030f8201526823b930b234b2b73a1f60b91b61032f8201527f3c6c696e6561724772616469656e742069643d22677261642d646f776e2220786103388201527f313d2230222078323d2231222079313d2230222079323d2231223e3c73746f706103588201527f206f66667365743d22302e30222073746f702d636f6c6f723d227768697465226103788201527f2073746f702d6f7061636974793d223122202f3e3c73746f70206f66667365746103988201527f3d22302e39222073746f702d636f6c6f723d227768697465222073746f702d6f6103b88201527f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e00006103d88201527f3c6d61736b2069643d22666164652d757022206d61736b436f6e74656e74556e6103f68201527f6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696104168201527f6474683d223122206865696768743d2231222066696c6c3d2275726c282367726104368201527030b216bab8149110179f1e17b6b0b9b59f60791b6104568201527f3c6d61736b2069643d22666164652d646f776e22206d61736b436f6e74656e746104678201527f556e6974733d226f626a656374426f756e64696e67426f78223e3c72656374206104878201527f77696474683d223122206865696768743d2231222066696c6c3d2275726c28236104a78201527433b930b216b237bbb7149110179f1e17b6b0b9b59f60591b6104c78201527f3c6d61736b2069643d226e6f6e6522206d61736b436f6e74656e74556e6974736104dc8201527f3d226f626a656374426f756e64696e67426f78223e3c726563742077696474686104fc8201527f3d223122206865696768743d2231222066696c6c3d22776869746522202f3e3c61051c8201526517b6b0b9b59f60d11b61053c8201527f3c6c696e6561724772616469656e742069643d22677261642d73796d626f6c226105428201527f3e3c73746f70206f66667365743d22302e37222073746f702d636f6c6f723d226105628201527f7768697465222073746f702d6f7061636974793d223122202f3e3c73746f70206105828201527f6f66667365743d222e3935222073746f702d636f6c6f723d22776869746522206105a28201527f73746f702d6f7061636974793d223022202f3e3c2f6c696e65617247726164696105c28201526332b73a1f60e11b6105e28201527f3c6d61736b2069643d22666164652d73796d626f6c22206d61736b436f6e74656105e68201527f6e74556e6974733d227573657253706163654f6e557365223e3c7265637420776106068201527f696474683d22323930707822206865696768743d223230307078222066696c6c6106268201527f3d2275726c2823677261642d73796d626f6c2922202f3e3c2f6d61736b3e3c2f610646820152643232b3399f60d91b6106668201527f3c6720636c69702d706174683d2275726c2823636f726e65727329223e00000061066b8201526b1e3932b1ba103334b6361e9160a11b610688820152815192909183910161069483015e01017f2220783d223070782220793d22307078222077696474683d223239307078222082820152703432b4b3b43a1e911a9818383c1110179f60791b6106758201527f3c72656374207374796c653d2266696c7465723a2075726c28236631292220786106868201527f3d223070782220793d22307078222077696474683d22323930707822206865696106a68201526d33b43a1e911a9818383c1110179f60911b6106c68201527f203c67207374796c653d2266696c7465723a75726c2823746f702d726567696f6106d48201527f6e2d626c7572293b207472616e73666f726d3a7363616c6528312e35293b20746106f48201527f72616e73666f726d2d6f726967696e3a63656e74657220746f703b223e0000006107148201527f3c726563742066696c6c3d226e6f6e652220783d223070782220793d223070786107318201527f222077696474683d22323930707822206865696768743d22353030707822202f610751820152601f60f91b6107718201527f3c656c6c697073652063783d22353025222063793d22307078222072783d22316107728201527f38307078222072793d223132307078222066696c6c3d222330303022206f70616107928201527131b4ba3c9e9118171c1a9110179f1e17b39f60711b6107b28201527f3c7265637420783d22302220793d2230222077696474683d22323930222068656107c48201527f696768743d22353030222072783d223432222072793d223432222066696c6c3d6107e48201527f227267626128302c302c302c302922207374726f6b653d2272676261283235356108048201527416191a9a96191a9a96181719149110179f1e17b39f60591b61082482015260c0519003016101c4810160c051520160c051613f42565b61217f608b6005610100610180515160206101805101518360606101805101519160806101805101519060405186527f3c7465787420746578742d72656e646572696e673d226f7074696d697a6553706020875101526432b2b2111f60d91b6040875101527f3c74657874506174682073746172744f66667365743d222d31303025222066696045875101527f6c6c3d2277686974652220666f6e742d66616d696c793d2227436f75726965726065875101527f204e6577272c206d6f6e6f73706163652220666f6e742d73697a653d223130706085875101527f782220786c696e6b3a687265663d2223746578742d706174682d61223e00000060a5875101528281516020830190808260c28b51015e8851019264010714051160dd1b60c285015260c285516020870195818760c783015e0101905f80516020615c79833981519152848301525f80516020615d5983398151915260258301525f80516020615d398339815191526045830152783832b0ba21b7bab73a1e9134b73232b334b734ba329110179f60391b60658301527f3c2f74657874506174683e203c74657874506174682073746172744f66667365607e8301527f743d223025222066696c6c3d2277686974652220666f6e742d66616d696c793d609e8301527f2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d60be8301527f73697a653d22313070782220786c696e6b3a687265663d2223746578742d706160de830152653a3416b0911f60d11b60fe83015251809261010483015e01019164010714051160dd1b6103405184015251809161010484015e610340519101015f80516020615c79833981519152828201525f80516020615d5983398151915260258201525f80516020615d3983398151915260458201527f70656174436f756e743d22696e646566696e69746522202f3e203c2f746578746065820152642830ba341f60d91b60858201527f3c74657874506174682073746172744f66667365743d22353025222066696c6c608a8201527f3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e60aa8201527f6577272c206d6f6e6f73706163652220666f6e742d73697a653d22313070782260ca8201527a103c3634b7359d343932b31e9111ba32bc3a16b830ba3416b0911f60291b60ea8201528184516020860192818461010583015e01019364010714051160dd1b868601528584516020860196818861010583015e0101905f80516020615c79833981519152848301525f80516020615d5983398151915260258301527f6f3d22313030252220626567696e3d22307322206475723d223330732200000060458301527f20726570656174436f756e743d22696e646566696e69746522202f3e3c2f746560628301527f7874506174683e3c74657874506174682073746172744f66667365743d222d3560828301527f3025222066696c6c3d2277686974652220666f6e742d66616d696c793d22274360a28301527f6f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d73697a60c28301527f653d22313070782220786c696e6b3a687265663d2223746578742d706174682d60e28301526230911f60e91b6103a05183015251809261010583015e01019064010714051160dd1b8483015251809261010583015e01015f80516020615c79833981519152828201525f80516020615d5983398151915260258201525f80516020615d3983398151915260458201527f70656174436f756e743d22696e646566696e69746522202f3e3c2f746578745060658201526a30ba341f1e17ba32bc3a1f60a91b608582015261010051900301606b810161010051520161010051613f42565b6020612418607e60776060610180510151600185608061018051015160ed8260a0610180510151926040519a8b977f3c67206d61736b3d2275726c2823666164652d73796d626f6c29223e3c726563828a01527f742066696c6c3d226e6f6e652220783d223070782220793d223070782220776960408a01527f6474683d22323930707822206865696768743d22323030707822202f3e203c7460608a01527f65787420793d22373070782220783d2233327078222066696c6c3d227768697460808a01527f652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d60a08a01527f6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e7460c08a01526c16b9b4bd329e91199b383c111f60991b60e08a0152805191829101858a015e870190602f60f81b8483015280519283910160ee83015e0101907f3c2f746578743e3c7465787420793d2231313570782220783d22333270782220848301527f66696c6c3d2277686974652220666f6e742d66616d696c793d2227436f75726960218301527f6572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d6041830152761119181811103337b73a16b9b4bd329e91199b383c111f60491b6061830152805192839101607883015e01016a1e17ba32bc3a1f1e17b39f60a91b838201527f3c7265637420783d2231362220793d223136222077696474683d22323538222060828201527f6865696768743d22343638222072783d223236222072793d223236222066696c60a28201527f6c3d227267626128302c302c302c302922207374726f6b653d2272676261283260c2820152721a9a96191a9a96191a9a96181719149110179f60691b60e28201520301605e810184520182613f42565b60c061018051015160020b9060e061018051015160020b9161010061018051015160020b906101206101805101515f0b90600182145f14613b2957604051612461604082613f42565b6008815267023666164652d75760c41b6020820152945b03627fffff198112627fffff8213176137e25760020b908215613b1557627fffff1982145f198414166137e25761293f926048920560020b600481136139365750607960206040516124cb604082613f42565b601a8152794d3120314334312034312031303520313035203134352031343560301b82820152925b60406101608190528051906125089082613f42565b6002815261373360f01b838201908152610160518051939061252a9085613f42565b60038452848401906203139360ec1b825261016051519261254e6101605185613f42565b60038452868401926232313760e81b84526101605151936125726101605186613f42565b6003855288850191620ccccd60ea1b8352600185146001860361392c575b15613840575050505092602786602a946008828196602c82809c6126c39c5f191493845f14613839578a5b85156138325782985b861561382a5750945b156138225750955b61016051516b1e31b4b931b6329031bc1e9160a11b8f8201528a51909e8f9b829101858d015e8a019067383c111031bc9e9160c11b84830152805192839101603483015e0101907f70782220723d22347078222066696c6c3d22776869746522202f3e3c63697263848301526636329031bc1e9160c91b6028830152805192839101602f83015e01019067383c111031bc9e9160c11b84830152805192839101602f83015e01017f70782220723d2232347078222066696c6c3d226e6f6e6522207374726f6b653d8382015269113bb434ba329110179f60b11b60288201520301600a810184520182613f42565b606561016051519889956c078ce40dac2e6d67a44eae4d85609b1b85880152858251868401908082602d8c015e89019361149160f11b602d8601525f80516020615dd9833981519152602f8601527f2c313839707829223e3c7265637420783d222d313670782220793d222d313670604f8601527f78222077696474683d22313830707822206865696768743d2231383070782220606f860152763334b6361e913737b7329110179f1e3830ba3410321e9160491b608f860152602d845189860196818860a683015e0101907f22207374726f6b653d227267626128302c302c302c302e332922207374726f6b848301527f652d77696474683d2233327078222066696c6c3d226e6f6e6522207374726f6b6099830152733296b634b732b1b0b81e913937bab7321110179f60611b60b9830152700785ece7c78ce40dac2e6d67a44eae4d85607b1b60cd83015251809260de83015e01019061149160f11b848301525f80516020615dd983398151915260678301526816189c1cb83c14911f60b91b60878301527f3c7265637420783d222d313670782220793d222d31367078222077696474683d60908301527f22313830707822206865696768743d223138307078222066696c6c3d226e6f6e60b083015264329110179f60d91b60d0830152681e3830ba3410321e9160b91b60d583015251809260de83015e0101907f22207374726f6b653d2272676261283235352c3235352c3235352c3129222066848301527f696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e646099830152671110179f1e17b39f60c11b60b983015280519283910160c183015e01015f838201520301601f198101845283613f42565b61295061014061018051015161492e565b60018060a01b0360406101805101511660c061018051015160020b9160e061018051015160020b9261298183615481565b60e05261298d8161591c565b6129968561591c565b928051946004860186116137e2576136bb576129b06142f9565b80519360058501928386116136a357845191600a83018084116136a357885195600a8701928388116136a35760049c6129e891615a45565b9c909b6008810191829101116136a357806007029060078204036136a357612a1160099161492e565b99018091116136a357806007029060078204036136a357612a33600e9161492e565b94018091116136a357806007029060078204036136a357612a55600e9161492e565b95018091116136a35760078181020481036136a357600702612a769061492e565b9561016051516080526080516020015f80516020615d9983398151915290526c1cb83c1610199a9a383c14911f60991b6101605160805101526c1e3932b1ba103bb4b23a341e9160991b608051604d015280516020819201608051605a015e60805101605a0160a0518152612aea906156bc565b5f80516020615cf98339815191528152602081015f80516020615cd983398151915290526101605181015f80516020615d798339815191529052606081015f80516020615d198339815191529052608081016c1f24a21d101e17ba39b830b71f60991b905281516020819301608d83015e6a1e17ba32bc3a1f1e17b39f60a91b608d92909101918201525f80516020615d9983398151915260988201526c1cb83c1610199c1a383c14911f60991b60b88201526c1e3932b1ba103bb4b23a341e9160991b60c5820152815191829060200160d283015e01608d0160450160a0518152612bd5906156bc565b5f80516020615cf98339815191528152602081015f80516020615cd983398151915290526101605181015f80516020615d798339815191529052606081015f80516020615d198339815191529052608081016e1f2437b7b59d101e17ba39b830b71f60891b905281516020819301608f83015e6a1e17ba32bc3a1f1e17b39f60a91b608f92909101918201525f80516020615d99833981519152609a8201526c1cb83c16101a189a383c14911f60991b60ba8201526c1e3932b1ba103bb4b23a341e9160991b60c7820152815191829060200160d483015e01608f0160450160a0518152612cc2906156bc565b5f80516020615cf98339815191528152602081015f80516020615cd983398151915290526101605181015f80516020615d798339815191529052606081015f80516020615d19833981519152905260808101721f26b4b7102a34b1b59d101e17ba39b830b71f60691b905281516020819301609383015e6a1e17ba32bc3a1f1e17b39f60a91b609392909101918201525f80516020615d99833981519152609e8201526c1cb83c16101a1a1a383c14911f60991b60be8201526c1e3932b1ba103bb4b23a341e9160991b60cb820152815191829060200160d883015e0160930160450160a0518152612db3906156bc565b5f80516020615cf98339815191528152602081015f80516020615cd983398151915290526101605181015f80516020615d798339815191529052606081015f80516020615d19833981519152905260808101721f26b0bc102a34b1b59d101e17ba39b830b71f60691b905281516020819301609383015e7f3c2f746578743e3c2f673e3c67207374796c653d227472616e73666f726d3a7460939290910191820152773930b739b630ba329419191b383c16101a1999b83c14911f60411b60b38201527f3c726563742077696474683d223336707822206865696768743d22333670782260cb8201527f2072783d22387078222072793d22387078222066696c6c3d226e6f6e6522207360eb8201527f74726f6b653d2272676261283235352c3235352c3235352c302e322922202f3e61010b8201527f3c70617468207374726f6b652d6c696e656361703d22726f756e642220643d2261012b8201527f4d38203943382e30303030342032322e393439342031362e323039392032382061014b8201527f3237203238222066696c6c3d226e6f6e6522207374726f6b653d22776869746561016b820152631110179f60e11b61018b8201527f3c636972636c65207374796c653d227472616e73666f726d3a7472616e736c6161018f820152640e8ca66c8560db1b6101af82015281519182906020016101b483015e016093016101218101630383c16160e51b90528151602081930161012583015e7f70782c2030707829222063783d22307078222063793d223070782220723d2234610125929091019182015275383c11103334b6361e913bb434ba3291179f1e17b39f60511b6101458201526080805161013b9281900392830190525161303b9161015b0190613f42565b61018051610140015191610180516040015160a0515060606101605151906020820192868452600160601b6001900319911b166101605182015260348152613084605482613f42565b5190209280156100a9578060018060801b031060071b81811c60018060401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c610340511060031b17906f8421084210842108cc6318c6db6d54be7b01c1818141808140018080c0814100004181408140c0c100414140c160221b91831c1c601f161a1760011b6101fe811660fe8216036136a35760fe9060a0515016600101906103405182116136a3576103405182161561368b5761360f6020610d9e6002602761353c84610d9e6006829b83603d9b61366c9f61365e9e61034051165f1904115f14613670578161016051517f3c67207374796c653d227472616e73666f726d3a7472616e736c617465283232828201527f3670782c20333932707829223e3c726563742077696474683d22333670782220610160518201527f6865696768743d2233367078222072783d22387078222072793d22387078222060608201527f66696c6c3d226e6f6e6522207374726f6b653d2272676261283235352c32353560808201526c16191a9a96181719149110179f60991b60a08201527f3c673e3c70617468207374796c653d227472616e73666f726d3a7472616e736c60ad8201527f617465283670782c367078292220643d224d313220304c31322e36353232203960cd8201527f2e35363538374c313820312e363037374c31332e373831392031302e3231383160ed82015272026191917199c9919901b26189a171a199a189606d1b61010d8201527f31312e333437384c32342031324c31342e343334312031322e363532324c32326101208201527f2e333932332031384c31332e373831392031332e373831394c31382032322e336101408201527f3932334c31322e363532322031342e343334314c31322032344c31312e33343761016082015270382031342e343334314c362032322e333960781b610240518201527f32334c31302e323138312031332e373831394c312e363037372031384c392e356101918201527f363538372031322e363532324c302031324c392e35363538372031312e3334376101b18201527f384c312e3630373720364c31302e323138312031302e323138314c3620312e366101d18201527f3037374c31312e3334373820392e35363538374c313220305a222066696c6c3d6101f182015269113bb434ba329110179f60b11b6102118201527f3c616e696d6174655472616e73666f726d206174747269627574654e616d653d61021b8201527f227472616e73666f726d2220747970653d22726f74617465222066726f6d3d2261023b8201527f302031382031382220746f3d2233363020313820313822206475723d2231307361025b8201527f2220726570656174436f756e743d22696e646566696e697465222f3e3c2f673e61027b820152631e17b39f60e11b61029b82015261027f81526134ac61029f82613f42565b915b61016051519788958160c05151808260c05101838b015e88018181019060a051825261010051518092846101005101905e01019060a0518252805192839101825e019060a0518252805192839101825e0160a05181526080515190818460805101825e019060a0518252805192839101825e01651e17b9bb339f60d11b815203601919810184520182613f42565b6101605151948591683d913730b6b2911d1160b91b82840152601260296103e0515180856103e051018388015e850171111610113232b9b1b934b83a34b7b7111d1160711b8282015261040051519081866104005101603b83015e01018181019060a05182526103c051518092866103c05101905e0101906c1116101134b6b0b3b2911d101160991b82527919185d184e9a5b5859d94bdcdd99cade1b5b0ed8985cd94d8d0b60321b600d8301528051928391018583015e0161227d60f01b838201520301601d19810184520182613f42565b61016051519384917f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000828401528051918291018484015e810160a051838201520301601f198101835282613f42565b610160515191829182613e00565b0390f35b8161016051516136808282613f42565b60a0518152916134ae565b634e487b7160e01b60a051526012600452602460a051fd5b634e487b7160e01b60a051526011600452602460a051fd5b60055f60a0526136cb6005613f65565b610140526101605151610120526136e86101405161012051613f42565b600561012051526101205150601f196137016005613f65565b013660206101205101375f5b8181106137f65750505f60a052600361372581613f65565b61373461016051519182613f42565b818152601f1961374383613f65565b0136602083013760275b602a81106137ac5750602091816137a792508361016051519485926101205151808361012051018487015e8401906217171760e91b83830152805192839101602383015e01015f838201520301601f198101835282613f42565b6129b0565b60ff60f81b6137bd8260e051613fdc565b51169060261981018181116137e2576137db6001935f1a9185613fdc565b530161374d565b634e487b7160e01b5f52601160045260245ffd5b60019060ff60f81b61380a8260e051613fdc565b51165f1a61381b8261012051613fdc565b530161370d565b9050956125d5565b9050946125cd565b81986125c4565b879a6125bb565b61392797945060089591601b97602c88936027979c61016051519d8e9a6b1e31b4b931b6329031bc1e9160a11b60208d0152518091858d015e8a019067383c111031bc9e9160c11b84830152518092603483015e0101907a383c1110391e911a383c11103334b6361e913bb434ba329110179f60291b848301526b1e31b4b931b6329031bc1e9160a11b6023830152518092602f83015e01019067383c111031bc9e9160c11b84830152518092602f83015e01017a383c1110391e911a383c11103334b6361e913bb434ba329110179f60291b838201520301600419810184520182613f42565b6126c3565b505f198514612590565b6008811361397c575060796020604051613951604082613f42565b60198152784d31203143333320343920393720313133203134352031343560381b82820152926124f3565b601081136139c2575060796020604051613997604082613f42565b60198152784d31203143333320353720383920313133203134352031343560381b82820152926124f3565b60208113613a085750607960206040516139dd604082613f42565b60198152784d31203143323520363520383120313231203134352031343560381b82820152926124f3565b60408113613a4e575060796020604051613a23604082613f42565b60198152784d31203143313720373320373320313239203134352031343560381b82820152926124f3565b60808113613a93575060796020604051613a69604082613f42565b60188152774d312031433920383120363520313337203134352031343560401b82820152926124f3565b61010012613ad95760796020604051613aad604082613f42565b601a8152794d31203143312038392035372e3520313435203134352031343560301b82820152926124f3565b60796020604051613aeb604082613f42565b60188152774d312031433120393720343920313435203134352031343560401b82820152926124f3565b634e487b7160e01b5f52601260045260245ffd5b5f198203613b5d57604051613b3f604082613f42565b600a81526911b330b23296b237bbb760b11b60208201525b94612478565b604051613b6b604082613f42565b6005815264236e6f6e6560d81b6020820152613b57565b634e487b7160e01b5f52604160045260245ffd5b82613ba2602a92615481565b95610680565b82613bb4600292615481565b61065b565b82613bc5600a92615481565b92610639565b6101006102c051015160020b9161039f565b6101206102c051015160020b610368565b9050956101d3565b81926101cb565b9093506020813d602011613c2d575b81613c1960209383613f42565b81010312613c2957519285610196565b5f80fd5b3d9150613c0c565b6040513d5f823e3d90fd5b8263ed15e6cf60e01b5f5260045260245ffd5b9150508060c03d60c011613d07575b613c6c8183613f42565b81010360c08112613c295760a013613c29576040519060a082016001600160401b03811183821017613b8257604052613ca4816140b7565b8252613cb2602082016140b7565b6020830152604081015162ffffff81168103613c2957604083015260608101518060020b8103613c295760608301526080810151906001600160a01b0382168203613c295760a0916080840152015183610104565b503d613c62565b34613c29576040366003190112613c2957613d27613dea565b6024356001600160a01b0381168103613c2957613d4e613d48602093613e2a565b91613e2a565b12604051908152f35b34613c29575f366003190112613c29576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34613c29575f366003190112613c295761366c613db6614001565b60405191829182613e00565b34613c29576020366003190112613c2957602090613de6613de1613dea565b613e2a565b8152f35b600435906001600160a01b0382168203613c2957565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b6001600160a01b031680158015613f02575b613efb5760014614613e4e575b505f90565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488103613e70575061012c90565b73dac17f958d2ee523a2206206994597c13d831ec78103613e91575060c890565b736b175474e89094c44da98b954eedeac495271d0f8103613eb25750606490565b738daebade922df735c38c80c7ebd708af50815faa8103613ed4575060c71990565b732260fac5e5542a773aa44fbcfedf7c193bc2c59914613ef4575f613e49565b61012b1990565b5060631990565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168114613e3c565b5f1981146137e25760010190565b601f909101601f19168101906001600160401b03821190821017613b8257604052565b6001600160401b038111613b8257601f01601f191660200190565b613f8a6006613f65565b90613f986040519283613f42565b6006825281601f19613faa6006613f65565b0190602036910137565b90613fbe82613f65565b613fcb6040519182613f42565b8281528092613faa601f1991613f65565b908151811015613fed570160200190565b634e487b7160e01b5f52603260045260245ffd5b5f5b602081108061407b575b156140205761401b90613f34565b614003565b61402981613fb4565b907f0000000000000000000000000000000000000000000000000000000000000000905f5b81811061405b5750505090565b6020811015613fed5780836001921a6140748287613fdc565b530161404e565b15613fed577f0000000000000000000000000000000000000000000000000000000000000000811a60f81b6001600160f81b031916151561400d565b51906001600160a01b0382168203613c2957565b6001600160a01b038116915f9190831561421e57506140e99061431e565b9182511561416b5750600c8251116140ff575090565b9061410a600c613f65565b916141186040519384613f42565b600c8352601f19614129600c613f65565b01366020850137805b600c81106141405750505090565b6001906001600160f81b03196141568286613fdc565b5116831a6141648287613fdc565b5301614132565b915050614176613f80565b905f5b6003811061418657505090565b80601303601381116137e2576001600160fd1b03811681036137e257829060031b1c9060f080600f198416161660ff8316039160ff83116137e257600f6141d09160041c1661561f565b600182901b926001600160ff1b03831683036137e2576141fc915f1a6141f68588613fdc565b5361561f565b91600181018091116137e2576142176001935f1a9186613fdc565b5301614179565b9250505090565b3d1561424f573d9061423682613f65565b916142446040519384613f42565b82523d5f602084013e565b606090565b6001600160a01b038116156142cf575f8091604051602081019063313ce56760e01b825260048152614287602482613f42565b51915afa614293614225565b9015613e49578051602081146142aa575b50505f90565b8160209181010312613c29576020015160ff8111156142c957806142a4565b60ff1690565b50601290565b604051906142e4604083613f42565b60068252654e617469766560d01b6020830152565b60405190614308604083613f42565b60078252664e6f20486f6f6b60c81b6020830152565b5f809160405160208101906395d89b4160e01b825260048152614342602482613f42565b51915afa61434e614225565b90156144ad57805160208103614420575060208151918180820193849201010312613c2957519060405191614384604084613f42565b602080845236848201375f905f5b602081106143e15750506143a581613fb4565b905f5b8181106143b6575090925050565b6001906001600160f81b03196143cc8288613fdc565b51165f1a6143da8286613fdc565b53016143a8565b81811a60f881901b6001600160f81b031916614401575b50600101614392565b83614419916144136001949689613fdc565b53613f34565b92906143f8565b6040811161443e575050604051614438602082613f42565b5f815290565b810190602081818401930312613c29576020810151906001600160401b038211613c29570181603f82011215613c295760208101519061447d82613f65565b9261448b6040519485613f42565b82845260408284010111613c2957815f926040602093018386015e8301015290565b50604051614438602082613f42565b60ff1660ff81146137e25760010190565b6040519061010082016001600160401b03811183821017613b82576040525f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b919082039182116137e257565b90601082018092116137e257565b90606482018092116137e257565b919082018092116137e257565b60ff5f199116019060ff82116137e257565b60ff6004199116019060ff82116137e257565b604d81116137e257600a0a90565b8115613b15570490565b62ffffff8116906280000082146148015781156147df575f9262ffffff5f925b169182156146195760ff8116156145de57600a6145d66145d062ffffff936144bc565b96613f34565b9593046145ad565b9362ffffff600a8406166145fc575b600a6145d662ffffff92613f34565b93600a6145d661460f62ffffff936144bc565b96925050506145ed565b90939291506146266144cd565b916005841061475f5760ff8216916004614640848761451a565b106147565760ff5f5b169260041986018681116137e25760ff61466284614550565b1681101561473a57505f905b60808601918183526146808183614543565b5f198101939084116137e2576146b18760ff6146ab8180958d60a0836146bc9c169101525116614550565b16614543565b166040880152614543565b92600184018094116137e25760ff6146f292816146df6146ed946146f898614543565b1660208801525b168661451a565b614575565b90614583565b8152600160e0820152600482111561472d5760031982019182116137e25760ff8061472a93165b166060820152614be7565b90565b61472a915060ff5f61471f565b6147509060ff61474985614550565b169061451a565b9061466e565b60ff6001614649565b83600503600581116137e2576002608085015260028101908181116137e257600181019182116137e25760ff61479f921660a086015260ff841690614543565b600281018091116137e25760ff168060208501526001190160ff81116137e2576146ed60ff6146f894816146f294166040880152600160c08801526146e6565b50506040516147ef604082613f42565b6002815261302560f01b602082015290565b5050604051614811604082613f42565b600781526644796e616d696360c81b602082015290565b905f805b835160ff82169081101561488157614859906001600160f81b0319906148529087613fdc565b5116615413565b61486c575b614867906144bc565b61482c565b90614879614867916144bc565b91905061485e565b505060ff168061488e5750565b61489c6148a1918451614543565b613fb4565b5f925f5b815160ff8216908110156149265761490691906148ce6001600160f81b03196148528387613fdc565b61490b575b6001600160f81b0319906148e79085613fdc565b5116956149006148f682613f34565b975f1a9186613fdc565b536144bc565b6148a5565b605c61492061491989613f34565b9887613fdc565b536148d3565b509193505050565b5f908072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b811015614a53575b600a906904ee2d6d415b85acef8160201b811015614a37575b662386f26fc10000811015614a23575b6305f5e100811015614a12575b612710811015614a03575b60648110156149f5575b10156149ea575b600a60216149b260018501613fb4565b938401015b5f1901916f181899199a1a9b1b9c1cb0b131b232b360811b8282061a83530480156149e557600a90916149b7565b505090565b6001909101906149a2565b60646002910493019261499b565b61271060049104930192614991565b6305f5e10060089104930192614986565b662386f26fc1000060109104930192614979565b602093909301926904ee2d6d415b85acef8160201b9004614969565b506040915072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8104614950565b818102929181159184041417156137e257565b90815115614bc55760405191614aa0606084613f42565b604083527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208401527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f60408401528051600281018091116137e257600390046001600160fe1b03811681036137e257614b1d9060021b613fb4565b90602082019080815182019560208701908151925f83525b888110614b775750506003939495965052510680600114614b6557600214614b5b575090565b603d905f19015390565b50603d90815f19820153600119015390565b600360049199969901986001603f8b5182828260121c16870101518453828282600c1c16870101518385015382828260061c1687010151600285015316840101516003820153019497614b35565b9050604051614438602082613f42565b60ff60019116019060ff82116137e257565b614bf760ff602083015116613fb4565b9060e0810151614d1a575b60c0810151614cf6575b60ff6080820151165b60ff614c268160a085015116614bd5565b16811015614c4457806030614c3d60019386613fdc565b5301614c15565b50915b825115614cf15760ff6060840151168015159081614ce0575b50614cb4575b600a835106603001806030116137e257604084018051909160f81b6001600160f81b0319165f1a90614c9b9060ff1685613fdc565b5360ff5f198183511601169052600a8351048352614c47565b6040830160ff8151169081156137e2575f19820160ff169052602e90614cda9084613fdc565b53614c66565b905060ff604085015116145f614c60565b915090565b815115613fed5760306020830153815160011015613fed57602e6021830153614c0c565b81515f1981019081116137e257614d3360259184613fdc565b53614c02565b9060020b9060020b02908160020b9182036137e257565b60405190614d5f604083613f42565b600382526226a4a760e91b6020830152565b60405190614d80604083613f42565b600382526209a82b60eb1b6020830152565b909392938060020b8015613b1557614db08282620d89e71905614d39565b600293840b930b8303614dda57505050509050155f14614dd25761472a614d50565b61472a614d71565b90614de991620d89e805614d39565b60020b8103614e0c57505015159050614e045761472a614d71565b61472a614d50565b8060ff1d8181011890620d89e882116154015763ffffffff91600160801b7001fffcb933bd6fad37aa2d162d1a5940016001831602189190600281166153e5575b600481166153c9575b600881166153ad575b60108116615391575b60208116615375575b60408116615359575b6080811661533d575b6101008116615321575b6102008116615305575b61040081166152e9575b61080081166152cd575b61100081166152b1575b6120008116615295575b6140008116615279575b618000811661525d575b620100008116615241575b620200008116615226575b62040000811661520b575b62080000166151f2575b5f126151ea575b0160201c916151c5575b60ff80911692168083035f8212848212811690858313901516176137e2575f81126151b257925b831515806151a7575b156151955760019283929091111561516957614f6d90614f6085841c614575565b90838060a01b0316614a76565b92161461515b575b614f7f8180615826565b600160601b9190911190811561514c57614f98906158b9565b905b815f815b61513857614fac9150614550565b905f83600560ff85161161510c575b50600a6004818606119404936150fa575b620186a084146150ec575b6150dc575b614fe46144cd565b9181156150605760ff16602b039260ff84116137e25760ff84166007019360ff85116137e25760ff602085019516855260026080850152602b81116137e257600181018091116137e25761504760ff61472a968180941660a08801525116614550565b1660408401525b825260c08201525f60e0820152614be7565b60ff811690600982106150aa5750600319019260ff84116137e25760ff6150988161472a961680602087015260056080870152614550565b1660a08401526004604084015261504e565b61472a9491506150d16150cc60ff926006602088015260056040880152614562565b614bd5565b16606084015261504e565b906150e6906144bc565b90614fdc565b5091600a9004916001614fd7565b92600181018091116137e25792614fcc565b90935060ff61511a84614562565b1690604d82116137e25761513191600a0a90614583565b925f614fbb565b615143600a916144bc565b91049081614f9e565b6151559061586f565b90614f9a565b615164906157aa565b614f75565b6151859061517885841c614575565b90838060a01b0316614583565b921603614f75576151649061570b565b50506001600160a01b03169050614f75565b506012841115614f3f565b600160ff1b81146137e2575f0392614f36565b906001600160a01b03168015613b1557600160c01b046001600160a01b031690614f0f565b5f1904614f05565b6b048a170391f7dc42444e8fa290910260801c90614efe565b6d2216e584f5fa1ea926041bedfe9890920260801c91614ef4565b916e5d6af8dedb81196699c329225ee6040260801c91614ee9565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91614ede565b916f31be135f97d08fd981231505542fcfa60260801c91614ed3565b916f70d869a156d2a1b890bb3df62baf32f70260801c91614ec9565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91614ebf565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91614eb5565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91614eab565b916ff3392b0822b70005940c7a398e4b70f30260801c91614ea1565b916ff987a7253ac413176f2b074cf7815e540260801c91614e97565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91614e8d565b916ffe5dee046a99a2a811c461f1969c30530260801c91614e83565b916fff2ea16466c96a3843ec78b326b528610260801c91614e7a565b916fff973b41fa98c081472e6896dfb254c00260801c91614e71565b916fffcb9843d60f6159c9db58835c9266440260801c91614e68565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91614e5f565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91614e56565b916ffff97272373d413259a46990580e213a0260801c91614e4d565b6345c3193d60e11b5f5260045260245ffd5b60ff60f81b16601160f91b8114908115615467575b8115615459575b811561544b575b8115615440575090565b600960f81b14919050565b600d60f81b81149150615436565b600560f91b8114915061542f565b600360fa1b81149150615428565b80156137e2575f190190565b8061548c602a613f65565b9161549a6040519384613f42565b602a83526154a8602a613f65565b6020840190601f1901368237835115613fed5760309053825160011015613fed576078602184015360295b600181116154fb57506154e4575090565b63e22e27eb60e01b5f52600452601460245260445ffd5b90600f8116906010821015613fed57615538916f181899199a1a9b1b9c1cb0b131b232b360811b901a61552e8487613fdc565b5360041c91615475565b6154d3565b600292830b920b8212156155525750505f1990565b60020b121561556057600190565b5f90565b60881c61556f613f80565b90815190815b61557e57505090565b600f8116906010821015613fed575f1983018381116137e2576155bc926f181899199a1a9b1b9c1cb0b131b232b360811b901a9061552e9086613fdc565b9081615575565b6155cb613f80565b90815190815b6155da57505090565b600f8116906010821015613fed575f1983018381116137e257615618926f181899199a1a9b1b9c1cb0b131b232b360811b901a9061552e9086613fdc565b90816155d1565b60ff16600a8110156156465760300160ff81116137e25760f81b6001600160f81b03191690565b60370160ff81116137e25760f81b6001600160f81b03191690565b5f80516020615cb983398151915281525f80516020615db983398151915260208201527f2f2f7777772e77332e6f72672f323030302f737667273e3c636972636c652063604082015262783d2760e81b606082015260630190565b7f707822206865696768743d2232367078222072783d22387078222072793d223881527f7078222066696c6c3d227267626128302c302c302c302e362922202f3e0000006020820152603d0190565b608081901b5f19600160801b83098180821091039080820391827003298b075b4b6a5240945790619b37fd4a1115613c295714615791577f1f514b8ee5362595de309a65c03ce543f7e851e1625ea646b8fe88b81023b92d927003298b075b4b6a5240945790619b37fd4a90600160801b900990828211900360ff1b910360011c170290565b507003298b075b4b6a5240945790619b37fd4a91500490565b7003298b075b4b6a5240945790619b37fd4a8102905f197003298b075b4b6a5240945790619b37fd4a820990828083109203918083039283600160801b1115613c29571461581e57600160801b907003298b075b4b6a5240945790619b37fd4a900990828211900360801b910360801c1790565b505060801c90565b81810291905f1982820991838084109303928084039384600160401b1115613c29571461586657600160401b910990828211900360c01b910360401c1790565b50505060401c90565b620186a08102905f19620186a0820990828083109203918083039283600160801b1115613c29571461581e57600160801b90620186a0900990828211900360801b910360801c1790565b6c47bf19673df52e37f2410011d1602c1b81810291905f1990820990828083109203918083039283600160801b1115613c29571461581e57600160801b906c47bf19673df52e37f2410011d1602c1b900990828211900360801b910360801c1790565b60209060405161592c8382613f42565b5f8152828260020b5f8112615983575b508061594f62ffffff61472a951661492e565b6040519584879551918291018487015e8401908282015f8152815193849201905e01015f815203601f198101835282613f42565b925050505f038060020b9081036137e25761472a90828061594f62ffffff6040516159af604082613f42565b60018152602d60f81b84820152949550505061593c565b604051906159d5604083613f42565b6002825261323760f01b6020830152565b604051906159f5604083613f42565b6002825261323160f01b6020830152565b60405190615a15604083613f42565b6002825261062760f31b6020830152565b60405190615a35604083613f42565b60018252600760fb1b6020830152565b9060020b9060020b01627fffff198112627fffff8213176137e257600290810b0560020b6201e8471981125f14615a9f5750615a7f615a26565b90604051615a8e604082613f42565b60018152603760f81b602082015290565b620124f719811215615ad75750615ab4615a26565b90604051615ac3604082613f42565b600481526331302e3560e01b602082015290565b6161a719811215615b0f5750615aeb615a26565b90604051615afa604082613f42565b600581526431342e323560d81b602082015290565b61138719811215615b415750604051615b29604082613f42565b6002815261031360f41b60208201529061472a615a06565b5f811215615b705750604051615b58604082613f42565b6002815261313160f01b60208201529061472a6159e6565b611388811215615bb95750604051615b89604082613f42565b6002815261313360f01b602082015290604051615ba7604082613f42565b6002815261323360f01b602082015290565b6161a8811215615c025750604051615bd2604082613f42565b6002815261313560f01b602082015290604051615bf0604082613f42565b6002815261323560f01b602082015290565b620124f8811215615c375750615c16615a06565b90604051615c25604082613f42565b6002815261191b60f11b602082015290565b6201e8481315615c5257615c496159e6565b9061472a6159c6565b604051615c60604082613f42565b60028152610c8d60f21b60208201529061472a6159c656fe203c616e696d6174652061646469746976653d2273756d22206174747269627565663d22646174613a696d6167652f7376672b786d6c3b6261736536342c00003c7376672077696474683d2732393027206865696768743d2735303027207669696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220663c7465787420783d22313270782220793d22313770782220666f6e742d66616d70616e2066696c6c3d2272676261283235352c3235352c3235352c302e3629226f3d22313030252220626567696e3d22307322206475723d223330732220726574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f6e742d73697a653d2231317078222066696c6c3d227768697465223e3c7473203c67207374796c653d227472616e73666f726d3a7472616e736c61746528326577426f783d2730203020323930203530302720786d6c6e733d27687474703a207374796c653d227472616e73666f726d3a7472616e736c6174652837327078a164736f6c634300081a000a'; } } diff --git a/src/briefcase/deployers/v4-periphery/PositionManagerDeployer.sol b/src/briefcase/deployers/v4-periphery/PositionManagerDeployer.sol index 5d6b81b6..184c9187 100644 --- a/src/briefcase/deployers/v4-periphery/PositionManagerDeployer.sol +++ b/src/briefcase/deployers/v4-periphery/PositionManagerDeployer.sol @@ -28,6 +28,7 @@ library PositionManagerDeployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'61018080604052346105365760a0816162a38038038091610020828561053a565b8339810103126105365780516001600160a01b03811681036105365760208201516001600160a01b03811681036105365760408301516060840151936001600160a01b03851685036105365760800151926001600160a01b03841684036105365760405161008f60408261053a565b6018815260208101907f556e697377617020763420506f736974696f6e73204e4654000000000000000082526040516100c960408261053a565b600b81526a554e492d56342d504f534d60a81b602082015281516001600160401b03811161044a575f54600181811c9116801561052c575b602082101461042c57601f81116104ca575b50806020601f8211600114610469575f9161045e575b508160011b915f199060031b1c1916175f555b8051906001600160401b03821161044a5760015490600182811c92168015610440575b602083101461042c5781601f8493116103be575b50602090601f8311600114610358575f9261034d575b50508160011b915f199060031b1c1916176001555b5190208060c0524660a05260405160208101917f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86683526040820152466060820152306080820152608081526101f460a08261053a565b51902060805260e052610100526101205261014052600160085561016052604051615d45908161055e8239608051816124d5015260a051816124af015260c05181612524015260e051818181610af601528181610eb501528181611174015281816118c001528181611c3c01528181611cd1015281816120a1015281816121980152818161295801528181612a2c01528181612f1b01528181613d4601528181613e3901528181613edc01528181613ff30152818161431b0152818161457401528181614ae901528181614c6601528181614de401528181614ec901528181614f59015261576f01526101005181818161144001526131fb01526101205181818161039c01528181610a0e01528181610dc90152614efa015261014051818181611482015281816129ca01528181613a4201528181613a9e01528181613bc20152613c4b0152610160518181816116350152611fab0152f35b015190505f80610189565b60015f9081528281209350601f198516905b8181106103a6575090846001959493921061038e575b505050811b0160015561019e565b01515f1960f88460031b161c191690555f8080610380565b9293602060018192878601518155019501930161036a565b60015f529091507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f840160051c81019160208510610422575b90601f859493920160051c01905b8181106104145750610173565b5f8155849350600101610407565b90915081906103f9565b634e487b7160e01b5f52602260045260245ffd5b91607f169161015f565b634e487b7160e01b5f52604160045260245ffd5b90508301515f610129565b5f8080528181209250601f198416905b8181106104b25750908360019493921061049a575b5050811b015f5561013c565b8501515f1960f88460031b161c191690555f8061048e565b9192602060018192868a015181550194019201610479565b5f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c81019160208410610522575b601f0160051c01905b8181106105175750610113565b5f815560010161050a565b9091508190610501565b90607f1690610101565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761044a5760405256fe60806040526004361015610022575b3615610018575f80fd5b6100206129c0565b005b5f3560e01c80622a3e3a1461029057806301ffc9a71461028b57806305c1ee201461028657806306fdde0314610281578063081812fc1461027c578063095ea7b3146102775780630f5730f11461027257806312261ee71461026d57806316a24131146102685780631efeed331461026357806323b872dd1461025e5780632b67b570146102595780632b9261de146102545780633644e5151461024f5780633aea60f01461024a57806342842e0e146102455780634767565f146102405780634aa4a4fc1461023b5780634afe393c14610236578063502e1a16146102315780635a9d7a681461022c5780636352211e1461022757806370a082311461022257806375794a3c1461021d5780637ba03aad1461021857806386b6be7d1461021357806389097a6a1461020e57806391dd73461461020957806395d89b4114610204578063a22cb465146101ff578063ac9650d8146101fa578063ad0b27fb146101f5578063b88d4fde146101f0578063c87b56dd146101eb578063d737d0c7146101e6578063dc4c90d3146101e1578063dd46508f146101dc578063e985e9c5146101d75763f70204050361000e576122ae565b612248565b6120c5565b612082565b61203d565b611f56565b611c7c565b611c28565b611b2b565b611a7b565b6119c6565b611884565b61185a565b6117be565b61174f565b611732565b611688565b611659565b611616565b6115cc565b6114d7565b611463565b611429565b611161565b611088565b611057565b610e72565b610d58565b610ae2565b610a65565b610a32565b6109ef565b6108e0565b610839565b610806565b6106ef565b61063e565b61056c565b61033c565b6001600160a01b038116036102a657565b5f80fd5b35906102b582610295565b565b9181601f840112156102a65782359167ffffffffffffffff83116102a657602083818601950101116102a657565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9060206103399281815201906102e5565b90565b60606003193601126102a65760043561035481610295565b6024359067ffffffffffffffff82116102a6578136039160606003198401126102a65760443567ffffffffffffffff81116102a6576103979036906004016102b7565b6060947f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693909290843b156102a6576001600160a01b03604051967f2a2d80d10000000000000000000000000000000000000000000000000000000088521660048701526060602487015260c48601937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd826004013591018112156102a65781016024600482013591019467ffffffffffffffff82116102a6578160071b360386136102a65760606064890152819052869460e48601949392915f5b81811061051a575050506104cb5f9694869488946044856104b36104a360248b99016102aa565b6001600160a01b03166084890152565b013560a48601526003198584030160448601526123c0565b03925af19081610500575b506104f757506104f36104e7612466565b60405191829182610328565b0390f35b6104f3906104e7565b8061050e5f610514936106ae565b80610656565b5f6104d6565b91965091929394608080826105316001948b612361565b01970191019188969594939261047c565b7fffffffff000000000000000000000000000000000000000000000000000000008116036102a657565b346102a65760206003193601126102a65760207fffffffff000000000000000000000000000000000000000000000000000000006004356105ac81610542565b167f01ffc9a7000000000000000000000000000000000000000000000000000000008114908115610614575b81156105ea575b506040519015158152f35b7f5b5e139f000000000000000000000000000000000000000000000000000000009150145f6105df565b7f80ac58cd00000000000000000000000000000000000000000000000000000000811491506105d8565b60206003193601126102a65761002060043533612a54565b5f9103126102a657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff8211176106a957604052565b610660565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106a957604052565b346102a6575f6003193601126102a6576040515f80548060011c90600181169081156107fc575b6020831082146107cf5782855260208501919081156107985750600114610748575b6104f3846104e7818603826106ae565b5f8080529250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b818410610784575050016104e782610738565b805484840152602090930192600101610771565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682525090151560051b0190506104e782610738565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610716565b346102a65760206003193601126102a6576004355f52600460205260206001600160a01b0360405f205416604051908152f35b346102a65760406003193601126102a65760043561085681610295565b602435805f5260026020526001600160a01b0360405f2054169182331415806108af575b6108875761002092612ab5565b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b50825f52600560205260ff6108d83360405f20906001600160a01b03165f5260205260405f2090565b54161561087a565b60a06003193601126102a6576004356108f881610295565b602435604435916064359260843567ffffffffffffffff81116102a6576109239036906004016102b7565b948242116109c7576109bc856109c293610020986109b6885f8099868252600260205281896001600160a01b036040832054169c8d9981604051977f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad89526001600160a01b0360208a01911681526040890192835260608901948552608089019687528160a08a20995252525252612b2c565b91612be5565b82612a54565b612ab5565b7f5a9165ff000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102a6575f6003193601126102a65760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102a65760206003193601126102a6576004355f52600760205260206001600160a01b0360405f205416604051908152f35b346102a65760206003193601126102a6576020610a9c600435610a8781612669565b919082851c60020b9260081c60020b91612e68565b6fffffffffffffffffffffffffffffffff60405191168152f35b60031960609101126102a657600435610ace81610295565b90602435610adb81610295565b9060443590565b346102a657610af036610ab6565b91610b1a7f0000000000000000000000000000000000000000000000000000000000000000612f9c565b610d30578291610c41610b54610b48610b3b865f52600260205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b91610b6a6001600160a01b03851693841461302f565b610bb46001600160a01b03821694610b83861515613094565b8433148015610cf2575b8015610ccd575b610b9d906130f9565b6001600160a01b03165f52600360205260405f2090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055610bf5816001600160a01b03165f52600360205260405f2090565b80546001019055610c0e855f52600260205260405f2090565b906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b610c7e610c56845f52600460205260405f2090565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4610cbe610cb7825f52600960205260405f2090565b5460ff1690565b610cc457005b6100209061315e565b50610b9d610ce9610b48610b3b8a5f52600460205260405f2090565b33149050610b94565b50610d2b610cb733610d15846001600160a01b03165f52600560205260405f2090565b906001600160a01b03165f5260205260405f2090565b610b8d565b7fd4b05fe0000000000000000000000000000000000000000000000000000000005f5260045ffd5b6101006003193601126102a657600435610d7181610295565b60c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126102a65760e43567ffffffffffffffff81116102a657610dbb9036906004016102b7565b916060926001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102a6576001600160a01b035f80946104cb604051978896879586947f2b67b570000000000000000000000000000000000000000000000000000000008652166004850152610e3d602485016122f6565b6001600160a01b0360a435610e5181610295565b1660a485015260c43560c485015261010060e48501526101048401916123c0565b60606003193601126102a657602435600435610e8d82610295565b60443567ffffffffffffffff81116102a657610ead9036906004016102b7565b610ed99391937f0000000000000000000000000000000000000000000000000000000000000000612f9c565b610d3057610ee783336132b6565b1561102b576001600160a01b03610f09610b3b855f52600760205260405f2090565b1680610fef57505f83815260096020526040902080546001179055610fbf90610fbb90610fb56001600160a01b03851696610f5088610c0e895f52600760205260405f2090565b610f896040519384927f8d57f6b20000000000000000000000000000000000000000000000000000000060208501528960248501612495565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826106ae565b8361334b565b1590565b610fea57507f9709492381f90bdc5938bb4e3b8e35b7e0eac8af058619e27191c5a40ce79fa95f80a3005b61338c565b7f25fbd8be000000000000000000000000000000000000000000000000000000005f5260048490526001600160a01b031660245260445ffd5b5ffd5b7f0ca968d8000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346102a6575f6003193601126102a65760206110716124ac565b604051908152f35b6044359081151582036102a657565b60c06003193601126102a6576004356110a081610295565b6024356110ac81610295565b6110b4611079565b906064359260843560a43567ffffffffffffffff81116102a6576110dc9036906004016102b7565b8692919242116109c7578361115c936109bc926109b6885f6100209c8189818f81604051977f6673cb397ee2a50b6b8401653d3638b4ac8b3db9c28aa6870ffceb7574ec2f7689526001600160a01b0360208a0191168152600160408a019316835260608901948552608089019687528160a08a20995252525252612b2c565b6136b8565b346102a65761116f36610ab6565b6111987f0000000000000000000000000000000000000000000000000000000000000000612f9c565b610d30576111b4610b48610b3b835f52600260205260405f2090565b916111ca6001600160a01b03851693841461302f565b816001600160a01b03821680946111e2821515613094565b8033148015611401575b80156113dc575b6111fc906130f9565b611217876001600160a01b03165f52600360205260405f2090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055611258846001600160a01b03165f52600360205260405f2090565b8054600101905561127584610c0e855f52600260205260405f2090565b61128a610c56845f52600460205260405f2090565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a46112c3610cb7835f52600960205260405f2090565b6113ce575b3b159182156112db575b6100208361257e565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039490941660248501526044840191909152608060648401525f6084840181905260209250839160a49183915af180156113c9577fffffffff000000000000000000000000000000000000000000000000000000007f150b7a020000000000000000000000000000000000000000000000000000000091610020935f9161139a575b5016145f806112d2565b6113bc915060203d6020116113c2575b6113b481836106ae565b810190612569565b5f611390565b503d6113aa565b6123fe565b6113d78261315e565b6112c8565b506111fc6113f8610b48610b3b865f52600460205260405f2090565b331490506111f3565b50611424610cb733610d158a6001600160a01b03165f52600560205260405f2090565b6111ec565b346102a6575f6003193601126102a65760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346102a6575f6003193601126102a65760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b9181601f840112156102a65782359167ffffffffffffffff83116102a6576020808501948460051b0101116102a657565b60406003193601126102a65760043567ffffffffffffffff81116102a6576115039036906004016102b7565b60243567ffffffffffffffff81116102a6576115239036906004016114a6565b916001600160a01b037f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c166115a45761157f93337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d61376b565b5f7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d005b7f6f5ffb7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102a65760406003193601126102a6576004356115e981610295565b6001600160a01b0360243591165f52600660205260405f20905f52602052602060405f2054604051908152f35b346102a6575f6003193601126102a65760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102a65760206003193601126102a6576020611677600435612648565b6001600160a01b0360405191168152f35b346102a65760206003193601126102a6576001600160a01b036004356116ad81610295565b1680156116d4575f5260036020526104f360405f2054604051918291829190602083019252565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152fd5b346102a6575f6003193601126102a6576020600854604051908152f35b346102a65760206003193601126102a65760c061176d600435612669565b6117b760405180936001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60a0820152f35b346102a65760206003193601126102a6576004357fffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000081168091036102a6575f908152600a60209081526040918290208054600182015460029283015485516001600160a01b0393841681528383169581019590955260a082811c62ffffff169686019690965260b89190911c90920b6060840152166080820152f35b346102a65760206003193601126102a6576004355f526009602052602060405f2054604051908152f35b346102a65760206003193601126102a65760043567ffffffffffffffff81116102a6576118b59036906004016102b7565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361199e5760408135189063ffffffff60408201351663ffffffe0601f8201169260608401602084013518179282019260608401359483641fffffffe08760051b16805f905b8881831061196f5790506080929150010191011017611962576060608063ffffffff61195796169401920161376b565b6104f36104e7612452565b633b99b53d5f526004601cfd5b8294509263ffffffe0601f60808060209687969801013599848b1817998d010135011601019201869291611927565b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102a6575f6003193601126102a6576040515f6001548060011c9060018116908115611a71575b6020831082146107cf5782855260208501919081156107985750600114611a1f576104f3846104e7818603826106ae565b60015f9081529250907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b818410611a5d575050016104e782610738565b805484840152602090930192600101611a4a565b91607f16916119ee565b346102a65760406003193601126102a657600435611a9881610295565b60243580151581036102a65761002091336136b8565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310611ae057505050505090565b9091929394602080611b1c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516102e5565b97019301930191939290611ad1565b60206003193601126102a65760043567ffffffffffffffff81116102a657611b579036906004016114a6565b90611b6182612747565b91611b6f60405193846106ae565b8083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611b9c82612747565b015f5b818110611c175750505f5b818110611bbf57604051806104f38682611aae565b5f80611bcc83858761278c565b90611bdc604051809381936127f1565b0390305af4611be9612466565b9015611c0f5790600191611bfd82876127fe565b52611c0881866127fe565b5001611baa565b602081519101fd5b806060602080938801015201611b9f565b60206003193601126102a657600435611c607f0000000000000000000000000000000000000000000000000000000000000000612f9c565b610d3057611c6e81336132b6565b1561102b576100209061315e565b346102a65760806003193601126102a657600435611c9981610295565b60243590611ca682610295565b60443560643567ffffffffffffffff81116102a657611cc99036906004016102b7565b939091611cf57f0000000000000000000000000000000000000000000000000000000000000000612f9c565b610d3057611d11610b48610b3b835f52600260205260405f2090565b91611d276001600160a01b03861693841461302f565b816001600160a01b0382168094611d3f821515613094565b8033148015611f2e575b8015611f09575b611d59906130f9565b611d74886001600160a01b03165f52600360205260405f2090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055611db5846001600160a01b03165f52600360205260405f2090565b80546001019055611dd284610c0e855f52600260205260405f2090565b611de7610c56845f52600460205260405f2090565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4611e20610cb7835f52600960205260405f2090565b611efb575b3b15938415611e38575b6100208561257e565b602094505f90611e78604051978896879586947f150b7a020000000000000000000000000000000000000000000000000000000086523360048701612812565b03925af180156113c9577fffffffff000000000000000000000000000000000000000000000000000000007f150b7a020000000000000000000000000000000000000000000000000000000091610020935f91611edc575b5016145f808080611e2f565b611ef5915060203d6020116113c2576113b481836106ae565b5f611ed0565b611f048261315e565b611e25565b50611d59611f25610b48610b3b865f52600460205260405f2090565b33149050611d50565b50611f51610cb733610d158b6001600160a01b03165f52600560205260405f2090565b611d49565b346102a65760206003193601126102a657600435604051907fe9dc637500000000000000000000000000000000000000000000000000000000825230600483015260248201525f816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156113c9575f90611fea575b6104f39060405191829182610328565b503d805f833e611ffa81836106ae565b8101906020818303126102a65780519067ffffffffffffffff82116102a6570181601f820112156102a6576104f39181602061203893519101612840565b611fda565b346102a6575f6003193601126102a65760207f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c6001600160a01b0360405191168152f35b346102a6575f6003193601126102a65760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60406003193601126102a65760043567ffffffffffffffff81116102a6576120f19036906004016102b7565b6024356001600160a01b037f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c166115a457337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d80421161221d576040517f48c89491000000000000000000000000000000000000000000000000000000008152602060048201525f818061218b6024820187896123c0565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156113c9576121cd575b610020613746565b3d805f833e6121dc81836106ae565b8101906020818303126102a65780519067ffffffffffffffff82116102a657019080601f830112156102a657815161221692602001612840565b50806121c5565b7fbfb22adf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346102a65760406003193601126102a657602060ff6122a260043561226c81610295565b6001600160a01b036024359161228183610295565b165f526005845260405f20906001600160a01b03165f5260205260405f2090565b54166040519015158152f35b600319360160c081126102a65760a0136102a65760206122d860a4356122d381610295565b6128a3565b6040519060020b8152f35b359065ffffffffffff821682036102a657565b6001600160a01b0360243561230a81610295565b1681526001600160a01b0360443561232181610295565b16602082015260643565ffffffffffff81168091036102a657604082015260843565ffffffffffff811681036102a65765ffffffffffff60609116910152565b65ffffffffffff6123ba606080936001600160a01b03813561238281610295565b1686526001600160a01b03602082013561239b81610295565b166020870152836123ae604083016122e3565b166040870152016122e3565b16910152565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b6040513d5f823e3d90fd5b604051906102b56080836106ae565b67ffffffffffffffff81116106a957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b604051906124616020836106ae565b5f8252565b3d15612490573d9061247782612418565b9161248560405193846106ae565b82523d5f602084013e565b606090565b6040906103399492815281602082015201916123c0565b467f0000000000000000000000000000000000000000000000000000000000000000036124f7577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f000000000000000000000000000000000000000000000000000000000000000060408201524660608201523060808201526080815261256360a0826106ae565b51902090565b908160209103126102a6575161033981610542565b1561258557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152fd5b156125ea57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152fd5b5f5260026020526001600160a01b0360405f205416906102b58215156125e3565b5f60806040516126788161068d565b82815282602082015282604082015282606082015201525f52600960205260405f2054807fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000165f52600a60205260405f206127446127346002604051936126de8561068d565b6001600160a01b03815416855261272661271c60018301546001600160a01b038116602089015262ffffff8160a01c16604089015260b81c60020b90565b60020b6060870152565b01546001600160a01b031690565b6001600160a01b03166080830152565b91565b67ffffffffffffffff81116106a95760051b60200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156127ec5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102a657019081359167ffffffffffffffff83116102a65760200182360381136102a6579190565b61275f565b908092918237015f815290565b80518210156127ec5760209160051b010190565b90926001600160a01b03608093816103399896168452166020830152604082015281606082015201916123c0565b92919261284c82612418565b9161285a60405193846106ae565b8294818452818301116102a6578281602093845f96015e010152565b8060020b036102a657565b908160209103126102a6575161033981612876565b62ffffff8116036102a657565b6001600160a01b03604051917f6276cbbe000000000000000000000000000000000000000000000000000000008352816004356128df81610295565b166004840152816024356128f281610295565b16602484015262ffffff60443561290881612896565b16604484015260643561291a81612876565b60020b606484015261294160843561293181610295565b6001600160a01b03166084850152565b1660a482015260208160c4815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af15f918161298f575b506103395750627fffff90565b6129b291925060203d6020116129b9575b6129aa81836106ae565b810190612881565b905f612982565b503d6129a0565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580612a21575b6129f957565b7f38bbd576000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314156129f3565b906001600160a01b03600160ff83161b92165f52600660205260405f209060081c5f5260205260405f20818154188091551615612a8d57565b7f1fb09b80000000000000000000000000000000000000000000000000000000005f5260045ffd5b906001600160a01b038091845f526004602052612b038160405f20906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b1691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4565b90612b356124ac565b91604051927f19010000000000000000000000000000000000000000000000000000000000008452600284015260228301525f604060428420938281528260208201520152565b91908260409103126102a6576020823592013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff601b9116019060ff8211612bd157565b612b92565b90604010156127ec5760400190565b90833b612d7a5760418103612cee5790602092612c6e83612c46612c40612c1a612c125f98880188612b7c565b949097612bd6565b357fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b935b604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156113c9576001600160a01b035f5116908115612cc6576001600160a01b031603612c9e57565b7f815e1d64000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8baa579f000000000000000000000000000000000000000000000000000000005f5260045ffd5b9060408203612d5257602092612d0b825f94612c6e940190612b7c565b929092612d4c612d47612d417f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c90565b60ff1690565b612bbf565b93612c48565b7f4be6321b000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092612dc1936001600160a01b03602094604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501612495565b0392165afa9081156113c9577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f91612e49575b501603612e2157565b7fb0669cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b612e62915060203d6020116113c2576113b481836106ae565b5f612e18565b9290612ea39260a092604051956026870152600686015260038501523084525f603a600c860120948160408201528160208201525220614bbf565b60068101809111612bd15760408051602081810194855291810192909252612f0f929091612ed48160608101610f89565b519020604051809381927f1e2eaeaf000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156113c9576fffffffffffffffffffffffffffffffff915f91612f6057501690565b612f82915060203d602011612f86575b612f7a81836106ae565b810190612f8d565b1690565b503d612f70565b908160209103126102a6575190565b60206001600160a01b03916024604051809481937ff135baaa0000000000000000000000000000000000000000000000000000000083527fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab236004840152165afa9081156113c9575f91613010575b50151590565b613029915060203d602011612f8657612f7a81836106ae565b5f61300a565b1561303657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152fd5b1561309b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152fd5b1561310057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152fd5b6001600160a01b0361317b610b3b835f52600760205260405f2090565b1690811561328e575f81815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556131cb610c56825f52600760205260405f2090565b813b6131f8575b7fa0ebb1de82db929a9153472f37d3a66dbede4436258311ad0f52a35a2c91d1505f80a3565b5a7f000000000000000000000000000000000000000000000000000000000000000080911061328957823b156102a6575f60405180927faf45dd140000000000000000000000000000000000000000000000000000000082528183878261326789600483019190602083019252565b0393f1613275575b506131d2565b8061050e5f613283936106ae565b5f61326f565b6137d4565b7f237e6c28000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b036132c783612648565b16916001600160a01b03821692831492831561332a575b5082156132ea57505090565b60ff9250906001600160a01b0361330361332593612648565b165f52600560205260405f20906001600160a01b03165f5260205260405f2090565b541690565b908093505f5260046020526001600160a01b0360405f20541614915f6132de565b803b1561336457815f92918360208194519301915af190565b7f7c402b21000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01166001600160a01b03604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301527f8d57f6b2000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7f81ea5e9e0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01166001600160a01b03604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301527fa9059cbb000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01166001600160a01b03604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301525f6024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff4b3b1bc0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01166001600160a01b03604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301527fb1a9116f000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7face944810000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b60206001600160a01b03807f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31931693845f526005835261370c8160405f20906001600160a01b03165f5260205260405f2090565b951515957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff88161790556040519586521693a3565b5f7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d565b909291938284036137ac575f5b848110156137a45760019061379e81850161379483888b61278c565b913560f81c6137fc565b01613778565b509350505050565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fed43c3a6000000000000000000000000000000000000000000000000000000005f5260045ffd5b909190600b8110156139175780613827575061381b906102b5926149cc565b94939093929192614b63565b60048103613846575061383d906102b592614185565b93929092614a79565b60018103613868575061385c906102b5926149cc565b94939093929192614a0e565b600281036138975750613881613891916102b5936145df565b9890979691959295949394613cc2565b9561478a565b600581036138c357506138b06138bd916102b593614481565b9790969591949294613cc2565b94614543565b91600383146138ff57505061102891505b7f5cda29d7000000000000000000000000000000000000000000000000000000005f52600452602490565b6102b592509061390e91614185565b939290926141c1565b600d8103613933575061392d906102b592613caf565b90614147565b6011810361395b575061394c613955916102b593613e9e565b92909192613cc2565b9161412c565b600b810361398f5750613989613977613983926102b594613e9e565b93829493929193613f73565b92613fa1565b91613fe2565b600e81036139c157506139b56139ab6139bb926102b594613e9e565b9282949291613cc2565b92613eb6565b91613eca565b601281036139dc57506139d7906102b592613ac8565b613e32565b601381036139f857506139f2906102b592613caf565b90613d25565b60148103613a1f5750613a11613a19916102b593613caf565b919091613cc2565b90613d07565b60158103613a6d5750613a38613a68916102b593613ac8565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690613b54565b613c39565b9160168314613a8257505061102891506138d4565b6102b59250613ac391613a9491613ac8565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016613ad4565b613bb0565b90602011611962573590565b613adf903090614bdf565b7f80000000000000000000000000000000000000000000000000000000000000008214613b4f578115613b3e575b8111613b165790565b7ff4d678b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050613b495f614c5f565b90613b0d565b905090565b90613b5f305f614bdf565b907f80000000000000000000000000000000000000000000000000000000000000008314613baa578215613b98575b508111613b165790565b613ba3919250614c5f565b905f613b8e565b50905090565b80613bb85750565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690813b156102a6575f916024839260405194859384927f2e1a7d4d00000000000000000000000000000000000000000000000000000000845260048401525af180156113c957613c2f5750565b5f6102b5916106ae565b80613c415750565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102a6575f906004604051809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af180156113c957613c2f5750565b9190604011611962576020823592013590565b6001600160a01b03811660018103613cfb5750507f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c90565b60020361033957503090565b90613d1182614cd1565b9081613d1c57505050565b6102b592614d37565b90613d2f82614ddd565b908115613e01578111613dd5576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b156102a6575f9283926040519485809481937f80f0b44c0000000000000000000000000000000000000000000000000000000083526020600484016001600160a01b036040820194168152015203925af180156113c957613dc75750565b8061050e5f6102b5936106ae565b6102b5917f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c90613eca565b505050565b7f80000000000000000000000000000000000000000000000000000000000000008114612bd1575f0390565b613e5d81307f0000000000000000000000000000000000000000000000000000000000000000614e49565b907f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c5f831215613e94576139896102b593613e06565b6102b59291613eca565b90606011611962578035916040602083013592013590565b9081613ec6576103399150614ddd565b5090565b90918015613e01576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102a6575f92836064926001600160a01b03948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af180156113c957613f5e5750565b80613f6a5f80936106ae565b8003126102a657565b15613f9d577f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c90565b3090565b907f80000000000000000000000000000000000000000000000000000000000000008203613fd3576103399150614cd1565b81613ec6576103399150614c5f565b908215613e01576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b156102a6576040517fa58411940000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f8160248183885af180156113c957614118575b506001600160a01b0381166140ce5750506020906004604051809481937f11da60b40000000000000000000000000000000000000000000000000000000083525af180156113c9576140b35750565b6140cb9060203d602011612f8657612f7a81836106ae565b50565b5f93602093926140dd92614ea7565b6004604051809481937f11da60b40000000000000000000000000000000000000000000000000000000083525af180156113c9576140b35750565b8061050e5f614126936106ae565b5f614064565b9161413e6102b593826139bb82614ddd565b6139bb82614ddd565b906102b59161417c7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c918261398982614c5f565b61398982614c5f565b919082359260208101359260408201359263ffffffff60608401351683019063ffffffff82351693602080840193860101910110611962579190565b939290927f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c6141f186826132b6565b156143ae575061420085612669565b9290938360081c60020b958460201c60020b9661423761422289838a8d612e68565b6fffffffffffffffffffffffffffffffff1690565b966142418a612648565b955f6142558c5f52600960205260405f2090565b5561425f8b614faa565b5f9989614291575b505050505050508160ff1661427e575b5050505050565b614287946151b4565b5f80808080614277565b60409495969a509061430e916142d16142b16142ac8d61507e565b613e06565b916142c76142bd612409565b97889060020b9052565b60020b6020870152565b858501528b606085015284519a8b9485947f5a6bcfda000000000000000000000000000000000000000000000000000000008652600486016143f9565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156113c9575f965f9161436e575b509061435d826143629493986150b0565b6150ed565b5f808080808080614267565b61435d97506143629392915061439b9060403d6040116143a7575b61439381836106ae565b8101906143e3565b9790979192935061434c565b503d614389565b6001600160a01b03907f0ca968d8000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b91908260409103126102a6576020825192015190565b6060610339959361444a83610140956001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b805160020b60a0840152602081015160020b60c0840152604081015160e084015201516101008201528161012082015201916123c0565b91908260a08101359260c08201359260e083013592610100810135926101208201359263ffffffff6101408401351683019063ffffffff82351693602080840193860101910110611962579190565b91908260a09103126102a6576040516144e88161068d565b608080829480356144f881610295565b8452602081013561450881610295565b6020850152604081013561451b81612896565b6040850152606081013561452e81612876565b606085015201359161453f83610295565b0152565b90916102b59796959493926fffffffffffffffffffffffffffffffff6145d861459860a061457136886144d0565b207f0000000000000000000000000000000000000000000000000000000000000000615264565b5050506145a484615303565b6145ad86615303565b6145c088356145bb81610295565b614ddd565b916145d260208a01356145bb81610295565b9361564f565b169261478a565b9091819260a08301359260c08101359260e08201359261010083013592610120810135926101408201359263ffffffff6101608401351683019063ffffffff82351693602080840193860101910110611962579190565b600260806102b593614680813561464c81610295565b85906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b600184016146c9602083013561469581610295565b82906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60408201356146d781612896565b81547fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000606086013561472081612876565b60b81b79ffffff0000000000000000000000000000000000000000000000169360a01b1691161717905501359161475683610295565b01906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b90919496929793959760085492600184016008556001600160a01b038a16996147b48b1515613094565b845f5260026020526001600160a01b0360405f20541661496e5761488a6149259861491f93876102b59e61481986614800614917986001600160a01b03165f52600360205260405f2090565b80546001019055610c0e845f52600260205260405f2090565b5f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a461484836886144d0565b63ffffff007fffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000060a066ffffff000000009320169260081b169260201b16171790565b928361489e875f52600960205260405f2090565b55837fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000168561490760016148fc847fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000165f52600a60205260405f2090565b015460b81c60020b90565b60020b1561492b575b505061507e565b9236906144d0565b906156fc565b506157de565b614962614967927fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000165f52600a60205260405f2090565b614636565b5f85614910565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152fd5b909181359260208301359260408101359260608201359263ffffffff60808401351683019063ffffffff82351693602080840193860101910110611962579190565b90959495939192937f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c614a4283826132b6565b156143ae57509561435d92826142ac6102b59899614a6d614a65614a7397612669565b93909261507e565b916156fc565b906150b0565b949394929091927f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c614aac82826132b6565b156143ae57506102b59495614b5e9282614ac8614a7394612669565b90614a6d6fffffffffffffffffffffffffffffffff614b58614b0d60a085207f0000000000000000000000000000000000000000000000000000000000000000615264565b505050614b1f8660081c60020b615303565b614b2e8760201c60020b615303565b614b416001600160a01b03885116614ddd565b916145d26001600160a01b0360208a015116614ddd565b1661507e565b6157de565b90959495939192937f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c614b9783826132b6565b156143ae575095614b5e9282614a6d6102b59899614bb7614a7396612669565b92909161507e565b6040516020810191825260066040820152604081526125636060826106ae565b6001600160a01b038116614bf257503190565b906001600160a01b0360246020928260405195869485937f70a08231000000000000000000000000000000000000000000000000000000008552166004840152165afa9081156113c9575f91614c46575090565b610339915060203d602011612f8657612f7a81836106ae565b614c8a81307f0000000000000000000000000000000000000000000000000000000000000000614e49565b905f8213614c9c575061033990613e06565b6001600160a01b03907f3351b260000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001600160a01b038116614ce457504790565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290602090829060249082906001600160a01b03165afa9081156113c9575f91614c46575090565b9091906001600160a01b038116614d6457505f808080614d5894865af11590565b614d5f5750565b613532565b91906001600160a01b03604051927fa9059cbb00000000000000000000000000000000000000000000000000000000845216600483015260248201525f604060208260448582885af13d15601f3d11600185511416171692828152826020820152015215614dcf5750565b6001600160a01b031661345f565b614e0881307f0000000000000000000000000000000000000000000000000000000000000000614e49565b905f8212614e14575090565b6001600160a01b03907f4c085bf1000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001600160a01b03809381602094165f52168252602460405f2060405194859384927ff135baaa0000000000000000000000000000000000000000000000000000000084526004840152165afa9081156113c9575f91614c46575090565b9091906001600160a01b0383163003614eef576102b592506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690614d37565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102a6576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b0394851660048201527f00000000000000000000000000000000000000000000000000000000000000008516602482015291841660448301529190921660648301525f908290608490829084905af180156113c957613dc75750565b805f5260026020525f6001600160a01b03604082205416614fcc8115156125e3565b8082526003602052604082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8154019055615010835f52600260205260405f2090565b80548360031b906001600160a01b03808616831b921b191617905561503d835f52600460205260405f2090565b80548360031b906001600160a01b03808616831b921b19161790557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4565b905f821261508857565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b6150d3906150c58360801d8260801d0361592c565b92600f0b90600f0b0361592c565b6fffffffffffffffffffffffffffffffff169060801b1790565b929190926fffffffffffffffffffffffffffffffff8160801d94816151118761593a565b9116918291161061519957506fffffffffffffffffffffffffffffffff929350600f0b908261513f8361593a565b9116928391161061514e575050565b906151696fffffffffffffffffffffffffffffffff9261593a565b907f12816f22000000000000000000000000000000000000000000000000000000005f526004521660245260445ffd5b6fffffffffffffffffffffffffffffffff906151698661593a565b5f81815260076020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000081169091556001600160a01b039081169561525895610fbb959394919390929091604051957fb1a9116f00000000000000000000000000000000000000000000000000000000602088015260248701521660448501526064840152608483015260a482015260a48152610fb560c4826106ae565b61525f5750565b6135e5565b602090602461527b6001600160a01b039594614bbf565b60405195869384927f1e2eaeaf0000000000000000000000000000000000000000000000000000000084526004840152165afa9182156113c9575f926152e2575b506001600160a01b038216918060a01c60020b9162ffffff808360b81c169260d01c1690565b6152fc91925060203d602011612f8657612f7a81836106ae565b905f6152bc565b60020b908160ff1d82810118620d89e881116156495763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a5940010270010000000000000000000000000000000018916002811661562d575b60048116615611575b600881166155f5575b601081166155d9575b602081166155bd575b604081166155a1575b60808116615585575b6101008116615569575b610200811661554d575b6104008116615531575b6108008116615515575b61100081166154f9575b61200081166154dd575b61400081166154c1575b61800081166154a5575b620100008116615489575b62020000811661546e575b620400008116615453575b620800001661543a575b5f12615413575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0461540c565b6b048a170391f7dc42444e8fa290910260801c90615405565b6d2216e584f5fa1ea926041bedfe9890920260801c916153fb565b916e5d6af8dedb81196699c329225ee6040260801c916153f0565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c916153e5565b916f31be135f97d08fd981231505542fcfa60260801c916153da565b916f70d869a156d2a1b890bb3df62baf32f70260801c916153d0565b916fa9f746462d870fdf8a65dc1f90e061e50260801c916153c6565b916fd097f3bdfd2022b8845ad8f792aa58250260801c916153bc565b916fe7159475a2c29b7443b29c7fa6e889d90260801c916153b2565b916ff3392b0822b70005940c7a398e4b70f30260801c916153a8565b916ff987a7253ac413176f2b074cf7815e540260801c9161539e565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91615394565b916ffe5dee046a99a2a811c461f1969c30530260801c9161538a565b916fff2ea16466c96a3843ec78b326b528610260801c91615381565b916fff973b41fa98c081472e6896dfb254c00260801c91615378565b916fffcb9843d60f6159c9db58835c9266440260801c9161536f565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91615366565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c9161535d565b916ffff97272373d413259a46990580e213a0260801c91615354565b82615959565b936001600160a01b0383166001600160a01b038316116156f4575b6001600160a01b0385811695908316861161568b57505061033993506159b7565b92909391946001600160a01b038216115f146156e85782916156b1916156b795946159b7565b93615987565b6fffffffffffffffffffffffffffffffff81166fffffffffffffffffffffffffffffffff8316105f14613b4f575090565b91505061033992615987565b90919061566a565b95939460409161576261570d612409565b60088a901c60020b81529260208a811c60020b908501528585850152866060850152845198899485947f5a6bcfda000000000000000000000000000000000000000000000000000000008652600486016143f9565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156113c9575f945f926157ba575b5081949560ff166157b157505050565b6102b592615a00565b9094506157d6915060403d6040116143a75761439381836106ae565b90935f6157a1565b908160801d600f0b91600f0b915f8112806158f7575b6158955750505f81128061585e575b61580b575050565b9061581b61422261102893613e06565b7f31e30ad0000000000000000000000000000000000000000000000000000000005f526fffffffffffffffffffffffffffffffff91821660045216602452604490565b506fffffffffffffffffffffffffffffffff8061587a83613e06565b16166fffffffffffffffffffffffffffffffff831610615803565b906fffffffffffffffffffffffffffffffff6158b361102893613e06565b7f31e30ad0000000000000000000000000000000000000000000000000000000005f526fffffffffffffffffffffffffffffffff9283166004521616602452604490565b506fffffffffffffffffffffffffffffffff61591282613e06565b166fffffffffffffffffffffffffffffffff8316106157f4565b9081600f0b91820361508857565b5f81600f0b12615088576fffffffffffffffffffffffffffffffff1690565b7f8b86327a000000000000000000000000000000000000000000000000000000005f5260020b60045260245ffd5b916001600160a01b03610339936159ac93828116838316116159b1575b031690615b43565b615d1b565b906159a4565b916159ac91610339936001600160a01b0382166001600160a01b038216116159fa575b6001600160a01b03906159f1828416838316615bff565b92031691615c79565b906159da565b615a6a9192815f5260076020526001600160a01b0360405f20541693604051927fd8865c2700000000000000000000000000000000000000000000000000000000602085015260248401526044830152606482015260648152615a646084826106ae565b8261334b565b15615a725750565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d0116604051917f90bfb86500000000000000000000000000000000000000000000000000000000835260048301527fd8865c27000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7fe94f10e20000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b156102a657565b908160601b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c010000000000000000000000008409928280851094039380850394615b91868511615b3c565b14615bf8576c0100000000000000000000000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b90808202917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828209918380841093039280840393846c0100000000000000000000000011156102a65714615c70576c01000000000000000000000000910990828211900360a01b910360601c1790565b50505060601c90565b91818302917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818509938380861095039480860395615cb9878611615b3c565b14615d13579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b906fffffffffffffffffffffffffffffffff82168092036150885756fea164736f6c634300081a000a'; + return + hex'61018080604052346105365760a0816162a38038038091610020828561053a565b8339810103126105365780516001600160a01b03811681036105365760208201516001600160a01b03811681036105365760408301516060840151936001600160a01b03851685036105365760800151926001600160a01b03841684036105365760405161008f60408261053a565b6018815260208101907f556e697377617020763420506f736974696f6e73204e4654000000000000000082526040516100c960408261053a565b600b81526a554e492d56342d504f534d60a81b602082015281516001600160401b03811161044a575f54600181811c9116801561052c575b602082101461042c57601f81116104ca575b50806020601f8211600114610469575f9161045e575b508160011b915f199060031b1c1916175f555b8051906001600160401b03821161044a5760015490600182811c92168015610440575b602083101461042c5781601f8493116103be575b50602090601f8311600114610358575f9261034d575b50508160011b915f199060031b1c1916176001555b5190208060c0524660a05260405160208101917f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86683526040820152466060820152306080820152608081526101f460a08261053a565b51902060805260e052610100526101205261014052600160085561016052604051615d45908161055e8239608051816124d5015260a051816124af015260c05181612524015260e051818181610af601528181610eb501528181611174015281816118c001528181611c3c01528181611cd1015281816120a1015281816121980152818161295801528181612a2c01528181612f1b01528181613d4601528181613e3901528181613edc01528181613ff30152818161431b0152818161457401528181614ae901528181614c6601528181614de401528181614ec901528181614f59015261576f01526101005181818161144001526131fb01526101205181818161039c01528181610a0e01528181610dc90152614efa015261014051818181611482015281816129ca01528181613a4201528181613a9e01528181613bc20152613c4b0152610160518181816116350152611fab0152f35b015190505f80610189565b60015f9081528281209350601f198516905b8181106103a6575090846001959493921061038e575b505050811b0160015561019e565b01515f1960f88460031b161c191690555f8080610380565b9293602060018192878601518155019501930161036a565b60015f529091507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f840160051c81019160208510610422575b90601f859493920160051c01905b8181106104145750610173565b5f8155849350600101610407565b90915081906103f9565b634e487b7160e01b5f52602260045260245ffd5b91607f169161015f565b634e487b7160e01b5f52604160045260245ffd5b90508301515f610129565b5f8080528181209250601f198416905b8181106104b25750908360019493921061049a575b5050811b015f5561013c565b8501515f1960f88460031b161c191690555f8061048e565b9192602060018192868a015181550194019201610479565b5f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c81019160208410610522575b601f0160051c01905b8181106105175750610113565b5f815560010161050a565b9091508190610501565b90607f1690610101565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761044a5760405256fe60806040526004361015610022575b3615610018575f80fd5b6100206129c0565b005b5f3560e01c80622a3e3a1461029057806301ffc9a71461028b57806305c1ee201461028657806306fdde0314610281578063081812fc1461027c578063095ea7b3146102775780630f5730f11461027257806312261ee71461026d57806316a24131146102685780631efeed331461026357806323b872dd1461025e5780632b67b570146102595780632b9261de146102545780633644e5151461024f5780633aea60f01461024a57806342842e0e146102455780634767565f146102405780634aa4a4fc1461023b5780634afe393c14610236578063502e1a16146102315780635a9d7a681461022c5780636352211e1461022757806370a082311461022257806375794a3c1461021d5780637ba03aad1461021857806386b6be7d1461021357806389097a6a1461020e57806391dd73461461020957806395d89b4114610204578063a22cb465146101ff578063ac9650d8146101fa578063ad0b27fb146101f5578063b88d4fde146101f0578063c87b56dd146101eb578063d737d0c7146101e6578063dc4c90d3146101e1578063dd46508f146101dc578063e985e9c5146101d75763f70204050361000e576122ae565b612248565b6120c5565b612082565b61203d565b611f56565b611c7c565b611c28565b611b2b565b611a7b565b6119c6565b611884565b61185a565b6117be565b61174f565b611732565b611688565b611659565b611616565b6115cc565b6114d7565b611463565b611429565b611161565b611088565b611057565b610e72565b610d58565b610ae2565b610a65565b610a32565b6109ef565b6108e0565b610839565b610806565b6106ef565b61063e565b61056c565b61033c565b6001600160a01b038116036102a657565b5f80fd5b35906102b582610295565b565b9181601f840112156102a65782359167ffffffffffffffff83116102a657602083818601950101116102a657565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9060206103399281815201906102e5565b90565b60606003193601126102a65760043561035481610295565b6024359067ffffffffffffffff82116102a6578136039160606003198401126102a65760443567ffffffffffffffff81116102a6576103979036906004016102b7565b6060947f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693909290843b156102a6576001600160a01b03604051967f2a2d80d10000000000000000000000000000000000000000000000000000000088521660048701526060602487015260c48601937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd826004013591018112156102a65781016024600482013591019467ffffffffffffffff82116102a6578160071b360386136102a65760606064890152819052869460e48601949392915f5b81811061051a575050506104cb5f9694869488946044856104b36104a360248b99016102aa565b6001600160a01b03166084890152565b013560a48601526003198584030160448601526123c0565b03925af19081610500575b506104f757506104f36104e7612466565b60405191829182610328565b0390f35b6104f3906104e7565b8061050e5f610514936106ae565b80610656565b5f6104d6565b91965091929394608080826105316001948b612361565b01970191019188969594939261047c565b7fffffffff000000000000000000000000000000000000000000000000000000008116036102a657565b346102a65760206003193601126102a65760207fffffffff000000000000000000000000000000000000000000000000000000006004356105ac81610542565b167f01ffc9a7000000000000000000000000000000000000000000000000000000008114908115610614575b81156105ea575b506040519015158152f35b7f5b5e139f000000000000000000000000000000000000000000000000000000009150145f6105df565b7f80ac58cd00000000000000000000000000000000000000000000000000000000811491506105d8565b60206003193601126102a65761002060043533612a54565b5f9103126102a657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff8211176106a957604052565b610660565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106a957604052565b346102a6575f6003193601126102a6576040515f80548060011c90600181169081156107fc575b6020831082146107cf5782855260208501919081156107985750600114610748575b6104f3846104e7818603826106ae565b5f8080529250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b818410610784575050016104e782610738565b805484840152602090930192600101610771565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682525090151560051b0190506104e782610738565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610716565b346102a65760206003193601126102a6576004355f52600460205260206001600160a01b0360405f205416604051908152f35b346102a65760406003193601126102a65760043561085681610295565b602435805f5260026020526001600160a01b0360405f2054169182331415806108af575b6108875761002092612ab5565b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b50825f52600560205260ff6108d83360405f20906001600160a01b03165f5260205260405f2090565b54161561087a565b60a06003193601126102a6576004356108f881610295565b602435604435916064359260843567ffffffffffffffff81116102a6576109239036906004016102b7565b948242116109c7576109bc856109c293610020986109b6885f8099868252600260205281896001600160a01b036040832054169c8d9981604051977f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad89526001600160a01b0360208a01911681526040890192835260608901948552608089019687528160a08a20995252525252612b2c565b91612be5565b82612a54565b612ab5565b7f5a9165ff000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102a6575f6003193601126102a65760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102a65760206003193601126102a6576004355f52600760205260206001600160a01b0360405f205416604051908152f35b346102a65760206003193601126102a6576020610a9c600435610a8781612669565b919082851c60020b9260081c60020b91612e68565b6fffffffffffffffffffffffffffffffff60405191168152f35b60031960609101126102a657600435610ace81610295565b90602435610adb81610295565b9060443590565b346102a657610af036610ab6565b91610b1a7f0000000000000000000000000000000000000000000000000000000000000000612f9c565b610d30578291610c41610b54610b48610b3b865f52600260205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b91610b6a6001600160a01b03851693841461302f565b610bb46001600160a01b03821694610b83861515613094565b8433148015610cf2575b8015610ccd575b610b9d906130f9565b6001600160a01b03165f52600360205260405f2090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055610bf5816001600160a01b03165f52600360205260405f2090565b80546001019055610c0e855f52600260205260405f2090565b906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b610c7e610c56845f52600460205260405f2090565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4610cbe610cb7825f52600960205260405f2090565b5460ff1690565b610cc457005b6100209061315e565b50610b9d610ce9610b48610b3b8a5f52600460205260405f2090565b33149050610b94565b50610d2b610cb733610d15846001600160a01b03165f52600560205260405f2090565b906001600160a01b03165f5260205260405f2090565b610b8d565b7fd4b05fe0000000000000000000000000000000000000000000000000000000005f5260045ffd5b6101006003193601126102a657600435610d7181610295565b60c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126102a65760e43567ffffffffffffffff81116102a657610dbb9036906004016102b7565b916060926001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102a6576001600160a01b035f80946104cb604051978896879586947f2b67b570000000000000000000000000000000000000000000000000000000008652166004850152610e3d602485016122f6565b6001600160a01b0360a435610e5181610295565b1660a485015260c43560c485015261010060e48501526101048401916123c0565b60606003193601126102a657602435600435610e8d82610295565b60443567ffffffffffffffff81116102a657610ead9036906004016102b7565b610ed99391937f0000000000000000000000000000000000000000000000000000000000000000612f9c565b610d3057610ee783336132b6565b1561102b576001600160a01b03610f09610b3b855f52600760205260405f2090565b1680610fef57505f83815260096020526040902080546001179055610fbf90610fbb90610fb56001600160a01b03851696610f5088610c0e895f52600760205260405f2090565b610f896040519384927f8d57f6b20000000000000000000000000000000000000000000000000000000060208501528960248501612495565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826106ae565b8361334b565b1590565b610fea57507f9709492381f90bdc5938bb4e3b8e35b7e0eac8af058619e27191c5a40ce79fa95f80a3005b61338c565b7f25fbd8be000000000000000000000000000000000000000000000000000000005f5260048490526001600160a01b031660245260445ffd5b5ffd5b7f0ca968d8000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346102a6575f6003193601126102a65760206110716124ac565b604051908152f35b6044359081151582036102a657565b60c06003193601126102a6576004356110a081610295565b6024356110ac81610295565b6110b4611079565b906064359260843560a43567ffffffffffffffff81116102a6576110dc9036906004016102b7565b8692919242116109c7578361115c936109bc926109b6885f6100209c8189818f81604051977f6673cb397ee2a50b6b8401653d3638b4ac8b3db9c28aa6870ffceb7574ec2f7689526001600160a01b0360208a0191168152600160408a019316835260608901948552608089019687528160a08a20995252525252612b2c565b6136b8565b346102a65761116f36610ab6565b6111987f0000000000000000000000000000000000000000000000000000000000000000612f9c565b610d30576111b4610b48610b3b835f52600260205260405f2090565b916111ca6001600160a01b03851693841461302f565b816001600160a01b03821680946111e2821515613094565b8033148015611401575b80156113dc575b6111fc906130f9565b611217876001600160a01b03165f52600360205260405f2090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055611258846001600160a01b03165f52600360205260405f2090565b8054600101905561127584610c0e855f52600260205260405f2090565b61128a610c56845f52600460205260405f2090565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a46112c3610cb7835f52600960205260405f2090565b6113ce575b3b159182156112db575b6100208361257e565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039490941660248501526044840191909152608060648401525f6084840181905260209250839160a49183915af180156113c9577fffffffff000000000000000000000000000000000000000000000000000000007f150b7a020000000000000000000000000000000000000000000000000000000091610020935f9161139a575b5016145f806112d2565b6113bc915060203d6020116113c2575b6113b481836106ae565b810190612569565b5f611390565b503d6113aa565b6123fe565b6113d78261315e565b6112c8565b506111fc6113f8610b48610b3b865f52600460205260405f2090565b331490506111f3565b50611424610cb733610d158a6001600160a01b03165f52600560205260405f2090565b6111ec565b346102a6575f6003193601126102a65760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346102a6575f6003193601126102a65760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b9181601f840112156102a65782359167ffffffffffffffff83116102a6576020808501948460051b0101116102a657565b60406003193601126102a65760043567ffffffffffffffff81116102a6576115039036906004016102b7565b60243567ffffffffffffffff81116102a6576115239036906004016114a6565b916001600160a01b037f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c166115a45761157f93337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d61376b565b5f7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d005b7f6f5ffb7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102a65760406003193601126102a6576004356115e981610295565b6001600160a01b0360243591165f52600660205260405f20905f52602052602060405f2054604051908152f35b346102a6575f6003193601126102a65760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102a65760206003193601126102a6576020611677600435612648565b6001600160a01b0360405191168152f35b346102a65760206003193601126102a6576001600160a01b036004356116ad81610295565b1680156116d4575f5260036020526104f360405f2054604051918291829190602083019252565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152fd5b346102a6575f6003193601126102a6576020600854604051908152f35b346102a65760206003193601126102a65760c061176d600435612669565b6117b760405180936001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60a0820152f35b346102a65760206003193601126102a6576004357fffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000081168091036102a6575f908152600a60209081526040918290208054600182015460029283015485516001600160a01b0393841681528383169581019590955260a082811c62ffffff169686019690965260b89190911c90920b6060840152166080820152f35b346102a65760206003193601126102a6576004355f526009602052602060405f2054604051908152f35b346102a65760206003193601126102a65760043567ffffffffffffffff81116102a6576118b59036906004016102b7565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361199e5760408135189063ffffffff60408201351663ffffffe0601f8201169260608401602084013518179282019260608401359483641fffffffe08760051b16805f905b8881831061196f5790506080929150010191011017611962576060608063ffffffff61195796169401920161376b565b6104f36104e7612452565b633b99b53d5f526004601cfd5b8294509263ffffffe0601f60808060209687969801013599848b1817998d010135011601019201869291611927565b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102a6575f6003193601126102a6576040515f6001548060011c9060018116908115611a71575b6020831082146107cf5782855260208501919081156107985750600114611a1f576104f3846104e7818603826106ae565b60015f9081529250907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b818410611a5d575050016104e782610738565b805484840152602090930192600101611a4a565b91607f16916119ee565b346102a65760406003193601126102a657600435611a9881610295565b60243580151581036102a65761002091336136b8565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310611ae057505050505090565b9091929394602080611b1c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516102e5565b97019301930191939290611ad1565b60206003193601126102a65760043567ffffffffffffffff81116102a657611b579036906004016114a6565b90611b6182612747565b91611b6f60405193846106ae565b8083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611b9c82612747565b015f5b818110611c175750505f5b818110611bbf57604051806104f38682611aae565b5f80611bcc83858761278c565b90611bdc604051809381936127f1565b0390305af4611be9612466565b9015611c0f5790600191611bfd82876127fe565b52611c0881866127fe565b5001611baa565b602081519101fd5b806060602080938801015201611b9f565b60206003193601126102a657600435611c607f0000000000000000000000000000000000000000000000000000000000000000612f9c565b610d3057611c6e81336132b6565b1561102b576100209061315e565b346102a65760806003193601126102a657600435611c9981610295565b60243590611ca682610295565b60443560643567ffffffffffffffff81116102a657611cc99036906004016102b7565b939091611cf57f0000000000000000000000000000000000000000000000000000000000000000612f9c565b610d3057611d11610b48610b3b835f52600260205260405f2090565b91611d276001600160a01b03861693841461302f565b816001600160a01b0382168094611d3f821515613094565b8033148015611f2e575b8015611f09575b611d59906130f9565b611d74886001600160a01b03165f52600360205260405f2090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055611db5846001600160a01b03165f52600360205260405f2090565b80546001019055611dd284610c0e855f52600260205260405f2090565b611de7610c56845f52600460205260405f2090565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4611e20610cb7835f52600960205260405f2090565b611efb575b3b15938415611e38575b6100208561257e565b602094505f90611e78604051978896879586947f150b7a020000000000000000000000000000000000000000000000000000000086523360048701612812565b03925af180156113c9577fffffffff000000000000000000000000000000000000000000000000000000007f150b7a020000000000000000000000000000000000000000000000000000000091610020935f91611edc575b5016145f808080611e2f565b611ef5915060203d6020116113c2576113b481836106ae565b5f611ed0565b611f048261315e565b611e25565b50611d59611f25610b48610b3b865f52600460205260405f2090565b33149050611d50565b50611f51610cb733610d158b6001600160a01b03165f52600560205260405f2090565b611d49565b346102a65760206003193601126102a657600435604051907fe9dc637500000000000000000000000000000000000000000000000000000000825230600483015260248201525f816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156113c9575f90611fea575b6104f39060405191829182610328565b503d805f833e611ffa81836106ae565b8101906020818303126102a65780519067ffffffffffffffff82116102a6570181601f820112156102a6576104f39181602061203893519101612840565b611fda565b346102a6575f6003193601126102a65760207f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c6001600160a01b0360405191168152f35b346102a6575f6003193601126102a65760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60406003193601126102a65760043567ffffffffffffffff81116102a6576120f19036906004016102b7565b6024356001600160a01b037f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c166115a457337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d80421161221d576040517f48c89491000000000000000000000000000000000000000000000000000000008152602060048201525f818061218b6024820187896123c0565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156113c9576121cd575b610020613746565b3d805f833e6121dc81836106ae565b8101906020818303126102a65780519067ffffffffffffffff82116102a657019080601f830112156102a657815161221692602001612840565b50806121c5565b7fbfb22adf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346102a65760406003193601126102a657602060ff6122a260043561226c81610295565b6001600160a01b036024359161228183610295565b165f526005845260405f20906001600160a01b03165f5260205260405f2090565b54166040519015158152f35b600319360160c081126102a65760a0136102a65760206122d860a4356122d381610295565b6128a3565b6040519060020b8152f35b359065ffffffffffff821682036102a657565b6001600160a01b0360243561230a81610295565b1681526001600160a01b0360443561232181610295565b16602082015260643565ffffffffffff81168091036102a657604082015260843565ffffffffffff811681036102a65765ffffffffffff60609116910152565b65ffffffffffff6123ba606080936001600160a01b03813561238281610295565b1686526001600160a01b03602082013561239b81610295565b166020870152836123ae604083016122e3565b166040870152016122e3565b16910152565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b6040513d5f823e3d90fd5b604051906102b56080836106ae565b67ffffffffffffffff81116106a957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b604051906124616020836106ae565b5f8252565b3d15612490573d9061247782612418565b9161248560405193846106ae565b82523d5f602084013e565b606090565b6040906103399492815281602082015201916123c0565b467f0000000000000000000000000000000000000000000000000000000000000000036124f7577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f000000000000000000000000000000000000000000000000000000000000000060408201524660608201523060808201526080815261256360a0826106ae565b51902090565b908160209103126102a6575161033981610542565b1561258557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152fd5b156125ea57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152fd5b5f5260026020526001600160a01b0360405f205416906102b58215156125e3565b5f60806040516126788161068d565b82815282602082015282604082015282606082015201525f52600960205260405f2054807fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000165f52600a60205260405f206127446127346002604051936126de8561068d565b6001600160a01b03815416855261272661271c60018301546001600160a01b038116602089015262ffffff8160a01c16604089015260b81c60020b90565b60020b6060870152565b01546001600160a01b031690565b6001600160a01b03166080830152565b91565b67ffffffffffffffff81116106a95760051b60200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156127ec5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102a657019081359167ffffffffffffffff83116102a65760200182360381136102a6579190565b61275f565b908092918237015f815290565b80518210156127ec5760209160051b010190565b90926001600160a01b03608093816103399896168452166020830152604082015281606082015201916123c0565b92919261284c82612418565b9161285a60405193846106ae565b8294818452818301116102a6578281602093845f96015e010152565b8060020b036102a657565b908160209103126102a6575161033981612876565b62ffffff8116036102a657565b6001600160a01b03604051917f6276cbbe000000000000000000000000000000000000000000000000000000008352816004356128df81610295565b166004840152816024356128f281610295565b16602484015262ffffff60443561290881612896565b16604484015260643561291a81612876565b60020b606484015261294160843561293181610295565b6001600160a01b03166084850152565b1660a482015260208160c4815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af15f918161298f575b506103395750627fffff90565b6129b291925060203d6020116129b9575b6129aa81836106ae565b810190612881565b905f612982565b503d6129a0565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580612a21575b6129f957565b7f38bbd576000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314156129f3565b906001600160a01b03600160ff83161b92165f52600660205260405f209060081c5f5260205260405f20818154188091551615612a8d57565b7f1fb09b80000000000000000000000000000000000000000000000000000000005f5260045ffd5b906001600160a01b038091845f526004602052612b038160405f20906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b1691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4565b90612b356124ac565b91604051927f19010000000000000000000000000000000000000000000000000000000000008452600284015260228301525f604060428420938281528260208201520152565b91908260409103126102a6576020823592013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff601b9116019060ff8211612bd157565b612b92565b90604010156127ec5760400190565b90833b612d7a5760418103612cee5790602092612c6e83612c46612c40612c1a612c125f98880188612b7c565b949097612bd6565b357fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b935b604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156113c9576001600160a01b035f5116908115612cc6576001600160a01b031603612c9e57565b7f815e1d64000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8baa579f000000000000000000000000000000000000000000000000000000005f5260045ffd5b9060408203612d5257602092612d0b825f94612c6e940190612b7c565b929092612d4c612d47612d417f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c90565b60ff1690565b612bbf565b93612c48565b7f4be6321b000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092612dc1936001600160a01b03602094604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501612495565b0392165afa9081156113c9577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f91612e49575b501603612e2157565b7fb0669cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b612e62915060203d6020116113c2576113b481836106ae565b5f612e18565b9290612ea39260a092604051956026870152600686015260038501523084525f603a600c860120948160408201528160208201525220614bbf565b60068101809111612bd15760408051602081810194855291810192909252612f0f929091612ed48160608101610f89565b519020604051809381927f1e2eaeaf000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156113c9576fffffffffffffffffffffffffffffffff915f91612f6057501690565b612f82915060203d602011612f86575b612f7a81836106ae565b810190612f8d565b1690565b503d612f70565b908160209103126102a6575190565b60206001600160a01b03916024604051809481937ff135baaa0000000000000000000000000000000000000000000000000000000083527fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab236004840152165afa9081156113c9575f91613010575b50151590565b613029915060203d602011612f8657612f7a81836106ae565b5f61300a565b1561303657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152fd5b1561309b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152fd5b1561310057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152fd5b6001600160a01b0361317b610b3b835f52600760205260405f2090565b1690811561328e575f81815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556131cb610c56825f52600760205260405f2090565b813b6131f8575b7fa0ebb1de82db929a9153472f37d3a66dbede4436258311ad0f52a35a2c91d1505f80a3565b5a7f000000000000000000000000000000000000000000000000000000000000000080911061328957823b156102a6575f60405180927faf45dd140000000000000000000000000000000000000000000000000000000082528183878261326789600483019190602083019252565b0393f1613275575b506131d2565b8061050e5f613283936106ae565b5f61326f565b6137d4565b7f237e6c28000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b036132c783612648565b16916001600160a01b03821692831492831561332a575b5082156132ea57505090565b60ff9250906001600160a01b0361330361332593612648565b165f52600560205260405f20906001600160a01b03165f5260205260405f2090565b541690565b908093505f5260046020526001600160a01b0360405f20541614915f6132de565b803b1561336457815f92918360208194519301915af190565b7f7c402b21000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01166001600160a01b03604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301527f8d57f6b2000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7f81ea5e9e0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01166001600160a01b03604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301527fa9059cbb000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01166001600160a01b03604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301525f6024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff4b3b1bc0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01166001600160a01b03604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301527fb1a9116f000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7face944810000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b60206001600160a01b03807f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31931693845f526005835261370c8160405f20906001600160a01b03165f5260205260405f2090565b951515957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff88161790556040519586521693a3565b5f7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d565b909291938284036137ac575f5b848110156137a45760019061379e81850161379483888b61278c565b913560f81c6137fc565b01613778565b509350505050565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fed43c3a6000000000000000000000000000000000000000000000000000000005f5260045ffd5b909190600b8110156139175780613827575061381b906102b5926149cc565b94939093929192614b63565b60048103613846575061383d906102b592614185565b93929092614a79565b60018103613868575061385c906102b5926149cc565b94939093929192614a0e565b600281036138975750613881613891916102b5936145df565b9890979691959295949394613cc2565b9561478a565b600581036138c357506138b06138bd916102b593614481565b9790969591949294613cc2565b94614543565b91600383146138ff57505061102891505b7f5cda29d7000000000000000000000000000000000000000000000000000000005f52600452602490565b6102b592509061390e91614185565b939290926141c1565b600d8103613933575061392d906102b592613caf565b90614147565b6011810361395b575061394c613955916102b593613e9e565b92909192613cc2565b9161412c565b600b810361398f5750613989613977613983926102b594613e9e565b93829493929193613f73565b92613fa1565b91613fe2565b600e81036139c157506139b56139ab6139bb926102b594613e9e565b9282949291613cc2565b92613eb6565b91613eca565b601281036139dc57506139d7906102b592613ac8565b613e32565b601381036139f857506139f2906102b592613caf565b90613d25565b60148103613a1f5750613a11613a19916102b593613caf565b919091613cc2565b90613d07565b60158103613a6d5750613a38613a68916102b593613ac8565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690613b54565b613c39565b9160168314613a8257505061102891506138d4565b6102b59250613ac391613a9491613ac8565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016613ad4565b613bb0565b90602011611962573590565b613adf903090614bdf565b7f80000000000000000000000000000000000000000000000000000000000000008214613b4f578115613b3e575b8111613b165790565b7ff4d678b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050613b495f614c5f565b90613b0d565b905090565b90613b5f305f614bdf565b907f80000000000000000000000000000000000000000000000000000000000000008314613baa578215613b98575b508111613b165790565b613ba3919250614c5f565b905f613b8e565b50905090565b80613bb85750565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690813b156102a6575f916024839260405194859384927f2e1a7d4d00000000000000000000000000000000000000000000000000000000845260048401525af180156113c957613c2f5750565b5f6102b5916106ae565b80613c415750565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102a6575f906004604051809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af180156113c957613c2f5750565b9190604011611962576020823592013590565b6001600160a01b03811660018103613cfb5750507f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c90565b60020361033957503090565b90613d1182614cd1565b9081613d1c57505050565b6102b592614d37565b90613d2f82614ddd565b908115613e01578111613dd5576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b156102a6575f9283926040519485809481937f80f0b44c0000000000000000000000000000000000000000000000000000000083526020600484016001600160a01b036040820194168152015203925af180156113c957613dc75750565b8061050e5f6102b5936106ae565b6102b5917f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c90613eca565b505050565b7f80000000000000000000000000000000000000000000000000000000000000008114612bd1575f0390565b613e5d81307f0000000000000000000000000000000000000000000000000000000000000000614e49565b907f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c5f831215613e94576139896102b593613e06565b6102b59291613eca565b90606011611962578035916040602083013592013590565b9081613ec6576103399150614ddd565b5090565b90918015613e01576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102a6575f92836064926001600160a01b03948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af180156113c957613f5e5750565b80613f6a5f80936106ae565b8003126102a657565b15613f9d577f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c90565b3090565b907f80000000000000000000000000000000000000000000000000000000000000008203613fd3576103399150614cd1565b81613ec6576103399150614c5f565b908215613e01576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b156102a6576040517fa58411940000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f8160248183885af180156113c957614118575b506001600160a01b0381166140ce5750506020906004604051809481937f11da60b40000000000000000000000000000000000000000000000000000000083525af180156113c9576140b35750565b6140cb9060203d602011612f8657612f7a81836106ae565b50565b5f93602093926140dd92614ea7565b6004604051809481937f11da60b40000000000000000000000000000000000000000000000000000000083525af180156113c9576140b35750565b8061050e5f614126936106ae565b5f614064565b9161413e6102b593826139bb82614ddd565b6139bb82614ddd565b906102b59161417c7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c918261398982614c5f565b61398982614c5f565b919082359260208101359260408201359263ffffffff60608401351683019063ffffffff82351693602080840193860101910110611962579190565b939290927f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c6141f186826132b6565b156143ae575061420085612669565b9290938360081c60020b958460201c60020b9661423761422289838a8d612e68565b6fffffffffffffffffffffffffffffffff1690565b966142418a612648565b955f6142558c5f52600960205260405f2090565b5561425f8b614faa565b5f9989614291575b505050505050508160ff1661427e575b5050505050565b614287946151b4565b5f80808080614277565b60409495969a509061430e916142d16142b16142ac8d61507e565b613e06565b916142c76142bd612409565b97889060020b9052565b60020b6020870152565b858501528b606085015284519a8b9485947f5a6bcfda000000000000000000000000000000000000000000000000000000008652600486016143f9565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156113c9575f965f9161436e575b509061435d826143629493986150b0565b6150ed565b5f808080808080614267565b61435d97506143629392915061439b9060403d6040116143a7575b61439381836106ae565b8101906143e3565b9790979192935061434c565b503d614389565b6001600160a01b03907f0ca968d8000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b91908260409103126102a6576020825192015190565b6060610339959361444a83610140956001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b805160020b60a0840152602081015160020b60c0840152604081015160e084015201516101008201528161012082015201916123c0565b91908260a08101359260c08201359260e083013592610100810135926101208201359263ffffffff6101408401351683019063ffffffff82351693602080840193860101910110611962579190565b91908260a09103126102a6576040516144e88161068d565b608080829480356144f881610295565b8452602081013561450881610295565b6020850152604081013561451b81612896565b6040850152606081013561452e81612876565b606085015201359161453f83610295565b0152565b90916102b59796959493926fffffffffffffffffffffffffffffffff6145d861459860a061457136886144d0565b207f0000000000000000000000000000000000000000000000000000000000000000615264565b5050506145a484615303565b6145ad86615303565b6145c088356145bb81610295565b614ddd565b916145d260208a01356145bb81610295565b9361564f565b169261478a565b9091819260a08301359260c08101359260e08201359261010083013592610120810135926101408201359263ffffffff6101608401351683019063ffffffff82351693602080840193860101910110611962579190565b600260806102b593614680813561464c81610295565b85906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b600184016146c9602083013561469581610295565b82906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60408201356146d781612896565b81547fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000606086013561472081612876565b60b81b79ffffff0000000000000000000000000000000000000000000000169360a01b1691161717905501359161475683610295565b01906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b90919496929793959760085492600184016008556001600160a01b038a16996147b48b1515613094565b845f5260026020526001600160a01b0360405f20541661496e5761488a6149259861491f93876102b59e61481986614800614917986001600160a01b03165f52600360205260405f2090565b80546001019055610c0e845f52600260205260405f2090565b5f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a461484836886144d0565b63ffffff007fffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000060a066ffffff000000009320169260081b169260201b16171790565b928361489e875f52600960205260405f2090565b55837fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000168561490760016148fc847fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000165f52600a60205260405f2090565b015460b81c60020b90565b60020b1561492b575b505061507e565b9236906144d0565b906156fc565b506157de565b614962614967927fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000165f52600a60205260405f2090565b614636565b5f85614910565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152fd5b909181359260208301359260408101359260608201359263ffffffff60808401351683019063ffffffff82351693602080840193860101910110611962579190565b90959495939192937f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c614a4283826132b6565b156143ae57509561435d92826142ac6102b59899614a6d614a65614a7397612669565b93909261507e565b916156fc565b906150b0565b949394929091927f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c614aac82826132b6565b156143ae57506102b59495614b5e9282614ac8614a7394612669565b90614a6d6fffffffffffffffffffffffffffffffff614b58614b0d60a085207f0000000000000000000000000000000000000000000000000000000000000000615264565b505050614b1f8660081c60020b615303565b614b2e8760201c60020b615303565b614b416001600160a01b03885116614ddd565b916145d26001600160a01b0360208a015116614ddd565b1661507e565b6157de565b90959495939192937f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c614b9783826132b6565b156143ae575095614b5e9282614a6d6102b59899614bb7614a7396612669565b92909161507e565b6040516020810191825260066040820152604081526125636060826106ae565b6001600160a01b038116614bf257503190565b906001600160a01b0360246020928260405195869485937f70a08231000000000000000000000000000000000000000000000000000000008552166004840152165afa9081156113c9575f91614c46575090565b610339915060203d602011612f8657612f7a81836106ae565b614c8a81307f0000000000000000000000000000000000000000000000000000000000000000614e49565b905f8213614c9c575061033990613e06565b6001600160a01b03907f3351b260000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001600160a01b038116614ce457504790565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290602090829060249082906001600160a01b03165afa9081156113c9575f91614c46575090565b9091906001600160a01b038116614d6457505f808080614d5894865af11590565b614d5f5750565b613532565b91906001600160a01b03604051927fa9059cbb00000000000000000000000000000000000000000000000000000000845216600483015260248201525f604060208260448582885af13d15601f3d11600185511416171692828152826020820152015215614dcf5750565b6001600160a01b031661345f565b614e0881307f0000000000000000000000000000000000000000000000000000000000000000614e49565b905f8212614e14575090565b6001600160a01b03907f4c085bf1000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001600160a01b03809381602094165f52168252602460405f2060405194859384927ff135baaa0000000000000000000000000000000000000000000000000000000084526004840152165afa9081156113c9575f91614c46575090565b9091906001600160a01b0383163003614eef576102b592506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690614d37565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102a6576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b0394851660048201527f00000000000000000000000000000000000000000000000000000000000000008516602482015291841660448301529190921660648301525f908290608490829084905af180156113c957613dc75750565b805f5260026020525f6001600160a01b03604082205416614fcc8115156125e3565b8082526003602052604082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8154019055615010835f52600260205260405f2090565b80548360031b906001600160a01b03808616831b921b191617905561503d835f52600460205260405f2090565b80548360031b906001600160a01b03808616831b921b19161790557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4565b905f821261508857565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b6150d3906150c58360801d8260801d0361592c565b92600f0b90600f0b0361592c565b6fffffffffffffffffffffffffffffffff169060801b1790565b929190926fffffffffffffffffffffffffffffffff8160801d94816151118761593a565b9116918291161061519957506fffffffffffffffffffffffffffffffff929350600f0b908261513f8361593a565b9116928391161061514e575050565b906151696fffffffffffffffffffffffffffffffff9261593a565b907f12816f22000000000000000000000000000000000000000000000000000000005f526004521660245260445ffd5b6fffffffffffffffffffffffffffffffff906151698661593a565b5f81815260076020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000081169091556001600160a01b039081169561525895610fbb959394919390929091604051957fb1a9116f00000000000000000000000000000000000000000000000000000000602088015260248701521660448501526064840152608483015260a482015260a48152610fb560c4826106ae565b61525f5750565b6135e5565b602090602461527b6001600160a01b039594614bbf565b60405195869384927f1e2eaeaf0000000000000000000000000000000000000000000000000000000084526004840152165afa9182156113c9575f926152e2575b506001600160a01b038216918060a01c60020b9162ffffff808360b81c169260d01c1690565b6152fc91925060203d602011612f8657612f7a81836106ae565b905f6152bc565b60020b908160ff1d82810118620d89e881116156495763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a5940010270010000000000000000000000000000000018916002811661562d575b60048116615611575b600881166155f5575b601081166155d9575b602081166155bd575b604081166155a1575b60808116615585575b6101008116615569575b610200811661554d575b6104008116615531575b6108008116615515575b61100081166154f9575b61200081166154dd575b61400081166154c1575b61800081166154a5575b620100008116615489575b62020000811661546e575b620400008116615453575b620800001661543a575b5f12615413575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0461540c565b6b048a170391f7dc42444e8fa290910260801c90615405565b6d2216e584f5fa1ea926041bedfe9890920260801c916153fb565b916e5d6af8dedb81196699c329225ee6040260801c916153f0565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c916153e5565b916f31be135f97d08fd981231505542fcfa60260801c916153da565b916f70d869a156d2a1b890bb3df62baf32f70260801c916153d0565b916fa9f746462d870fdf8a65dc1f90e061e50260801c916153c6565b916fd097f3bdfd2022b8845ad8f792aa58250260801c916153bc565b916fe7159475a2c29b7443b29c7fa6e889d90260801c916153b2565b916ff3392b0822b70005940c7a398e4b70f30260801c916153a8565b916ff987a7253ac413176f2b074cf7815e540260801c9161539e565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91615394565b916ffe5dee046a99a2a811c461f1969c30530260801c9161538a565b916fff2ea16466c96a3843ec78b326b528610260801c91615381565b916fff973b41fa98c081472e6896dfb254c00260801c91615378565b916fffcb9843d60f6159c9db58835c9266440260801c9161536f565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91615366565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c9161535d565b916ffff97272373d413259a46990580e213a0260801c91615354565b82615959565b936001600160a01b0383166001600160a01b038316116156f4575b6001600160a01b0385811695908316861161568b57505061033993506159b7565b92909391946001600160a01b038216115f146156e85782916156b1916156b795946159b7565b93615987565b6fffffffffffffffffffffffffffffffff81166fffffffffffffffffffffffffffffffff8316105f14613b4f575090565b91505061033992615987565b90919061566a565b95939460409161576261570d612409565b60088a901c60020b81529260208a811c60020b908501528585850152866060850152845198899485947f5a6bcfda000000000000000000000000000000000000000000000000000000008652600486016143f9565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156113c9575f945f926157ba575b5081949560ff166157b157505050565b6102b592615a00565b9094506157d6915060403d6040116143a75761439381836106ae565b90935f6157a1565b908160801d600f0b91600f0b915f8112806158f7575b6158955750505f81128061585e575b61580b575050565b9061581b61422261102893613e06565b7f31e30ad0000000000000000000000000000000000000000000000000000000005f526fffffffffffffffffffffffffffffffff91821660045216602452604490565b506fffffffffffffffffffffffffffffffff8061587a83613e06565b16166fffffffffffffffffffffffffffffffff831610615803565b906fffffffffffffffffffffffffffffffff6158b361102893613e06565b7f31e30ad0000000000000000000000000000000000000000000000000000000005f526fffffffffffffffffffffffffffffffff9283166004521616602452604490565b506fffffffffffffffffffffffffffffffff61591282613e06565b166fffffffffffffffffffffffffffffffff8316106157f4565b9081600f0b91820361508857565b5f81600f0b12615088576fffffffffffffffffffffffffffffffff1690565b7f8b86327a000000000000000000000000000000000000000000000000000000005f5260020b60045260245ffd5b916001600160a01b03610339936159ac93828116838316116159b1575b031690615b43565b615d1b565b906159a4565b916159ac91610339936001600160a01b0382166001600160a01b038216116159fa575b6001600160a01b03906159f1828416838316615bff565b92031691615c79565b906159da565b615a6a9192815f5260076020526001600160a01b0360405f20541693604051927fd8865c2700000000000000000000000000000000000000000000000000000000602085015260248401526044830152606482015260648152615a646084826106ae565b8261334b565b15615a725750565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d0116604051917f90bfb86500000000000000000000000000000000000000000000000000000000835260048301527fd8865c27000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7fe94f10e20000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b156102a657565b908160601b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c010000000000000000000000008409928280851094039380850394615b91868511615b3c565b14615bf8576c0100000000000000000000000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b90808202917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828209918380841093039280840393846c0100000000000000000000000011156102a65714615c70576c01000000000000000000000000910990828211900360a01b910360601c1790565b50505060601c90565b91818302917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818509938380861095039480860395615cb9878611615b3c565b14615d13579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b906fffffffffffffffffffffffffffffffff82168092036150885756fea164736f6c634300081a000a'; } } diff --git a/src/briefcase/deployers/v4-periphery/StateViewDeployer.sol b/src/briefcase/deployers/v4-periphery/StateViewDeployer.sol index be729f31..037b0b89 100644 --- a/src/briefcase/deployers/v4-periphery/StateViewDeployer.sol +++ b/src/briefcase/deployers/v4-periphery/StateViewDeployer.sol @@ -21,6 +21,7 @@ library StateViewDeployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'60a03460b357601f610e9738819003918201601f19168301916001600160401b0383118484101760b75780849260209460405283398101031260b357516001600160a01b038116810360b357608052604051610dcb90816100cc823960805181818161012b01528181610246015281816102db0152818161039e0152818161048101528181610549015281816105db01528181610622015281816106870152818161073401528181610810015261096a0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80631c7ccb4c146108ac57806353e9c1fb146107c95780637c40f1fe146106ab5780638a2bb9e61461064657806397fd7b421461060b5780639ec538c8146105a2578063c815641c1461050b578063caedab54146103f6578063dacf1d2f146102ff578063dc4c90d314610291578063f0928f29146101e65763fa6793d51461009d575f80fd5b346101a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576100d7600435610d2f565b600381018091116101b957604051907f1e2eaeaf000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156101ae575f90610177575b6020906fffffffffffffffffffffffffffffffff60405191168152f35b506020813d6020116101a6575b8161019160209383610a2b565b810103126101a2576020905161015a565b5f80fd5b3d9150610184565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b346101a2576101fd6101f7366109f7565b90610d8b565b604051907f1e2eaeaf000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156101ae575f90610177576020906fffffffffffffffffffffffffffffffff60405191168152f35b346101a2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101a25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760243573ffffffffffffffffffffffffffffffffffffffff811681036101a2576103566109e7565b6064358060020b81036101a2576103f2926103c2926040519260843560268501526006840152600383015281525f603a600c83012091816040820152816020820152526004357f0000000000000000000000000000000000000000000000000000000000000000610bc0565b604080516fffffffffffffffffffffffffffffffff90941684526020840192909252908201529081906060820190565b0390f35b346101a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576104386104306109d7565b600435610d55565b604051907f1e2eaeaf000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156101ae575f906104d8575b6040908151906fffffffffffffffffffffffffffffffff8116825260801d600f0b6020820152f35b506020813d602011610503575b816104f260209383610a2b565b810103126101a257604090516104b0565b3d91506104e5565b346101a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257608062ffffff8061056d6004357f0000000000000000000000000000000000000000000000000000000000000000610c63565b92949173ffffffffffffffffffffffffffffffffffffffff6040519616865260020b6020860152166040840152166060820152f35b346101a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760406105ff6004357f0000000000000000000000000000000000000000000000000000000000000000610c58565b82519182526020820152f35b346101a2576103f26103c261061f366109f7565b907f0000000000000000000000000000000000000000000000000000000000000000610bc0565b346101a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760406105ff6106826109d7565b6004357f0000000000000000000000000000000000000000000000000000000000000000610b1e565b346101a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576106e56104306109d7565b604051907f35fd631a0000000000000000000000000000000000000000000000000000000082526004820152600360248201525f8160448173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156101ae576080915f916107a7575b506020810151906060604082015191015190604051926fffffffffffffffffffffffffffffffff81168452841d600f0b602084015260408301526060820152f35b6107c391503d805f833e6107bb8183610a2b565b810190610a99565b82610766565b346101a25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760406004356108056109d7565b9061080e6109e7565b7f00000000000000000000000000000000000000000000000000000000000000009061083a8383610c58565b90610846868686610b1e565b96909361085f610857828989610b1e565b989097610c63565b5050905060020b9160020b82125f14610885575050505003910382519182526020820152f35b95969593949360020b1361089d5750500391036105ff565b949392909403039203036105ff565b346101a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576024358060010b8091036101a2576108f4600435610d2f565b600581018091116101b957604051906020820192835260408201526040815261091e606082610a2b565b519020604051907f1e2eaeaf000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156101ae575f906109a4575b602090604051908152f35b506020813d6020116109cf575b816109be60209383610a2b565b810103126101a25760209051610999565b3d91506109b1565b602435908160020b82036101a257565b604435908160020b82036101a257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60409101126101a2576004359060243590565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a6c57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6020818303126101a25780519067ffffffffffffffff82116101a257019080601f830112156101a25781519167ffffffffffffffff8311610a6c578260051b9060405193610aea6020840186610a2b565b84526020808501928201019283116101a257602001905b828210610b0e5750505090565b8151815260209182019101610b01565b9291610b2991610d55565b600181018091116101b95773ffffffffffffffffffffffffffffffffffffffff9260445f9260405195869384927f35fd631a000000000000000000000000000000000000000000000000000000008452600484015260026024840152165afa9182156101ae575f92610ba4575b506040602083015192015190565b610bb99192503d805f833e6107bb8183610a2b565b905f610b96565b6044610be273ffffffffffffffffffffffffffffffffffffffff945f94610d8b565b60405194859384927f35fd631a000000000000000000000000000000000000000000000000000000008452600484015260036024840152165afa9081156101ae575f91610c3e575b506020810151916060604083015192015190565b610c5291503d805f833e6107bb8183610a2b565b5f610c2a565b9190610b2990610d2f565b6020906024610c8773ffffffffffffffffffffffffffffffffffffffff9594610d2f565b60405195869384927f1e2eaeaf0000000000000000000000000000000000000000000000000000000084526004840152165afa9182156101ae575f92610cfb575b5073ffffffffffffffffffffffffffffffffffffffff8216918060a01c60020b9162ffffff808360b81c169260d01c1690565b9091506020813d602011610d27575b81610d1760209383610a2b565b810103126101a25751905f610cc8565b3d9150610d0a565b604051602081019182526006604082015260408152610d4f606082610a2b565b51902090565b610d5e90610d2f565b600481018091116101b95760405190602082019260020b8352604082015260408152610d4f606082610a2b565b610d9490610d2f565b600681018091116101b9576040519060208201928352604082015260408152610d4f606082610a2b56fea164736f6c634300081a000a'; + return + hex'60a03460b357601f610e9738819003918201601f19168301916001600160401b0383118484101760b75780849260209460405283398101031260b357516001600160a01b038116810360b357608052604051610dcb90816100cc823960805181818161012b01528181610246015281816102db0152818161039e0152818161048101528181610549015281816105db01528181610622015281816106870152818161073401528181610810015261096a0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80631c7ccb4c146108ac57806353e9c1fb146107c95780637c40f1fe146106ab5780638a2bb9e61461064657806397fd7b421461060b5780639ec538c8146105a2578063c815641c1461050b578063caedab54146103f6578063dacf1d2f146102ff578063dc4c90d314610291578063f0928f29146101e65763fa6793d51461009d575f80fd5b346101a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576100d7600435610d2f565b600381018091116101b957604051907f1e2eaeaf000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156101ae575f90610177575b6020906fffffffffffffffffffffffffffffffff60405191168152f35b506020813d6020116101a6575b8161019160209383610a2b565b810103126101a2576020905161015a565b5f80fd5b3d9150610184565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b346101a2576101fd6101f7366109f7565b90610d8b565b604051907f1e2eaeaf000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156101ae575f90610177576020906fffffffffffffffffffffffffffffffff60405191168152f35b346101a2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101a25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760243573ffffffffffffffffffffffffffffffffffffffff811681036101a2576103566109e7565b6064358060020b81036101a2576103f2926103c2926040519260843560268501526006840152600383015281525f603a600c83012091816040820152816020820152526004357f0000000000000000000000000000000000000000000000000000000000000000610bc0565b604080516fffffffffffffffffffffffffffffffff90941684526020840192909252908201529081906060820190565b0390f35b346101a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576104386104306109d7565b600435610d55565b604051907f1e2eaeaf000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156101ae575f906104d8575b6040908151906fffffffffffffffffffffffffffffffff8116825260801d600f0b6020820152f35b506020813d602011610503575b816104f260209383610a2b565b810103126101a257604090516104b0565b3d91506104e5565b346101a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a257608062ffffff8061056d6004357f0000000000000000000000000000000000000000000000000000000000000000610c63565b92949173ffffffffffffffffffffffffffffffffffffffff6040519616865260020b6020860152166040840152166060820152f35b346101a25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760406105ff6004357f0000000000000000000000000000000000000000000000000000000000000000610c58565b82519182526020820152f35b346101a2576103f26103c261061f366109f7565b907f0000000000000000000000000000000000000000000000000000000000000000610bc0565b346101a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760406105ff6106826109d7565b6004357f0000000000000000000000000000000000000000000000000000000000000000610b1e565b346101a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576106e56104306109d7565b604051907f35fd631a0000000000000000000000000000000000000000000000000000000082526004820152600360248201525f8160448173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156101ae576080915f916107a7575b506020810151906060604082015191015190604051926fffffffffffffffffffffffffffffffff81168452841d600f0b602084015260408301526060820152f35b6107c391503d805f833e6107bb8183610a2b565b810190610a99565b82610766565b346101a25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a25760406004356108056109d7565b9061080e6109e7565b7f00000000000000000000000000000000000000000000000000000000000000009061083a8383610c58565b90610846868686610b1e565b96909361085f610857828989610b1e565b989097610c63565b5050905060020b9160020b82125f14610885575050505003910382519182526020820152f35b95969593949360020b1361089d5750500391036105ff565b949392909403039203036105ff565b346101a25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a2576024358060010b8091036101a2576108f4600435610d2f565b600581018091116101b957604051906020820192835260408201526040815261091e606082610a2b565b519020604051907f1e2eaeaf000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156101ae575f906109a4575b602090604051908152f35b506020813d6020116109cf575b816109be60209383610a2b565b810103126101a25760209051610999565b3d91506109b1565b602435908160020b82036101a257565b604435908160020b82036101a257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60409101126101a2576004359060243590565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a6c57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6020818303126101a25780519067ffffffffffffffff82116101a257019080601f830112156101a25781519167ffffffffffffffff8311610a6c578260051b9060405193610aea6020840186610a2b565b84526020808501928201019283116101a257602001905b828210610b0e5750505090565b8151815260209182019101610b01565b9291610b2991610d55565b600181018091116101b95773ffffffffffffffffffffffffffffffffffffffff9260445f9260405195869384927f35fd631a000000000000000000000000000000000000000000000000000000008452600484015260026024840152165afa9182156101ae575f92610ba4575b506040602083015192015190565b610bb99192503d805f833e6107bb8183610a2b565b905f610b96565b6044610be273ffffffffffffffffffffffffffffffffffffffff945f94610d8b565b60405194859384927f35fd631a000000000000000000000000000000000000000000000000000000008452600484015260036024840152165afa9081156101ae575f91610c3e575b506020810151916060604083015192015190565b610c5291503d805f833e6107bb8183610a2b565b5f610c2a565b9190610b2990610d2f565b6020906024610c8773ffffffffffffffffffffffffffffffffffffffff9594610d2f565b60405195869384927f1e2eaeaf0000000000000000000000000000000000000000000000000000000084526004840152165afa9182156101ae575f92610cfb575b5073ffffffffffffffffffffffffffffffffffffffff8216918060a01c60020b9162ffffff808360b81c169260d01c1690565b9091506020813d602011610d27575b81610d1760209383610a2b565b810103126101a25751905f610cc8565b3d9150610d0a565b604051602081019182526006604082015260408152610d4f606082610a2b565b51902090565b610d5e90610d2f565b600481018091116101b95760405190602082019260020b8352604082015260408152610d4f606082610a2b565b610d9490610d2f565b600681018091116101b9576040519060208201928352604082015260408152610d4f606082610a2b56fea164736f6c634300081a000a'; } } diff --git a/src/briefcase/deployers/v4-periphery/V4QuoterDeployer.sol b/src/briefcase/deployers/v4-periphery/V4QuoterDeployer.sol index f4e4643d..2ad2dcc3 100644 --- a/src/briefcase/deployers/v4-periphery/V4QuoterDeployer.sol +++ b/src/briefcase/deployers/v4-periphery/V4QuoterDeployer.sol @@ -22,6 +22,7 @@ library V4QuoterDeployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'60a034607b57601f61187a38819003918201601f19168301916001600160401b03831184841017607f57808492602094604052833981010312607b57516001600160a01b0381168103607b576080526040516117e6908161009482396080518181816101c0015281816103490152818161069401526115bb0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063147d2af9146109865780635873307314610911578063595323f5146108655780636a36a38c1461073a57806391dd734614610610578063aa2f150114610463578063aa9d21cb146103ee578063ca253dc914610254578063d737d0c7146101e4578063dc4c90d3146101765763eebe0c6a14610092575f80fd5b34610172576100a036610ea1565b30330361014a578061010c61010661010160a06fffffffffffffffffffffffffffffffff9501936100d085611227565b6100e9876100e060c08501611234565b16600f0b6113b3565b906100f760e0840184611251565b9490933690610d54565b611475565b91611227565b156101405781165b7fecbd9804000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60801d8116610114565b7f29c3b7ee000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b34610172575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610172575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101725760207f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461017257604061026436610b7d565b337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d5f8061032f5f6102c96102f55a9688519283917f6a36a38c00000000000000000000000000000000000000000000000000000000602084015260248301610fc3565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610a60565b8651809381927f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190610f11565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af190816103ce575b506103c657505061039561038f61038761114a565b925a90611179565b916113df565b905b5f7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d82519182526020820152f35b909150610397565b6103e9903d805f833e6103e18183610a60565b8101906110e7565b610372565b346101725760406103fe36610dbd565b337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d5f8061032f5f6102c96102f55a9688519283917feebe0c6a00000000000000000000000000000000000000000000000000000000602084015260248301611186565b346101725761047136610f54565b30330361014a576020810161048681836112d1565b905061049460408401611234565b9161049e84611325565b9190815b6104e4576fffffffffffffffffffffffffffffffff847fecbd9804000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9091926104f182866112d1565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85018581116105c0576105496105426fffffffffffffffffffffffffffffffff926105909661056595611346565b97886116b2565b939061055860808a018a611251565b9390921690851590611475565b90156105ed5761057790600f0b6112a2565b6fffffffffffffffffffffffffffffffff165b93611325565b9180156105c0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190816104a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6105f99060801d6112a2565b6fffffffffffffffffffffffffffffffff1661058a565b346101725760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101725760043567ffffffffffffffff811161017257366023820112156101725780600401359067ffffffffffffffff82116101725736602483830101116101725773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610712575f6024819284806040519384930183378101838152039082305af16106dd61114a565b906106ea57602081519101fd5b7fe0752a5a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101725761074836610f54565b30330361014a57602081019061075e82826112d1565b905061076c60408301611234565b9161077681611325565b935f915b8383106107bf576fffffffffffffffffffffffffffffffff857fecbd9804000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b909192936108406fffffffffffffffffffffffffffffffff61082161080c6001946107fe6107f78a6107f18b8b6112d1565b90611346565b9b8c6116b2565b948593919216600f0b6113b3565b61081960808d018d611251565b939092611475565b901561084b576fffffffffffffffffffffffffffffffff165b96611325565b95949301919061077a565b60801d6fffffffffffffffffffffffffffffffff1661083a565b346101725761087336610ea1565b30330361014a57806108bf61010661010160a06fffffffffffffffffffffffffffffffff9501936108a385611227565b866108b060c08401611234565b16906100f760e0840184611251565b156108fe576108d09060801d6112a2565b81167fecbd9804000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b61090a90600f0b6112a2565b8116610114565b3461017257604061092136610dbd565b337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d5f8061032f5f6102c96102f55a9688519283917f595323f500000000000000000000000000000000000000000000000000000000602084015260248301611186565b3461017257604061099636610b7d565b337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d5f8061032f5f6102c96102f55a9688519283917faa2f150100000000000000000000000000000000000000000000000000000000602084015260248301610fc3565b6060810190811067ffffffffffffffff821117610a1757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff821117610a1757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a1757604052565b359073ffffffffffffffffffffffffffffffffffffffff8216820361017257565b359062ffffff8216820361017257565b35908160020b820361017257565b67ffffffffffffffff8111610a1757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561017257803590610b3182610ae0565b92610b3f6040519485610a60565b8284526020838301011161017257815f926020809301838601378301015290565b35906fffffffffffffffffffffffffffffffff8216820361017257565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101725760043567ffffffffffffffff81116101725760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82840301126101725760405191610bf2836109fb565b610bfe82600401610aa1565b8352602482013567ffffffffffffffff811161017257820190806023830112156101725760048201359167ffffffffffffffff8311610a17578260051b60405193610c4c6020830186610a60565b845281016024019060208401908383116101725760248101915b838310610c8b5750505050506020830152610c8390604401610b60565b604082015290565b823567ffffffffffffffff8111610172576004908301019060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083880301126101725760405190610cdc82610a44565b610ce860208401610aa1565b8252610cf660408401610ac2565b6020830152610d0760608401610ad2565b6040830152610d1860808401610aa1565b606083015260a08301359167ffffffffffffffff831161017257610d4488602080969581960101610b1a565b6080820152815201920191610c66565b91908260a091031261017257604051610d6c81610a44565b6080610db8818395610d7d81610aa1565b8552610d8b60208201610aa1565b6020860152610d9c60408201610ac2565b6040860152610dad60608201610ad2565b606086015201610aa1565b910152565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101725760043567ffffffffffffffff8111610172576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc828403011261017257604051916080830183811067ffffffffffffffff821117610a1757604052610e518183600401610d54565b835260a48201358015158103610172576020840152610e7260c48301610b60565b604084015260e48201359167ffffffffffffffff831161017257610e999201600401610b1a565b606082015290565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610172576004359067ffffffffffffffff8211610172577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82610100920301126101725760040190565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610172576004359067ffffffffffffffff8211610172577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc826060920301126101725760040190565b60208152608081019173ffffffffffffffffffffffffffffffffffffffff815116602083015260208101519260606040840152835180915260a0830190602060a08260051b8601019501915f905b82821061103b57505050506fffffffffffffffffffffffffffffffff604060609201511691015290565b909192956020806110d9837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608a6001960301865260a060808c5173ffffffffffffffffffffffffffffffffffffffff815116845262ffffff868201511686850152604081015160020b604085015273ffffffffffffffffffffffffffffffffffffffff60608201511660608501520151918160808201520190610f11565b980192019201909291611011565b6020818303126101725780519067ffffffffffffffff8211610172570181601f820112156101725780519061111b82610ae0565b926111296040519485610a60565b8284526020838301011161017257815f9260208093018386015e8301015290565b3d15611174573d9061115b82610ae0565b916111696040519384610a60565b82523d5f602084013e565b606090565b919082039182116105c057565b610120606061122493602084526111eb60208501825173ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6020810151151560c08501526fffffffffffffffffffffffffffffffff60408201511660e0850152015191610100808201520190610f11565b90565b3580151581036101725790565b356fffffffffffffffffffffffffffffffff811681036101725790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610172570180359067ffffffffffffffff82116101725760200191813603831361017257565b600f0b7fffffffffffffffffffffffffffffffff8000000000000000000000000000000081146105c0575f0390565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610172570180359067ffffffffffffffff821161017257602001918160051b3603831361017257565b3573ffffffffffffffffffffffffffffffffffffffff811681036101725790565b91908110156113865760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6181360301821215610172570190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f800000000000000000000000000000000000000000000000000000000000000081146105c0575f0390565b7fecbd9804000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060208301511603611433576024015190565b611471906040519182917f6190b2b0000000000000000000000000000000000000000000000000000000008352602060048401526024830190610f11565b0390fd5b929493908015611697576401000276a4915b8060405192611495846109fb565b1515978884526020840194868652604085019073ffffffffffffffffffffffffffffffffffffffff1681526040519586957ff3cd914c00000000000000000000000000000000000000000000000000000000875260048701611541908b73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b51151560a48701525160c48601525173ffffffffffffffffffffffffffffffffffffffff1660e48501526101048401610120905281610124850152610144840137808201610144015f9052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681010361014401817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691815a6020945f91f190811561168c575f9161165a575b5080945f8312145f146116525760801d5b600f0b036116235750565b60a090207f7a5ed734000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600f0b611618565b90506020813d602011611684575b8161167560209383610a60565b8101031261017257515f611607565b3d9150611668565b6040513d5f823e3d90fd5b73fffd8963efd1fc6a506488495d951d5263988d2591611487565b905f60806040516116c281610a44565b82815282602082015282604082015282606082015201526116e282611325565b73ffffffffffffffffffffffffffffffffffffffff82169173ffffffffffffffffffffffffffffffffffffffff82168084105f146117ba575073ffffffffffffffffffffffffffffffffffffffff905b1680921492602081013562ffffff8116809103610172576040820135918260020b80930361017257606001359273ffffffffffffffffffffffffffffffffffffffff84168094036101725773ffffffffffffffffffffffffffffffffffffffff90604051956117a087610a44565b865216602085015260408401526060830152608082015291565b91505073ffffffffffffffffffffffffffffffffffffffff829161173256fea164736f6c634300081a000a'; + return + hex'60a034607b57601f61187a38819003918201601f19168301916001600160401b03831184841017607f57808492602094604052833981010312607b57516001600160a01b0381168103607b576080526040516117e6908161009482396080518181816101c0015281816103490152818161069401526115bb0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063147d2af9146109865780635873307314610911578063595323f5146108655780636a36a38c1461073a57806391dd734614610610578063aa2f150114610463578063aa9d21cb146103ee578063ca253dc914610254578063d737d0c7146101e4578063dc4c90d3146101765763eebe0c6a14610092575f80fd5b34610172576100a036610ea1565b30330361014a578061010c61010661010160a06fffffffffffffffffffffffffffffffff9501936100d085611227565b6100e9876100e060c08501611234565b16600f0b6113b3565b906100f760e0840184611251565b9490933690610d54565b611475565b91611227565b156101405781165b7fecbd9804000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60801d8116610114565b7f29c3b7ee000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b34610172575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610172575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101725760207f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461017257604061026436610b7d565b337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d5f8061032f5f6102c96102f55a9688519283917f6a36a38c00000000000000000000000000000000000000000000000000000000602084015260248301610fc3565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610a60565b8651809381927f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190610f11565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af190816103ce575b506103c657505061039561038f61038761114a565b925a90611179565b916113df565b905b5f7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d82519182526020820152f35b909150610397565b6103e9903d805f833e6103e18183610a60565b8101906110e7565b610372565b346101725760406103fe36610dbd565b337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d5f8061032f5f6102c96102f55a9688519283917feebe0c6a00000000000000000000000000000000000000000000000000000000602084015260248301611186565b346101725761047136610f54565b30330361014a576020810161048681836112d1565b905061049460408401611234565b9161049e84611325565b9190815b6104e4576fffffffffffffffffffffffffffffffff847fecbd9804000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9091926104f182866112d1565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85018581116105c0576105496105426fffffffffffffffffffffffffffffffff926105909661056595611346565b97886116b2565b939061055860808a018a611251565b9390921690851590611475565b90156105ed5761057790600f0b6112a2565b6fffffffffffffffffffffffffffffffff165b93611325565b9180156105c0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190816104a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6105f99060801d6112a2565b6fffffffffffffffffffffffffffffffff1661058a565b346101725760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101725760043567ffffffffffffffff811161017257366023820112156101725780600401359067ffffffffffffffff82116101725736602483830101116101725773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610712575f6024819284806040519384930183378101838152039082305af16106dd61114a565b906106ea57602081519101fd5b7fe0752a5a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101725761074836610f54565b30330361014a57602081019061075e82826112d1565b905061076c60408301611234565b9161077681611325565b935f915b8383106107bf576fffffffffffffffffffffffffffffffff857fecbd9804000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b909192936108406fffffffffffffffffffffffffffffffff61082161080c6001946107fe6107f78a6107f18b8b6112d1565b90611346565b9b8c6116b2565b948593919216600f0b6113b3565b61081960808d018d611251565b939092611475565b901561084b576fffffffffffffffffffffffffffffffff165b96611325565b95949301919061077a565b60801d6fffffffffffffffffffffffffffffffff1661083a565b346101725761087336610ea1565b30330361014a57806108bf61010661010160a06fffffffffffffffffffffffffffffffff9501936108a385611227565b866108b060c08401611234565b16906100f760e0840184611251565b156108fe576108d09060801d6112a2565b81167fecbd9804000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b61090a90600f0b6112a2565b8116610114565b3461017257604061092136610dbd565b337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d5f8061032f5f6102c96102f55a9688519283917f595323f500000000000000000000000000000000000000000000000000000000602084015260248301611186565b3461017257604061099636610b7d565b337f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d5f8061032f5f6102c96102f55a9688519283917faa2f150100000000000000000000000000000000000000000000000000000000602084015260248301610fc3565b6060810190811067ffffffffffffffff821117610a1757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff821117610a1757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a1757604052565b359073ffffffffffffffffffffffffffffffffffffffff8216820361017257565b359062ffffff8216820361017257565b35908160020b820361017257565b67ffffffffffffffff8111610a1757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561017257803590610b3182610ae0565b92610b3f6040519485610a60565b8284526020838301011161017257815f926020809301838601378301015290565b35906fffffffffffffffffffffffffffffffff8216820361017257565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101725760043567ffffffffffffffff81116101725760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82840301126101725760405191610bf2836109fb565b610bfe82600401610aa1565b8352602482013567ffffffffffffffff811161017257820190806023830112156101725760048201359167ffffffffffffffff8311610a17578260051b60405193610c4c6020830186610a60565b845281016024019060208401908383116101725760248101915b838310610c8b5750505050506020830152610c8390604401610b60565b604082015290565b823567ffffffffffffffff8111610172576004908301019060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083880301126101725760405190610cdc82610a44565b610ce860208401610aa1565b8252610cf660408401610ac2565b6020830152610d0760608401610ad2565b6040830152610d1860808401610aa1565b606083015260a08301359167ffffffffffffffff831161017257610d4488602080969581960101610b1a565b6080820152815201920191610c66565b91908260a091031261017257604051610d6c81610a44565b6080610db8818395610d7d81610aa1565b8552610d8b60208201610aa1565b6020860152610d9c60408201610ac2565b6040860152610dad60608201610ad2565b606086015201610aa1565b910152565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101725760043567ffffffffffffffff8111610172576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc828403011261017257604051916080830183811067ffffffffffffffff821117610a1757604052610e518183600401610d54565b835260a48201358015158103610172576020840152610e7260c48301610b60565b604084015260e48201359167ffffffffffffffff831161017257610e999201600401610b1a565b606082015290565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610172576004359067ffffffffffffffff8211610172577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82610100920301126101725760040190565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610172576004359067ffffffffffffffff8211610172577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc826060920301126101725760040190565b60208152608081019173ffffffffffffffffffffffffffffffffffffffff815116602083015260208101519260606040840152835180915260a0830190602060a08260051b8601019501915f905b82821061103b57505050506fffffffffffffffffffffffffffffffff604060609201511691015290565b909192956020806110d9837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608a6001960301865260a060808c5173ffffffffffffffffffffffffffffffffffffffff815116845262ffffff868201511686850152604081015160020b604085015273ffffffffffffffffffffffffffffffffffffffff60608201511660608501520151918160808201520190610f11565b980192019201909291611011565b6020818303126101725780519067ffffffffffffffff8211610172570181601f820112156101725780519061111b82610ae0565b926111296040519485610a60565b8284526020838301011161017257815f9260208093018386015e8301015290565b3d15611174573d9061115b82610ae0565b916111696040519384610a60565b82523d5f602084013e565b606090565b919082039182116105c057565b610120606061122493602084526111eb60208501825173ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6020810151151560c08501526fffffffffffffffffffffffffffffffff60408201511660e0850152015191610100808201520190610f11565b90565b3580151581036101725790565b356fffffffffffffffffffffffffffffffff811681036101725790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610172570180359067ffffffffffffffff82116101725760200191813603831361017257565b600f0b7fffffffffffffffffffffffffffffffff8000000000000000000000000000000081146105c0575f0390565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610172570180359067ffffffffffffffff821161017257602001918160051b3603831361017257565b3573ffffffffffffffffffffffffffffffffffffffff811681036101725790565b91908110156113865760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6181360301821215610172570190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f800000000000000000000000000000000000000000000000000000000000000081146105c0575f0390565b7fecbd9804000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060208301511603611433576024015190565b611471906040519182917f6190b2b0000000000000000000000000000000000000000000000000000000008352602060048401526024830190610f11565b0390fd5b929493908015611697576401000276a4915b8060405192611495846109fb565b1515978884526020840194868652604085019073ffffffffffffffffffffffffffffffffffffffff1681526040519586957ff3cd914c00000000000000000000000000000000000000000000000000000000875260048701611541908b73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b51151560a48701525160c48601525173ffffffffffffffffffffffffffffffffffffffff1660e48501526101048401610120905281610124850152610144840137808201610144015f9052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681010361014401817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691815a6020945f91f190811561168c575f9161165a575b5080945f8312145f146116525760801d5b600f0b036116235750565b60a090207f7a5ed734000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600f0b611618565b90506020813d602011611684575b8161167560209383610a60565b8101031261017257515f611607565b3d9150611668565b6040513d5f823e3d90fd5b73fffd8963efd1fc6a506488495d951d5263988d2591611487565b905f60806040516116c281610a44565b82815282602082015282604082015282606082015201526116e282611325565b73ffffffffffffffffffffffffffffffffffffffff82169173ffffffffffffffffffffffffffffffffffffffff82168084105f146117ba575073ffffffffffffffffffffffffffffffffffffffff905b1680921492602081013562ffffff8116809103610172576040820135918260020b80930361017257606001359273ffffffffffffffffffffffffffffffffffffffff84168094036101725773ffffffffffffffffffffffffffffffffffffffff90604051956117a087610a44565b865216602085015260408401526060830152608082015291565b91505073ffffffffffffffffffffffffffffffffffffffff829161173256fea164736f6c634300081a000a'; } } diff --git a/src/briefcase/deployers/v4-periphery/WETHHookDeployer.sol b/src/briefcase/deployers/v4-periphery/WETHHookDeployer.sol index 30943da9..8635d826 100644 --- a/src/briefcase/deployers/v4-periphery/WETHHookDeployer.sol +++ b/src/briefcase/deployers/v4-periphery/WETHHookDeployer.sol @@ -21,6 +21,7 @@ library WETHHookDeployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'6101206040523461034457604051601f611bee38819003918201601f19168301916001600160401b03831184841017610348578084926040948552833981010312610344578051906001600160a01b038216820361034457602001516001600160a01b0381169190829003610344576080525f6101a061007d61035c565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100db61035c565b60018152826020820152600160408201528260608201528260808201528260a0820152600160c08201528260e0820152826101008201528261012082015260016101408201528261016082015282610180820152015261200030161515600114801590610337575b8015610326575b8015610319575b801561030c575b80156102ff575b80156102ef575b80156102e3575b80156102d7575b80156102cb575b80156102bb575b80156102af575b80156102a3575b8015610297575b610284578060a0525f60c05280151560e05261010052604051611871908161037d8239608051818181610102015281816101f80152818161047201528181610768015281816107e3015281816108c101528181610a2f01528181610f8001528181610ff80152818161152001526115e0015260a0518181816103450152818161038d015281816104e101528181610afe0152610d15015260c051818181610264015281816103d701528181610b7c01528181610dc1015261108e015260e051818181610220015281816109420152610a83015261010051818181610b5a01528181610d500152610f320152f35b630732d7b560e51b5f523060045260245ffd5b50600130161515610197565b50600230161515610190565b50600430161515610189565b5060083016151560011415610182565b5060103016151561017b565b50602030161515610174565b5060403016151561016d565b5060803016151560011415610166565b506101003016151561015f565b5061020030161515610158565b5061040030161515610151565b50610800301615156001141561014a565b5061100030161515610143565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b038111838210176103485760405256fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081630bc6bffc146110465750806321d0ee7014610fce578063259982e514610f565780633fc8cef314610ee8578063575e24b4146109675780635d5711a51461090c5780636c2bbe7e146107b35780636fe7e6eb1461082e5780639f063efc146107b3578063b47b2fb11461069e578063b6a8b0fa1461068c578063c4e833ce14610505578063d52f63cf14610496578063dc4c90d314610427578063dc98354e146101755763e1b4af690361000f5734610172576004906100e5366112c2565b50505050505073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361014d577f0a85dc29000000000000000000000000000000000000000000000000000000008152fd5b7fae18210a000000000000000000000000000000000000000000000000000000008152fd5b80fd5b50346101725760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610172576101ad6110b2565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360112610172576101e061129f565b5073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036103ff577f00000000000000000000000000000000000000000000000000000000000000001561036d5761024c611476565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691161480610324575b156102fc5760643562ffffff81168091036102f8576102d05760206040517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b807f1213a0ab0000000000000000000000000000000000000000000000000000000060049252fd5b5080fd5b807fdcdedda90000000000000000000000000000000000000000000000000000000060049252fd5b5061032d611499565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691161461028d565b610375611476565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614801561028d57506103bf611499565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691161461028d565b807fae18210a0000000000000000000000000000000000000000000000000000000060049252fd5b503461017257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461017257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461017257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610172576020816101c0926101a060405161054a81611363565b82815282858201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201528261014082015282610160820152826101808201520152806040516105a881611363565b600181528381018281526040820160018152606083018481526080840185815260a0850186815260c08601906001825260e08701928884526101008801948986526101208901968a88526101408a019860018a526101a06101608c019b8d8d5261018081019d8e52019c8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b5034610172576004906100e5366112c2565b5034610172576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610172576106d76110b2565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101725760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610172576101443567ffffffffffffffff81116102f8579061074f600492369084016110d5565b505073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361014d577f0a85dc29000000000000000000000000000000000000000000000000000000008152fd5b5034610172576004906107c5366111ce565b5050505050505073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361014d577f0a85dc29000000000000000000000000000000000000000000000000000000008152fd5b5034610172576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610172576108676110b2565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101725761089a61129f565b5060e4358060020b036101725760049073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361014d577f0a85dc29000000000000000000000000000000000000000000000000000000008152fd5b503461017257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101725760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b5034610cb9576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cb9576109a06110b2565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360112610cb95760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610cb9576101243567ffffffffffffffff8111610cb957610a169036906004016110d5565b505073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813303610ec05760e4355f81128080610eb9575b610e9157801580610e8a575b610e625760c435801515809103610cb9577f0000000000000000000000000000000000000000000000000000000000000000151503610cfb578015610cf457610ab8826113ee565b935b803b15610ce5576040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152848160248183865af18015610ce957908591610cd0575b5090602090610ba08773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000611501565b6004604051809481937f11da60b40000000000000000000000000000000000000000000000000000000083525af18015610cc557610c92575b5015610c7a57818312610c5257610c05610bfa610bff610bfa6060966114bc565b611447565b926114bc565b906fffffffffffffffffffffffffffffffff169060801b17905b604051917f575e24b400000000000000000000000000000000000000000000000000000000835260208301526040820152f35b6004827f93dafdf1000000000000000000000000000000000000000000000000000000008152fd5b818312610c5257610c05610bfa610bff6060956114bc565b6020813d602011610cbd575b81610cab602093836113ad565b81010312610cb95751610bd9565b5f80fd5b3d9150610c9e565b6040513d86823e3d90fd5b81610cda916113ad565b610ce557835f610b3a565b8380fd5b6040513d87823e3d90fd5b8193610aba565b92508215610e5b57610d0c816113ee565b925b610d3984307f0000000000000000000000000000000000000000000000000000000000000000611501565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610cb9575f80916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528a60048401525af18015610e5057610e3b575b50610de584307f00000000000000000000000000000000000000000000000000000000000000006115c0565b15610e2357818312610c5257610e05610bfa610bff610bfa6060966114bc565b906fffffffffffffffffffffffffffffffff169060801b1790610c1f565b818312610c5257610e05610bfa610bff6060956114bc565b610e489193505f906113ad565b5f915f610db9565b6040513d5f823e3d90fd5b8092610d0e565b7f21b865b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f610a70565b7f0ace433b000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f610a64565b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610cb9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cb957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610cb957610f6436611103565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610ec0577f78895c13000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610cb957610fdc36611103565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610ec0577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610cb9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cb95760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610cb957565b9181601f84011215610cb95782359167ffffffffffffffff8311610cb95760208381860195010111610cb957565b906101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610cb95760043573ffffffffffffffffffffffffffffffffffffffff81168103610cb9579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc820112610cb95760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c830112610cb95760c491610144359067ffffffffffffffff8211610cb9576111ca916004016110d5565b9091565b906101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610cb95760043573ffffffffffffffffffffffffffffffffffffffff81168103610cb9579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc820112610cb95760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c830112610cb95760c49161014435916101643591610184359067ffffffffffffffff8211610cb9576111ca916004016110d5565b60c4359073ffffffffffffffffffffffffffffffffffffffff82168203610cb957565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610cb95760043573ffffffffffffffffffffffffffffffffffffffff81168103610cb9579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc830112610cb95760249160c4359160e43591610104359067ffffffffffffffff8211610cb9576111ca916004016110d5565b6101c0810190811067ffffffffffffffff82111761138057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761138057604052565b7f8000000000000000000000000000000000000000000000000000000000000000811461141a575f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600f0b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000811461141a575f0390565b60243573ffffffffffffffffffffffffffffffffffffffff81168103610cb95790565b60443573ffffffffffffffffffffffffffffffffffffffff81168103610cb95790565b9081600f0b9182036114ca57565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b90816020910312610cb9575190565b909180156115bb5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610cb9575f928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610e50576115af5750565b5f6115b9916113ad565b565b505050565b5f915082156115bb5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b15610cb957604051907fa584119400000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff8116918260048201525f8160248183885af18015610e505761184f575b50816116e05750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af19081156116d457506116a95750565b6116ca9060203d6020116116cd575b6116c281836113ad565b8101906114f2565b50565b503d6116b8565b604051903d90823e3d90fd5b9091926040602082604481988285519788927fa9059cbb0000000000000000000000000000000000000000000000000000000084528b600485015260248401525af13d15601f3d116001855114161716928281528260208201520152156117835750602082916004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af19081156116d457506116a95750565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011690604051927f90bfb86500000000000000000000000000000000000000000000000000000000845260048401527fa9059cbb000000000000000000000000000000000000000000000000000000006024840152608060448401528160a00160648401523d60848401523d9060a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b61185c9194505f906113ad565b5f925f61166156fea164736f6c634300081a000a'; + return + hex'6101206040523461034457604051601f611bee38819003918201601f19168301916001600160401b03831184841017610348578084926040948552833981010312610344578051906001600160a01b038216820361034457602001516001600160a01b0381169190829003610344576080525f6101a061007d61035c565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100db61035c565b60018152826020820152600160408201528260608201528260808201528260a0820152600160c08201528260e0820152826101008201528261012082015260016101408201528261016082015282610180820152015261200030161515600114801590610337575b8015610326575b8015610319575b801561030c575b80156102ff575b80156102ef575b80156102e3575b80156102d7575b80156102cb575b80156102bb575b80156102af575b80156102a3575b8015610297575b610284578060a0525f60c05280151560e05261010052604051611871908161037d8239608051818181610102015281816101f80152818161047201528181610768015281816107e3015281816108c101528181610a2f01528181610f8001528181610ff80152818161152001526115e0015260a0518181816103450152818161038d015281816104e101528181610afe0152610d15015260c051818181610264015281816103d701528181610b7c01528181610dc1015261108e015260e051818181610220015281816109420152610a83015261010051818181610b5a01528181610d500152610f320152f35b630732d7b560e51b5f523060045260245ffd5b50600130161515610197565b50600230161515610190565b50600430161515610189565b5060083016151560011415610182565b5060103016151561017b565b50602030161515610174565b5060403016151561016d565b5060803016151560011415610166565b506101003016151561015f565b5061020030161515610158565b5061040030161515610151565b50610800301615156001141561014a565b5061100030161515610143565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b038111838210176103485760405256fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081630bc6bffc146110465750806321d0ee7014610fce578063259982e514610f565780633fc8cef314610ee8578063575e24b4146109675780635d5711a51461090c5780636c2bbe7e146107b35780636fe7e6eb1461082e5780639f063efc146107b3578063b47b2fb11461069e578063b6a8b0fa1461068c578063c4e833ce14610505578063d52f63cf14610496578063dc4c90d314610427578063dc98354e146101755763e1b4af690361000f5734610172576004906100e5366112c2565b50505050505073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361014d577f0a85dc29000000000000000000000000000000000000000000000000000000008152fd5b7fae18210a000000000000000000000000000000000000000000000000000000008152fd5b80fd5b50346101725760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610172576101ad6110b2565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360112610172576101e061129f565b5073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036103ff577f00000000000000000000000000000000000000000000000000000000000000001561036d5761024c611476565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691161480610324575b156102fc5760643562ffffff81168091036102f8576102d05760206040517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b807f1213a0ab0000000000000000000000000000000000000000000000000000000060049252fd5b5080fd5b807fdcdedda90000000000000000000000000000000000000000000000000000000060049252fd5b5061032d611499565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691161461028d565b610375611476565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614801561028d57506103bf611499565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691161461028d565b807fae18210a0000000000000000000000000000000000000000000000000000000060049252fd5b503461017257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461017257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461017257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610172576020816101c0926101a060405161054a81611363565b82815282858201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201528261014082015282610160820152826101808201520152806040516105a881611363565b600181528381018281526040820160018152606083018481526080840185815260a0850186815260c08601906001825260e08701928884526101008801948986526101208901968a88526101408a019860018a526101a06101608c019b8d8d5261018081019d8e52019c8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b5034610172576004906100e5366112c2565b5034610172576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610172576106d76110b2565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101725760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610172576101443567ffffffffffffffff81116102f8579061074f600492369084016110d5565b505073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361014d577f0a85dc29000000000000000000000000000000000000000000000000000000008152fd5b5034610172576004906107c5366111ce565b5050505050505073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361014d577f0a85dc29000000000000000000000000000000000000000000000000000000008152fd5b5034610172576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610172576108676110b2565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101725761089a61129f565b5060e4358060020b036101725760049073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361014d577f0a85dc29000000000000000000000000000000000000000000000000000000008152fd5b503461017257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101725760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b5034610cb9576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cb9576109a06110b2565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360112610cb95760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610cb9576101243567ffffffffffffffff8111610cb957610a169036906004016110d5565b505073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813303610ec05760e4355f81128080610eb9575b610e9157801580610e8a575b610e625760c435801515809103610cb9577f0000000000000000000000000000000000000000000000000000000000000000151503610cfb578015610cf457610ab8826113ee565b935b803b15610ce5576040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152848160248183865af18015610ce957908591610cd0575b5090602090610ba08773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000611501565b6004604051809481937f11da60b40000000000000000000000000000000000000000000000000000000083525af18015610cc557610c92575b5015610c7a57818312610c5257610c05610bfa610bff610bfa6060966114bc565b611447565b926114bc565b906fffffffffffffffffffffffffffffffff169060801b17905b604051917f575e24b400000000000000000000000000000000000000000000000000000000835260208301526040820152f35b6004827f93dafdf1000000000000000000000000000000000000000000000000000000008152fd5b818312610c5257610c05610bfa610bff6060956114bc565b6020813d602011610cbd575b81610cab602093836113ad565b81010312610cb95751610bd9565b5f80fd5b3d9150610c9e565b6040513d86823e3d90fd5b81610cda916113ad565b610ce557835f610b3a565b8380fd5b6040513d87823e3d90fd5b8193610aba565b92508215610e5b57610d0c816113ee565b925b610d3984307f0000000000000000000000000000000000000000000000000000000000000000611501565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610cb9575f80916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528a60048401525af18015610e5057610e3b575b50610de584307f00000000000000000000000000000000000000000000000000000000000000006115c0565b15610e2357818312610c5257610e05610bfa610bff610bfa6060966114bc565b906fffffffffffffffffffffffffffffffff169060801b1790610c1f565b818312610c5257610e05610bfa610bff6060956114bc565b610e489193505f906113ad565b5f915f610db9565b6040513d5f823e3d90fd5b8092610d0e565b7f21b865b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f610a70565b7f0ace433b000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f610a64565b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610cb9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cb957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610cb957610f6436611103565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610ec0577f78895c13000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610cb957610fdc36611103565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610ec0577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610cb9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cb95760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610cb957565b9181601f84011215610cb95782359167ffffffffffffffff8311610cb95760208381860195010111610cb957565b906101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610cb95760043573ffffffffffffffffffffffffffffffffffffffff81168103610cb9579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc820112610cb95760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c830112610cb95760c491610144359067ffffffffffffffff8211610cb9576111ca916004016110d5565b9091565b906101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610cb95760043573ffffffffffffffffffffffffffffffffffffffff81168103610cb9579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc820112610cb95760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c830112610cb95760c49161014435916101643591610184359067ffffffffffffffff8211610cb9576111ca916004016110d5565b60c4359073ffffffffffffffffffffffffffffffffffffffff82168203610cb957565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610cb95760043573ffffffffffffffffffffffffffffffffffffffff81168103610cb9579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc830112610cb95760249160c4359160e43591610104359067ffffffffffffffff8211610cb9576111ca916004016110d5565b6101c0810190811067ffffffffffffffff82111761138057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761138057604052565b7f8000000000000000000000000000000000000000000000000000000000000000811461141a575f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600f0b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000811461141a575f0390565b60243573ffffffffffffffffffffffffffffffffffffffff81168103610cb95790565b60443573ffffffffffffffffffffffffffffffffffffffff81168103610cb95790565b9081600f0b9182036114ca57565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b90816020910312610cb9575190565b909180156115bb5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610cb9575f928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610e50576115af5750565b5f6115b9916113ad565b565b505050565b5f915082156115bb5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b15610cb957604051907fa584119400000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff8116918260048201525f8160248183885af18015610e505761184f575b50816116e05750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af19081156116d457506116a95750565b6116ca9060203d6020116116cd575b6116c281836113ad565b8101906114f2565b50565b503d6116b8565b604051903d90823e3d90fd5b9091926040602082604481988285519788927fa9059cbb0000000000000000000000000000000000000000000000000000000084528b600485015260248401525af13d15601f3d116001855114161716928281528260208201520152156117835750602082916004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af19081156116d457506116a95750565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011690604051927f90bfb86500000000000000000000000000000000000000000000000000000000845260048401527fa9059cbb000000000000000000000000000000000000000000000000000000006024840152608060448401528160a00160648401523d60848401523d9060a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b61185c9194505f906113ad565b5f925f61166156fea164736f6c634300081a000a'; } } diff --git a/src/briefcase/deployers/v4-periphery/WstETHHookDeployer.sol b/src/briefcase/deployers/v4-periphery/WstETHHookDeployer.sol index f261164e..9c60ba76 100644 --- a/src/briefcase/deployers/v4-periphery/WstETHHookDeployer.sol +++ b/src/briefcase/deployers/v4-periphery/WstETHHookDeployer.sol @@ -21,6 +21,7 @@ library WstETHHookDeployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'610120806040523461041457604081611f468038038091610020828561045b565b833981010312610414578051906001600160a01b038216820361041457602001516001600160a01b038116918282036104145760405163183fc7c960e31b8152602081600481875afa908115610420575f916103da575b5060018060a01b0316906080525f6101a06040516100948161042b565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06040516100f68161042b565b60018152826020820152600160408201528260608201528260808201528260a0820152600160c08201528260e08201528261010082015282610120820152600161014082015282610160820152826101808201520152612000301615156001148015906103cd575b80156103bc575b80156103af575b80156103a2575b8015610395575b8015610385575b8015610379575b801561036d575b8015610361575b8015610351575b8015610345575b8015610339575b801561032d575b61031a57825f604492819460209660a0528160c05283821060e052610100526040519263095ea7b360e01b84526004840152811960248401525af13d15601f3d1160015f5114161716156102e457604051611ac7908161047f823960805181818160f7015281816101f301528181610440015281816107200152818161079a01528181610877015281816109e60152818161122b015281816112a3015281816117760152611836015260a05181818161033c01528181610384015281816104ae01528181610b7b0152610de9015260c05181818161025f015281816103ce01528181610a8d01528181610e8a0152611339015260e05181818161021b015281816108fa0152610a3b015261010051818181610b4301528181610d0e01528181610e57015281816110cb01526111dd0152f35b60405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606490fd5b630732d7b560e51b5f523060045260245ffd5b506001301615156101b2565b506002301615156101ab565b506004301615156101a4565b506008301615156001141561019d565b50601030161515610196565b5060203016151561018f565b50604030161515610188565b5060803016151560011415610181565b506101003016151561017a565b5061020030161515610173565b506104003016151561016c565b506108003016151560011415610165565b506110003016151561015e565b90506020813d602011610418575b816103f56020938361045b565b8101031261041457516001600160a01b0381168103610414575f610077565b5f80fd5b3d91506103e8565b6040513d5f823e3d90fd5b6101c081019081106001600160401b0382111761044757604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176104475760405256fe6080806040526004361015610012575f80fd5b5f3560e01c9081630bc6bffc146112f15750806321d0ee7014611279578063259982e5146112015780634aa07e6414611193578063575e24b41461091f5780635d5711a5146108c55780636c2bbe7e1461076e5780636fe7e6eb146107e85780639f063efc1461076e578063b47b2fb114610659578063b6a8b0fa146100cc578063c4e833ce146104d2578063d52f63cf14610464578063dc4c90d3146103f6578063dc98354e146101715763e1b4af69146100cc575f80fd5b3461016d576100da3661156d565b50505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b3461016d5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d576101a861135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d576101db61154a565b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f000000000000000000000000000000000000000000000000000000000000000015610364576102476116f4565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116148061031b575b156102f35760643562ffffff811680910361016d576102cb5760206040517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b7f1213a0ab000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdcdedda9000000000000000000000000000000000000000000000000000000005f5260045ffd5b50610324611717565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b61036c6116f4565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614801561028857506103b6611717565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d575f6101a06040516105108161160e565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c060206040516105738161160e565b60018152818101905f82526040810160018152606082015f8152608083015f815260a084015f815260c085016001815260e08601905f82526101008701925f84526101208801945f8652610140890196600188526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461016d576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5761069161135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101443567ffffffffffffffff811161016d57610707903690600401611380565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d5761077c36611479565b5050505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5761082061135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5761085361154a565b5060e4358060020b0361016d5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b3461016d576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5761095761135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101243567ffffffffffffffff811161016d576109cd903690600401611380565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168033036101455760e4355f81129182809361118c575b6111645782158061115c575b6111345760c43580151580910361016d577f0000000000000000000000000000000000000000000000000000000000000000151503610dd057508115610ccb5773ffffffffffffffffffffffffffffffffffffffff6020610a8883611699565b610ab47f0000000000000000000000000000000000000000000000000000000000000000913083611757565b6024604051809481937f70a08231000000000000000000000000000000000000000000000000000000008352306004840152165afa908115610c8e575f91610c99575b50604051927fea598cb00000000000000000000000000000000000000000000000000000000084528160048501526020846024815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1938415610c8e575f94610c5a575b50610b9f84307f0000000000000000000000000000000000000000000000000000000000000000611816565b15610c4057505f8212610c1857610bcb610bc0610bc5610bc0606095611749565b6116c5565b92611749565b906fffffffffffffffffffffffffffffffff169060801b175b604051907f575e24b400000000000000000000000000000000000000000000000000000000825260208201525f6040820152f35b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b91505f8212610c1857610bcb610bc0610bc5606094611749565b9093506020813d602011610c86575b81610c7660209383611658565b8101031261016d57519284610b73565b3d9150610c69565b6040513d5f823e3d90fd5b90506020813d602011610cc3575b81610cb460209383611658565b8101031261016d575183610af7565b3d9150610ca7565b6040517f9576a0c800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c8e575f91610d9e575b507812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218211670de0b6b3a7640000021581021561016d57602073ffffffffffffffffffffffffffffffffffffffff91670de0b6b3a76400008402908082049106151501610a88565b90506020813d602011610dc8575b81610db960209383611658565b8101031261016d575183610d3e565b3d9150610dac565b91801561108257610de082611699565b905b610e0d82307f0000000000000000000000000000000000000000000000000000000000000000611757565b6040517fde0e9a3e0000000000000000000000000000000000000000000000000000000081528260048201526020816024815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610c8e575f91611050575b507f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff821695604051917f70a082310000000000000000000000000000000000000000000000000000000083528160048401526020836024818b5afa928315610c8e575f9361101a575b50610f1690602093943090611816565b6024604051809881937f70a0823100000000000000000000000000000000000000000000000000000000835260048301525afa948515610c8e575f95610fe6575b508403938411610fb95715610f9f57505f8212610c1857610f82610bc0610bc5610bc0606095611749565b906fffffffffffffffffffffffffffffffff169060801b17610be4565b91505f8212610c1857610f82610bc0610bc5606094611749565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9094506020813d602011611012575b8161100260209383611658565b8101031261016d57519385610f57565b3d9150610ff5565b9092506020813d602011611048575b8161103660209383611658565b8101031261016d575191610f16610f06565b3d9150611029565b90506020813d60201161107a575b8161106b60209383611658565b8101031261016d575185610e87565b3d915061105e565b6040517fb0e3890000000000000000000000000000000000000000000000000000000000815282600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c8e575f91611102575b5090610de2565b90506020813d60201161112c575b8161111d60209383611658565b8101031261016d5751846110fb565b3d9150611110565b7f21b865b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001610a28565b7f0ace433b000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f610a1c565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d5761120f366113ae565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f78895c13000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d57611287366113ae565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b9181601f8401121561016d5782359167ffffffffffffffff831161016d576020838186019501011161016d57565b906101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c491610144359067ffffffffffffffff821161016d5761147591600401611380565b9091565b906101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c49161014435916101643591610184359067ffffffffffffffff821161016d5761147591600401611380565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83011261016d5760249160c4359160e43591610104359067ffffffffffffffff821161016d5761147591600401611380565b6101c0810190811067ffffffffffffffff82111761162b57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761162b57604052565b7f80000000000000000000000000000000000000000000000000000000000000008114610fb9575f0390565b600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008114610fb9575f0390565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b60443573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b9081602091031261016d575190565b9081600f0b918203610c1857565b909180156118115773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561016d575f928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610c8e576118055750565b5f61180f91611658565b565b505050565b5f915082156118115773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b1561016d57604051907fa584119400000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff8116918260048201525f8160248183885af18015610c8e57611aa5575b50816119365750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561192a57506118ff5750565b6119209060203d602011611923575b6119188183611658565b81019061173a565b50565b503d61190e565b604051903d90823e3d90fd5b9091926040602082604481988285519788927fa9059cbb0000000000000000000000000000000000000000000000000000000084528b600485015260248401525af13d15601f3d116001855114161716928281528260208201520152156119d95750602082916004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561192a57506118ff5750565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011690604051927f90bfb86500000000000000000000000000000000000000000000000000000000845260048401527fa9059cbb000000000000000000000000000000000000000000000000000000006024840152608060448401528160a00160648401523d60848401523d9060a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b611ab29194505f90611658565b5f925f6118b756fea164736f6c634300081a000a'; + return + hex'610120806040523461041457604081611f468038038091610020828561045b565b833981010312610414578051906001600160a01b038216820361041457602001516001600160a01b038116918282036104145760405163183fc7c960e31b8152602081600481875afa908115610420575f916103da575b5060018060a01b0316906080525f6101a06040516100948161042b565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06040516100f68161042b565b60018152826020820152600160408201528260608201528260808201528260a0820152600160c08201528260e08201528261010082015282610120820152600161014082015282610160820152826101808201520152612000301615156001148015906103cd575b80156103bc575b80156103af575b80156103a2575b8015610395575b8015610385575b8015610379575b801561036d575b8015610361575b8015610351575b8015610345575b8015610339575b801561032d575b61031a57825f604492819460209660a0528160c05283821060e052610100526040519263095ea7b360e01b84526004840152811960248401525af13d15601f3d1160015f5114161716156102e457604051611ac7908161047f823960805181818160f7015281816101f301528181610440015281816107200152818161079a01528181610877015281816109e60152818161122b015281816112a3015281816117760152611836015260a05181818161033c01528181610384015281816104ae01528181610b7b0152610de9015260c05181818161025f015281816103ce01528181610a8d01528181610e8a0152611339015260e05181818161021b015281816108fa0152610a3b015261010051818181610b4301528181610d0e01528181610e57015281816110cb01526111dd0152f35b60405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606490fd5b630732d7b560e51b5f523060045260245ffd5b506001301615156101b2565b506002301615156101ab565b506004301615156101a4565b506008301615156001141561019d565b50601030161515610196565b5060203016151561018f565b50604030161515610188565b5060803016151560011415610181565b506101003016151561017a565b5061020030161515610173565b506104003016151561016c565b506108003016151560011415610165565b506110003016151561015e565b90506020813d602011610418575b816103f56020938361045b565b8101031261041457516001600160a01b0381168103610414575f610077565b5f80fd5b3d91506103e8565b6040513d5f823e3d90fd5b6101c081019081106001600160401b0382111761044757604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176104475760405256fe6080806040526004361015610012575f80fd5b5f3560e01c9081630bc6bffc146112f15750806321d0ee7014611279578063259982e5146112015780634aa07e6414611193578063575e24b41461091f5780635d5711a5146108c55780636c2bbe7e1461076e5780636fe7e6eb146107e85780639f063efc1461076e578063b47b2fb114610659578063b6a8b0fa146100cc578063c4e833ce146104d2578063d52f63cf14610464578063dc4c90d3146103f6578063dc98354e146101715763e1b4af69146100cc575f80fd5b3461016d576100da3661156d565b50505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b3461016d5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d576101a861135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d576101db61154a565b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f000000000000000000000000000000000000000000000000000000000000000015610364576102476116f4565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116148061031b575b156102f35760643562ffffff811680910361016d576102cb5760206040517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b7f1213a0ab000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdcdedda9000000000000000000000000000000000000000000000000000000005f5260045ffd5b50610324611717565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b61036c6116f4565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614801561028857506103b6611717565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d575f6101a06040516105108161160e565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c060206040516105738161160e565b60018152818101905f82526040810160018152606082015f8152608083015f815260a084015f815260c085016001815260e08601905f82526101008701925f84526101208801945f8652610140890196600188526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461016d576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5761069161135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101443567ffffffffffffffff811161016d57610707903690600401611380565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d5761077c36611479565b5050505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5761082061135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5761085361154a565b5060e4358060020b0361016d5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b3461016d576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5761095761135d565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101243567ffffffffffffffff811161016d576109cd903690600401611380565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168033036101455760e4355f81129182809361118c575b6111645782158061115c575b6111345760c43580151580910361016d577f0000000000000000000000000000000000000000000000000000000000000000151503610dd057508115610ccb5773ffffffffffffffffffffffffffffffffffffffff6020610a8883611699565b610ab47f0000000000000000000000000000000000000000000000000000000000000000913083611757565b6024604051809481937f70a08231000000000000000000000000000000000000000000000000000000008352306004840152165afa908115610c8e575f91610c99575b50604051927fea598cb00000000000000000000000000000000000000000000000000000000084528160048501526020846024815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1938415610c8e575f94610c5a575b50610b9f84307f0000000000000000000000000000000000000000000000000000000000000000611816565b15610c4057505f8212610c1857610bcb610bc0610bc5610bc0606095611749565b6116c5565b92611749565b906fffffffffffffffffffffffffffffffff169060801b175b604051907f575e24b400000000000000000000000000000000000000000000000000000000825260208201525f6040820152f35b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b91505f8212610c1857610bcb610bc0610bc5606094611749565b9093506020813d602011610c86575b81610c7660209383611658565b8101031261016d57519284610b73565b3d9150610c69565b6040513d5f823e3d90fd5b90506020813d602011610cc3575b81610cb460209383611658565b8101031261016d575183610af7565b3d9150610ca7565b6040517f9576a0c800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c8e575f91610d9e575b507812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218211670de0b6b3a7640000021581021561016d57602073ffffffffffffffffffffffffffffffffffffffff91670de0b6b3a76400008402908082049106151501610a88565b90506020813d602011610dc8575b81610db960209383611658565b8101031261016d575183610d3e565b3d9150610dac565b91801561108257610de082611699565b905b610e0d82307f0000000000000000000000000000000000000000000000000000000000000000611757565b6040517fde0e9a3e0000000000000000000000000000000000000000000000000000000081528260048201526020816024815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610c8e575f91611050575b507f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff821695604051917f70a082310000000000000000000000000000000000000000000000000000000083528160048401526020836024818b5afa928315610c8e575f9361101a575b50610f1690602093943090611816565b6024604051809881937f70a0823100000000000000000000000000000000000000000000000000000000835260048301525afa948515610c8e575f95610fe6575b508403938411610fb95715610f9f57505f8212610c1857610f82610bc0610bc5610bc0606095611749565b906fffffffffffffffffffffffffffffffff169060801b17610be4565b91505f8212610c1857610f82610bc0610bc5606094611749565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9094506020813d602011611012575b8161100260209383611658565b8101031261016d57519385610f57565b3d9150610ff5565b9092506020813d602011611048575b8161103660209383611658565b8101031261016d575191610f16610f06565b3d9150611029565b90506020813d60201161107a575b8161106b60209383611658565b8101031261016d575185610e87565b3d915061105e565b6040517fb0e3890000000000000000000000000000000000000000000000000000000000815282600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c8e575f91611102575b5090610de2565b90506020813d60201161112c575b8161111d60209383611658565b8101031261016d5751846110fb565b3d9150611110565b7f21b865b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001610a28565b7f0ace433b000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f610a1c565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d5761120f366113ae565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f78895c13000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d57611287366113ae565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b9181601f8401121561016d5782359167ffffffffffffffff831161016d576020838186019501011161016d57565b906101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c491610144359067ffffffffffffffff821161016d5761147591600401611380565b9091565b906101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c49161014435916101643591610184359067ffffffffffffffff821161016d5761147591600401611380565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83011261016d5760249160c4359160e43591610104359067ffffffffffffffff821161016d5761147591600401611380565b6101c0810190811067ffffffffffffffff82111761162b57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761162b57604052565b7f80000000000000000000000000000000000000000000000000000000000000008114610fb9575f0390565b600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008114610fb9575f0390565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b60443573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b9081602091031261016d575190565b9081600f0b918203610c1857565b909180156118115773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561016d575f928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610c8e576118055750565b5f61180f91611658565b565b505050565b5f915082156118115773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b1561016d57604051907fa584119400000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff8116918260048201525f8160248183885af18015610c8e57611aa5575b50816119365750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561192a57506118ff5750565b6119209060203d602011611923575b6119188183611658565b81019061173a565b50565b503d61190e565b604051903d90823e3d90fd5b9091926040602082604481988285519788927fa9059cbb0000000000000000000000000000000000000000000000000000000084528b600485015260248401525af13d15601f3d116001855114161716928281528260208201520152156119d95750602082916004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561192a57506118ff5750565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011690604051927f90bfb86500000000000000000000000000000000000000000000000000000000845260048401527fa9059cbb000000000000000000000000000000000000000000000000000000006024840152608060448401528160a00160648401523d60848401523d9060a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b611ab29194505f90611658565b5f925f6118b756fea164736f6c634300081a000a'; } } diff --git a/src/briefcase/deployers/v4-periphery/WstETHRoutingHookDeployer.sol b/src/briefcase/deployers/v4-periphery/WstETHRoutingHookDeployer.sol index bec717cd..7aa57300 100644 --- a/src/briefcase/deployers/v4-periphery/WstETHRoutingHookDeployer.sol +++ b/src/briefcase/deployers/v4-periphery/WstETHRoutingHookDeployer.sol @@ -21,6 +21,7 @@ library WstETHRoutingHookDeployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'610120806040523461040d57604081611f6780380380916100208285610454565b83398101031261040d578051906001600160a01b038216820361040d57602001516001600160a01b0381169182820361040d5760405163183fc7c960e31b8152602081600481875afa908115610419575f916103d3575b5060018060a01b0316906080525f6101a060405161009481610424565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06040516100f681610424565b60018152826020820152600160408201528260608201528260808201528260a0820152600160c08201528260e08201528261010082015282610120820152600161014082015282610160820152826101808201520152612000301615156001148015906103c6575b80156103b5575b80156103a8575b801561039b575b801561038e575b801561037e575b8015610372575b8015610366575b801561035a575b801561034a575b801561033e575b8015610332575b8015610326575b61031357825f604492819460209660a0528160c05283821060e052610100526040519263095ea7b360e01b84526004840152811960248401525af13d15601f3d1160015f5114161716156102dd57604051611aef9081610478823960805181818160f7015281816101f301528181610440015281816107200152818161079a01528181610877015281816109e601528181611253015281816112cb0152818161179e015261185e015260a05181818161033c01528181610384015281816104ae0152610e11015260c05181818161025f015281816103ce01528181610a8801528181610eb20152611361015260e05181818161021b015281816108fa0152610a3b015261010051818181610b7b01528181610d4e01528181610e7f015281816110f301526112050152f35b60405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606490fd5b630732d7b560e51b5f523060045260245ffd5b506001301615156101b2565b506002301615156101ab565b506004301615156101a4565b506008301615156001141561019d565b50601030161515610196565b5060203016151561018f565b50604030161515610188565b5060803016151560011415610181565b506101003016151561017a565b5061020030161515610173565b506104003016151561016c565b506108003016151560011415610165565b506110003016151561015e565b90506020813d602011610411575b816103ee60209383610454565b8101031261040d57516001600160a01b038116810361040d575f610077565b5f80fd5b3d91506103e1565b6040513d5f823e3d90fd5b6101c081019081106001600160401b0382111761044057604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176104405760405256fe6080806040526004361015610012575f80fd5b5f3560e01c9081630bc6bffc146113195750806321d0ee70146112a1578063259982e5146112295780634aa07e64146111bb578063575e24b41461091f5780635d5711a5146108c55780636c2bbe7e1461076e5780636fe7e6eb146107e85780639f063efc1461076e578063b47b2fb114610659578063b6a8b0fa146100cc578063c4e833ce146104d2578063d52f63cf14610464578063dc4c90d3146103f6578063dc98354e146101715763e1b4af69146100cc575f80fd5b3461016d576100da36611595565b50505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b3461016d5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d576101a8611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d576101db611572565b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0000000000000000000000000000000000000000000000000000000000000000156103645761024761171c565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116148061031b575b156102f35760643562ffffff811680910361016d576102cb5760206040517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b7f1213a0ab000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdcdedda9000000000000000000000000000000000000000000000000000000005f5260045ffd5b5061032461173f565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b61036c61171c565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614801561028857506103b661173f565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d575f6101a060405161051081611636565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c0602060405161057381611636565b60018152818101905f82526040810160018152606082015f8152608083015f815260a084015f815260c085016001815260e08601905f82526101008701925f84526101208801945f8652610140890196600188526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461016d576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57610691611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101443567ffffffffffffffff811161016d576107079036906004016113a8565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d5761077c366114a1565b5050505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57610820611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d57610853611572565b5060e4358060020b0361016d5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b3461016d576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57610957611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101243567ffffffffffffffff811161016d576109cd9036906004016113a8565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168033036101455760e4355f8112918280936111b4575b61118c57821580611184575b61115c5760c43580151580910361016d577f0000000000000000000000000000000000000000000000000000000000000000151503610df857508115610d0b57610a71816116c1565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690604051907f192084510000000000000000000000000000000000000000000000000000000082526004820152602081602481855afa8015610c9b575f90610cd8575b602091506024604051809481937f7a28fb8800000000000000000000000000000000000000000000000000000000835260048301525afa908115610c9b575f91610ca6575b50604051927fb0e3890000000000000000000000000000000000000000000000000000000000845281600485015260208460248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610c9b575f94610c67575b5015610c4d57505f8212610c2557610bd8610bcd610bd2610bcd606095611771565b6116ed565b92611771565b906fffffffffffffffffffffffffffffffff169060801b175b604051907f575e24b400000000000000000000000000000000000000000000000000000000825260208201525f6040820152f35b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b91505f8212610c2557610bd8610bcd610bd2606094611771565b9093506020813d602011610c93575b81610c8360209383611680565b8101031261016d57519284610bab565b3d9150610c76565b6040513d5f823e3d90fd5b90506020813d602011610cd0575b81610cc160209383611680565b8101031261016d575183610b30565b3d9150610cb4565b506020813d602011610d03575b81610cf260209383611680565b8101031261016d5760209051610aeb565b3d9150610ce5565b6040517f9576a0c800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c9b575f91610dc6575b507812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218211670de0b6b3a7640000021581021561016d57670de0b6b3a76400008202908082049106151501610a71565b90506020813d602011610df0575b81610de160209383611680565b8101031261016d575183610d7e565b3d9150610dd4565b9180156110aa57610e08826116c1565b905b610e3582307f000000000000000000000000000000000000000000000000000000000000000061177f565b6040517fde0e9a3e0000000000000000000000000000000000000000000000000000000081528260048201526020816024815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610c9b575f91611078575b507f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff821695604051917f70a082310000000000000000000000000000000000000000000000000000000083528160048401526020836024818b5afa928315610c9b575f93611042575b50610f3e9060209394309061183e565b6024604051809881937f70a0823100000000000000000000000000000000000000000000000000000000835260048301525afa948515610c9b575f9561100e575b508403938411610fe15715610fc757505f8212610c2557610faa610bcd610bd2610bcd606095611771565b906fffffffffffffffffffffffffffffffff169060801b17610bf1565b91505f8212610c2557610faa610bcd610bd2606094611771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9094506020813d60201161103a575b8161102a60209383611680565b8101031261016d57519385610f7f565b3d915061101d565b9092506020813d602011611070575b8161105e60209383611680565b8101031261016d575191610f3e610f2e565b3d9150611051565b90506020813d6020116110a2575b8161109360209383611680565b8101031261016d575185610eaf565b3d9150611086565b6040517fb0e3890000000000000000000000000000000000000000000000000000000000815282600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c9b575f9161112a575b5090610e0a565b90506020813d602011611154575b8161114560209383611680565b8101031261016d575184611123565b3d9150611138565b7f21b865b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001610a28565b7f0ace433b000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f610a1c565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d57611237366113d6565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f78895c13000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d576112af366113d6565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b9181601f8401121561016d5782359167ffffffffffffffff831161016d576020838186019501011161016d57565b906101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c491610144359067ffffffffffffffff821161016d5761149d916004016113a8565b9091565b906101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c49161014435916101643591610184359067ffffffffffffffff821161016d5761149d916004016113a8565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83011261016d5760249160c4359160e43591610104359067ffffffffffffffff821161016d5761149d916004016113a8565b6101c0810190811067ffffffffffffffff82111761165357604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761165357604052565b7f80000000000000000000000000000000000000000000000000000000000000008114610fe1575f0390565b600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008114610fe1575f0390565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b60443573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b9081602091031261016d575190565b9081600f0b918203610c2557565b909180156118395773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561016d575f928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610c9b5761182d5750565b5f61183791611680565b565b505050565b5f915082156118395773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b1561016d57604051907fa584119400000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff8116918260048201525f8160248183885af18015610c9b57611acd575b508161195e5750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561195257506119275750565b6119489060203d60201161194b575b6119408183611680565b810190611762565b50565b503d611936565b604051903d90823e3d90fd5b9091926040602082604481988285519788927fa9059cbb0000000000000000000000000000000000000000000000000000000084528b600485015260248401525af13d15601f3d11600185511416171692828152826020820152015215611a015750602082916004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561195257506119275750565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011690604051927f90bfb86500000000000000000000000000000000000000000000000000000000845260048401527fa9059cbb000000000000000000000000000000000000000000000000000000006024840152608060448401528160a00160648401523d60848401523d9060a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b611ada9194505f90611680565b5f925f6118df56fea164736f6c634300081a000a'; + return + hex'610120806040523461040d57604081611f6780380380916100208285610454565b83398101031261040d578051906001600160a01b038216820361040d57602001516001600160a01b0381169182820361040d5760405163183fc7c960e31b8152602081600481875afa908115610419575f916103d3575b5060018060a01b0316906080525f6101a060405161009481610424565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06040516100f681610424565b60018152826020820152600160408201528260608201528260808201528260a0820152600160c08201528260e08201528261010082015282610120820152600161014082015282610160820152826101808201520152612000301615156001148015906103c6575b80156103b5575b80156103a8575b801561039b575b801561038e575b801561037e575b8015610372575b8015610366575b801561035a575b801561034a575b801561033e575b8015610332575b8015610326575b61031357825f604492819460209660a0528160c05283821060e052610100526040519263095ea7b360e01b84526004840152811960248401525af13d15601f3d1160015f5114161716156102dd57604051611aef9081610478823960805181818160f7015281816101f301528181610440015281816107200152818161079a01528181610877015281816109e601528181611253015281816112cb0152818161179e015261185e015260a05181818161033c01528181610384015281816104ae0152610e11015260c05181818161025f015281816103ce01528181610a8801528181610eb20152611361015260e05181818161021b015281816108fa0152610a3b015261010051818181610b7b01528181610d4e01528181610e7f015281816110f301526112050152f35b60405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606490fd5b630732d7b560e51b5f523060045260245ffd5b506001301615156101b2565b506002301615156101ab565b506004301615156101a4565b506008301615156001141561019d565b50601030161515610196565b5060203016151561018f565b50604030161515610188565b5060803016151560011415610181565b506101003016151561017a565b5061020030161515610173565b506104003016151561016c565b506108003016151560011415610165565b506110003016151561015e565b90506020813d602011610411575b816103ee60209383610454565b8101031261040d57516001600160a01b038116810361040d575f610077565b5f80fd5b3d91506103e1565b6040513d5f823e3d90fd5b6101c081019081106001600160401b0382111761044057604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176104405760405256fe6080806040526004361015610012575f80fd5b5f3560e01c9081630bc6bffc146113195750806321d0ee70146112a1578063259982e5146112295780634aa07e64146111bb578063575e24b41461091f5780635d5711a5146108c55780636c2bbe7e1461076e5780636fe7e6eb146107e85780639f063efc1461076e578063b47b2fb114610659578063b6a8b0fa146100cc578063c4e833ce146104d2578063d52f63cf14610464578063dc4c90d3146103f6578063dc98354e146101715763e1b4af69146100cc575f80fd5b3461016d576100da36611595565b50505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b3461016d5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d576101a8611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d576101db611572565b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0000000000000000000000000000000000000000000000000000000000000000156103645761024761171c565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116148061031b575b156102f35760643562ffffff811680910361016d576102cb5760206040517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b7f1213a0ab000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdcdedda9000000000000000000000000000000000000000000000000000000005f5260045ffd5b5061032461173f565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b61036c61171c565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614801561028857506103b661173f565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911614610288565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d575f6101a060405161051081611636565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c0602060405161057381611636565b60018152818101905f82526040810160018152606082015f8152608083015f815260a084015f815260c085016001815260e08601905f82526101008701925f84526101208801945f8652610140890196600188526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461016d576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57610691611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101443567ffffffffffffffff811161016d576107079036906004016113a8565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d5761077c366114a1565b5050505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57610820611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d57610853611572565b5060e4358060020b0361016d5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b3461016d576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57610957611385565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261016d5760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261016d576101243567ffffffffffffffff811161016d576109cd9036906004016113a8565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168033036101455760e4355f8112918280936111b4575b61118c57821580611184575b61115c5760c43580151580910361016d577f0000000000000000000000000000000000000000000000000000000000000000151503610df857508115610d0b57610a71816116c1565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690604051907f192084510000000000000000000000000000000000000000000000000000000082526004820152602081602481855afa8015610c9b575f90610cd8575b602091506024604051809481937f7a28fb8800000000000000000000000000000000000000000000000000000000835260048301525afa908115610c9b575f91610ca6575b50604051927fb0e3890000000000000000000000000000000000000000000000000000000000845281600485015260208460248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610c9b575f94610c67575b5015610c4d57505f8212610c2557610bd8610bcd610bd2610bcd606095611771565b6116ed565b92611771565b906fffffffffffffffffffffffffffffffff169060801b175b604051907f575e24b400000000000000000000000000000000000000000000000000000000825260208201525f6040820152f35b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b91505f8212610c2557610bd8610bcd610bd2606094611771565b9093506020813d602011610c93575b81610c8360209383611680565b8101031261016d57519284610bab565b3d9150610c76565b6040513d5f823e3d90fd5b90506020813d602011610cd0575b81610cc160209383611680565b8101031261016d575183610b30565b3d9150610cb4565b506020813d602011610d03575b81610cf260209383611680565b8101031261016d5760209051610aeb565b3d9150610ce5565b6040517f9576a0c800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c9b575f91610dc6575b507812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218211670de0b6b3a7640000021581021561016d57670de0b6b3a76400008202908082049106151501610a71565b90506020813d602011610df0575b81610de160209383611680565b8101031261016d575183610d7e565b3d9150610dd4565b9180156110aa57610e08826116c1565b905b610e3582307f000000000000000000000000000000000000000000000000000000000000000061177f565b6040517fde0e9a3e0000000000000000000000000000000000000000000000000000000081528260048201526020816024815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610c9b575f91611078575b507f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff821695604051917f70a082310000000000000000000000000000000000000000000000000000000083528160048401526020836024818b5afa928315610c9b575f93611042575b50610f3e9060209394309061183e565b6024604051809881937f70a0823100000000000000000000000000000000000000000000000000000000835260048301525afa948515610c9b575f9561100e575b508403938411610fe15715610fc757505f8212610c2557610faa610bcd610bd2610bcd606095611771565b906fffffffffffffffffffffffffffffffff169060801b17610bf1565b91505f8212610c2557610faa610bcd610bd2606094611771565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9094506020813d60201161103a575b8161102a60209383611680565b8101031261016d57519385610f7f565b3d915061101d565b9092506020813d602011611070575b8161105e60209383611680565b8101031261016d575191610f3e610f2e565b3d9150611051565b90506020813d6020116110a2575b8161109360209383611680565b8101031261016d575185610eaf565b3d9150611086565b6040517fb0e3890000000000000000000000000000000000000000000000000000000000815282600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c9b575f9161112a575b5090610e0a565b90506020813d602011611154575b8161114560209383611680565b8101031261016d575184611123565b3d9150611138565b7f21b865b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001610a28565b7f0ace433b000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f610a1c565b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461016d57611237366113d6565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f78895c13000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d576112af366113d6565b505050505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610145577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461016d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016d5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b9181601f8401121561016d5782359167ffffffffffffffff831161016d576020838186019501011161016d57565b906101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c491610144359067ffffffffffffffff821161016d5761149d916004016113a8565b9091565b906101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82011261016d5760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c83011261016d5760c49161014435916101643591610184359067ffffffffffffffff821161016d5761149d916004016113a8565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361016d57565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261016d5760043573ffffffffffffffffffffffffffffffffffffffff8116810361016d579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83011261016d5760249160c4359160e43591610104359067ffffffffffffffff821161016d5761149d916004016113a8565b6101c0810190811067ffffffffffffffff82111761165357604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761165357604052565b7f80000000000000000000000000000000000000000000000000000000000000008114610fe1575f0390565b600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008114610fe1575f0390565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b60443573ffffffffffffffffffffffffffffffffffffffff8116810361016d5790565b9081602091031261016d575190565b9081600f0b918203610c2557565b909180156118395773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561016d575f928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610c9b5761182d5750565b5f61183791611680565b565b505050565b5f915082156118395773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b1561016d57604051907fa584119400000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff8116918260048201525f8160248183885af18015610c9b57611acd575b508161195e5750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561195257506119275750565b6119489060203d60201161194b575b6119408183611680565b810190611762565b50565b503d611936565b604051903d90823e3d90fd5b9091926040602082604481988285519788927fa9059cbb0000000000000000000000000000000000000000000000000000000084528b600485015260248401525af13d15601f3d11600185511416171692828152826020820152015215611a015750602082916004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561195257506119275750565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011690604051927f90bfb86500000000000000000000000000000000000000000000000000000000845260048401527fa9059cbb000000000000000000000000000000000000000000000000000000006024840152608060448401528160a00160648401523d60848401523d9060a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b611ada9194505f90611680565b5f925f6118df56fea164736f6c634300081a000a'; } } diff --git a/src/briefcase/deployers/view-quoter-v3/QuoterDeployer.sol b/src/briefcase/deployers/view-quoter-v3/QuoterDeployer.sol index 025268d7..835d0f70 100644 --- a/src/briefcase/deployers/view-quoter-v3/QuoterDeployer.sol +++ b/src/briefcase/deployers/view-quoter-v3/QuoterDeployer.sol @@ -22,6 +22,7 @@ library QuoterDeployer { * - evm_version: istanbul */ function initcode() internal pure returns (bytes memory) { - return hex'60a06040523480156200001157600080fd5b50604051620029ca380380620029ca83398101604081905262000034916200004a565b60601b6001600160601b0319166080526200007a565b6000602082840312156200005c578081fd5b81516001600160a01b038116811462000073578182fd5b9392505050565b60805160601c61292d6200009d600039806104d45280610cff525061292d6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100e4578063c6a5026a146100f9578063cdca17531461010c578063d85c3d631461011f5761007d565b80632f80bb1d1461008257806386e3a7cf146100ae578063bd21704a146100d1575b600080fd5b6100956100903660046124db565b610132565b6040516100a5949392919061281f565b60405180910390f35b6100c16100bc366004612635565b6102e9565b6040516100a594939291906128ba565b6100c16100df366004612583565b61042a565b6100ec6104d2565b6040516100a591906127fd565b6100c1610107366004612583565b6104f6565b61009561011a3660046124db565b61058b565b6100c161012d36600461259e565b610720565b6000606080600061014286610818565b67ffffffffffffffff8111801561015857600080fd5b50604051908082528060200260200182016040528015610182578160200160208202803683370190505b50925061018e86610818565b67ffffffffffffffff811180156101a457600080fd5b506040519080825280602002602001820160405280156101ce578160200160208202803683370190505b50915060005b60008060006101e28a610829565b925092509250600080600061023d6040518060a00160405280876001600160a01b03168152602001886001600160a01b031681526020018e81526020018662ffffff16815260200160006001600160a01b031681525061042a565b50925092509250818a888151811061025157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508089888151811061027e57fe5b602002602001019063ffffffff16908163ffffffff1681525050829b5086806001019750506102ac8d61085a565b156102c1576102ba8d610862565b9c506102d5565b508a9950600096506102e095505050505050565b5050505050506101d4565b92959194509250565b60008060008060008060008088602001516001600160a01b031689600001516001600160a01b031610905060008960800151905060008a60a001516001600160a01b03166000141561033c575060408a01515b6000604051806080016040528085151581526020016001151581526020018d6060015162ffffff1681526020018d60a001516001600160a01b0316600014610388578d60a001516103ae565b856103a75773fffd8963efd1fc6a506488495d951d5263988d256103ae565b6401000276a45b6001600160a01b031681525090506103d6836103cd8e6040015161087f565b60000383610895565b909c509a509097509550600087136103ee57856103f0565b865b9a50600087136104035786600003610408565b856000035b9450811561041c5781851461041c57600080fd5b505050505050509193509193565b6000806000806000610449866000015187602001518860600151610cf8565b905060006040518060c0016040528088600001516001600160a01b0316815260200188602001516001600160a01b0316815260200188604001518152602001886060015162ffffff168152602001836001600160a01b0316815260200160006001600160a01b031681525090506104bf816102e9565b5091999098509096509294509192505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000610515866000015187602001518860600151610cf8565b905060006040518060c0016040528088600001516001600160a01b0316815260200188602001516001600160a01b0316815260200188604001518152602001836001600160a01b03168152602001886060015162ffffff16815260200160006001600160a01b031681525090506104bf81610720565b6000606080600061059b86610818565b67ffffffffffffffff811180156105b157600080fd5b506040519080825280602002602001820160405280156105db578160200160208202803683370190505b5092506105e786610818565b67ffffffffffffffff811180156105fd57600080fd5b50604051908082528060200260200182016040528015610627578160200160208202803683370190505b50915060005b600080600061063b8a610829565b92509250925060008060006106966040518060a00160405280886001600160a01b03168152602001876001600160a01b031681526020018e81526020018662ffffff16815260200160006001600160a01b03168152506104f6565b50925092509250818a88815181106106aa57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050808988815181106106d757fe5b602002602001019063ffffffff16908163ffffffff1681525050829b5086806001019750506107058d61085a565b156102c1576107138d610862565b9c5050505050505061062d565b600080600080600080600087602001516001600160a01b031688600001516001600160a01b03161090506000886060015190506000604051806080016040528084151581526020016000151581526020018b6080015162ffffff1681526020018b60a001516001600160a01b031660001461079f578b60a001516107c5565b846107be5773fffd8963efd1fc6a506488495d951d5263988d256107c5565b6401000276a45b6001600160a01b031681525090506107ea826107e48c6040015161087f565b83610895565b909a509850909550935060008513610805578460000361080a565b836000035b985050505050509193509193565b80516017601319909101045b919050565b600080806108378482610d36565b9250610844846014610de6565b9050610851846017610d36565b91509193909250565b516042111590565b805160609061087990839060179060161901610e8d565b92915050565b6000600160ff1b821061089157600080fd5b5090565b6000808313602083015280806001816108ad88610fe0565b905060006040518060e001604052808981526020016000815260200183600001516001600160a01b03168152602001836020015160020b81526020016000815260200160006001600160801b031681526020018a6001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561093957600080fd5b505afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906126af565b6001600160801b0316905290505b8051158015906109a9575086606001516001600160a01b031681604001516001600160a01b031614155b15610cb4576109b661238c565b6040808301516001600160a01b03168252830151606083015189516109de928d9290916110fb565b15156040830152600290810b810b60208301819052620d89e719910b1215610a0f57620d89e7196020820152610a2e565b6020810151620d89e860029190910b1315610a2e57620d89e860208201525b610a3b81602001516112f7565b6001600160a01b0316606082015260408201518851610abe9190610a7b5789606001516001600160a01b031683606001516001600160a01b031611610a99565b89606001516001600160a01b031683606001516001600160a01b0316105b610aa7578260600151610aad565b89606001515b60c0850151855160408d0151611629565b60c085015260a084015260808301526001600160a01b03166040830152602088015115610b2457610af88160c0015182608001510161087f565b825103825260a0810151610b1a90610b0f9061087f565b60208401519061181b565b6020830152610b5f565b610b318160a0015161087f565b825101825260c08101516080820151610b5991610b4e910161087f565b602084015190611831565b60208301525b80606001516001600160a01b031682604001516001600160a01b03161415610c7357806040015115610c4957602081015160405163f30dba9360e01b81526000916001600160a01b038d169163f30dba9391610bbd91600401612811565b6101006040518083038186803b158015610bd657600080fd5b505afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e91906126c9565b505050505050915050886000015115610c25576000035b610c338360c0015182611847565b6001600160801b031660c0840152506001909301925b8751610c59578060200151610c62565b60018160200151035b600290810b900b6060830152610cae565b80600001516001600160a01b031682604001516001600160a01b031614610cae57610ca182604001516118fd565b600290810b900b60608301525b5061097f565b60208701518751151590151514610cd357602081015181518903610ce0565b8060000151880381602001515b604090920151909a9199509750919550909350505050565b6000610d2e7f0000000000000000000000000000000000000000000000000000000000000000610d29868686611c1c565b611c72565b949350505050565b600081826014011015610d85576040805162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b604482015290519081900360640190fd5b8160140183511015610dd6576040805162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b604482015290519081900360640190fd5b500160200151600160601b900490565b600081826003011015610e34576040805162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b604482015290519081900360640190fd5b8160030183511015610e84576040805162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b604482015290519081900360640190fd5b50016003015190565b60608182601f011015610ed8576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b828284011015610f20576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b81830184511015610f6c576040805162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015290519081900360640190fd5b606082158015610f8b5760405191506000825260208201604052610fd5565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610fc4578051835260209283019201610fac565b5050858452601f01601f1916604052505b5090505b9392505050565b610fe86123c8565b816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561102157600080fd5b505afa158015611035573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611059919061276f565b5050505050600290810b900b6020808401919091526001600160a01b039182168352604080516334324e9f60e21b815290519285169263d0c93a7c92600480840193919291829003018186803b1580156110b257600080fd5b505afa1580156110c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ea9190612569565b600290810b900b6040820152919050565b60008060008560020b8560020b8161110f57fe5b05905060008560020b12801561113657508560020b8560020b8161112f57fe5b0760020b15155b1561114057600019015b83156112175760008061115283611d56565b6040805163299ce14b60e11b8152600184810b6004830152915193955091935060ff84161b8001600019019160009183916001600160a01b038e1691635339c296916024808301926020929190829003018186803b1580156111b357600080fd5b505afa1580156111c7573d6000803e3d6000fd5b505050506040513d60208110156111dd57600080fd5b50511680151596509050856111f957898360ff1686030261120c565b8961120382611d68565b840360ff168603025b9650505050506112ed565b60008061122683600101611d56565b91509150600060018260ff166001901b031990506000818b6001600160a01b0316635339c296866040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561128457600080fd5b505afa158015611298573d6000803e3d6000fd5b505050506040513d60208110156112ae57600080fd5b50511680151596509050856112d057898360ff0360ff168660010101026112e6565b89836112db83611e08565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b1261130e578260020b611316565b8260020b6000035b9050620d89e8811115611354576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661136857600160801b61137a565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156113ae576ffff97272373d413259a46990580e213a0260801c5b60048216156113cd576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156113ec576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561140b576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561142a576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611449576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611468576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611488576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156114a8576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156114c8576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156114e8576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611508576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611528576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611548576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611568576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611589576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156115a9576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156115c8576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156115e5576b048a170391f7dc42444e8fa20260801c5b60008460020b13156116005780600019816115fc57fe5b0490505b640100000000810615611614576001611617565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906116ae5760006116628989620f42400362ffffff16620f4240611ef2565b90508261167b576116768c8c8c6001611fa1565b611688565b6116888b8d8c600161201a565b9550858110611699578a96506116a8565b6116a58c8b83866120c5565b96505b506116f8565b816116c5576116c08b8b8b600061201a565b6116d2565b6116d28a8c8b6000611fa1565b93508388600003106116e6578995506116f8565b6116f58b8a8a60000385612111565b95505b6001600160a01b038a811690871614821561175b578080156117175750815b61172d57611728878d8c600161201a565b61172f565b855b955080801561173c575081155b6117525761174d878d8c6000611fa1565b611754565b845b94506117a5565b8080156117655750815b61177b576117768c888c6001611fa1565b61177d565b855b955080801561178a575081155b6117a05761179b8c888c600061201a565b6117a2565b845b94505b811580156117b557508860000385115b156117c1578860000394505b8180156117e057508a6001600160a01b0316876001600160a01b031614155b156117ef57858903935061180c565b611809868962ffffff168a620f42400362ffffff1661215d565b93505b50505095509550955095915050565b8082038281131560008312151461087957600080fd5b8181018281121560008312151461087957600080fd5b60008082600f0b12156118ac57826001600160801b03168260000384039150816001600160801b0316106118a7576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b610879565b826001600160801b03168284019150816001600160801b03161015610879576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b03831610801590611939575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b61196e576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110611a0257607f810383901c9150611a0c565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14611c0d57886001600160a01b0316611bf1826112f7565b6001600160a01b03161115611c065781611c08565b805b611c0f565b815b9998505050505050505050565b611c246123c8565b826001600160a01b0316846001600160a01b03161115611c42579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600081602001516001600160a01b031682600001516001600160a01b031610611c9a57600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301206001600160f81b031960a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b60020b600881901d9161010090910790565b6000808211611d7657600080fd5b600160801b8210611d8957608091821c91015b680100000000000000008210611da157604091821c91015b6401000000008210611db557602091821c91015b620100008210611dc757601091821c91015b6101008210611dd857600891821c91015b60108210611de857600491821c91015b60048210611df857600291821c91015b6002821061082457600101919050565b6000808211611e1657600080fd5b5060ff6001600160801b03821615611e3157607f1901611e39565b608082901c91505b67ffffffffffffffff821615611e5257603f1901611e5a565b604082901c91505b63ffffffff821615611e6f57601f1901611e77565b602082901c91505b61ffff821615611e8a57600f1901611e92565b601082901c91505b60ff821615611ea45760071901611eac565b600882901c91505b600f821615611ebe5760031901611ec6565b600482901c91505b6003821615611ed85760011901611ee0565b600282901c91505b60018216156108245760001901919050565b6000808060001985870986860292508281109083900303905080611f285760008411611f1d57600080fd5b508290049050610fd9565b808411611f3457600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000836001600160a01b0316856001600160a01b03161115611fc1579293925b81611fee57611fe9836001600160801b03168686036001600160a01b0316600160601b611ef2565b612011565b612011836001600160801b03168686036001600160a01b0316600160601b61215d565b95945050505050565b6000836001600160a01b0316856001600160a01b0316111561203a579293925b600160601b600160e01b03606084901b166001600160a01b03868603811690871661206457600080fd5b8361209457866001600160a01b03166120878383896001600160a01b0316611ef2565b8161208e57fe5b046120ba565b6120ba6120ab8383896001600160a01b031661215d565b886001600160a01b0316612197565b979650505050505050565b600080856001600160a01b0316116120dc57600080fd5b6000846001600160801b0316116120f257600080fd5b8161210457611fe985858560016121a2565b6120118585856001612283565b600080856001600160a01b03161161212857600080fd5b6000846001600160801b03161161213e57600080fd5b8161215057611fe98585856000612283565b61201185858560006121a2565b600061216a848484611ef2565b90506000828061217657fe5b8486091115610fd957600019811061218d57600080fd5b6001019392505050565b808204910615150190565b600081156122155760006001600160a01b038411156121d8576121d384600160601b876001600160801b0316611ef2565b6121f0565b6001600160801b038516606085901b816121ee57fe5b045b905061220d6122086001600160a01b03881683612366565b612376565b915050610d2e565b60006001600160a01b038411156122435761223e84600160601b876001600160801b031661215d565b61225a565b61225a606085901b6001600160801b038716612197565b905080866001600160a01b03161161227157600080fd5b6001600160a01b038616039050610d2e565b600082612291575083610d2e565b600160601b600160e01b03606085901b16821561231f576001600160a01b038616848102908582816122bf57fe5b0414156122f0578181018281106122ee576122e483896001600160a01b03168361215d565b9350505050610d2e565b505b61231682612311878a6001600160a01b0316868161230a57fe5b0490612366565b612197565b92505050610d2e565b6001600160a01b0386168481029085828161233657fe5b0414801561234357508082115b61234c57600080fd5b8082036122e4612208846001600160a01b038b168461215d565b8082018281101561087957600080fd5b806001600160a01b038116811461082457600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080516060810182526000808252602082018190529181019190915290565b803561082481612908565b8051801515811461082457600080fd5b8051600281900b811461082457600080fd5b600060a08284031215612426578081fd5b60405160a0810181811067ffffffffffffffff8211171561244357fe5b604052905080823561245481612908565b8152602083013561246481612908565b60208201526040838101359082015261247f606084016124c8565b6060820152608083013561249281612908565b6080919091015292915050565b80516001600160801b038116811461082457600080fd5b805161ffff8116811461082457600080fd5b803562ffffff8116811461082457600080fd5b600080604083850312156124ed578182fd5b823567ffffffffffffffff80821115612504578384fd5b818501915085601f830112612517578384fd5b813560208282111561252557fe5b612537601f8301601f191682016128e4565b9250818352878183860101111561254c578586fd5b818185018285013790820181019490945295939092013593505050565b60006020828403121561257a578081fd5b610fd982612403565b600060a08284031215612594578081fd5b610fd98383612415565b600060c082840312156125af578081fd5b60405160c0810181811067ffffffffffffffff821117156125cc57fe5b60405282356125da81612908565b815260208301356125ea81612908565b602082015260408381013590820152606083013561260781612908565b6060820152612618608084016124c8565b608082015261262960a084016123e8565b60a08201529392505050565b600060c08284031215612646578081fd5b60405160c0810181811067ffffffffffffffff8211171561266357fe5b604052823561267181612908565b8152602083013561268181612908565b60208201526040838101359082015261269c606084016124c8565b6060820152608083013561261881612908565b6000602082840312156126c0578081fd5b610fd98261249f565b600080600080600080600080610100898b0312156126e5578384fd5b6126ee8961249f565b9750602089015180600f0b8114612703578485fd5b80975050604089015195506060890151945060808901518060060b8114612728578485fd5b60a08a015190945061273981612908565b60c08a015190935063ffffffff81168114612752578283fd5b915061276060e08a016123f3565b90509295985092959890939650565b600080600080600080600060e0888a031215612789578081fd5b875161279481612908565b96506127a260208901612403565b95506127b0604089016124b6565b94506127be606089016124b6565b93506127cc608089016124b6565b925060a088015160ff811681146127e1578182fd5b91506127ef60c089016123f3565b905092959891949750929550565b6001600160a01b0391909116815260200190565b60029190910b815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b818110156128685784516001600160a01b031683529383019391830191600101612843565b505084810360408601528651808252908201925081870190845b818110156128a457825163ffffffff1685529383019391830191600101612882565b5050505060609290920192909252949350505050565b9384526001600160a01b0392909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff8111828210171561290057fe5b604052919050565b6001600160a01b038116811461291d57600080fd5b5056fea164736f6c6343000706000a'; + return + hex'60a06040523480156200001157600080fd5b50604051620029ca380380620029ca83398101604081905262000034916200004a565b60601b6001600160601b0319166080526200007a565b6000602082840312156200005c578081fd5b81516001600160a01b038116811462000073578182fd5b9392505050565b60805160601c61292d6200009d600039806104d45280610cff525061292d6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100e4578063c6a5026a146100f9578063cdca17531461010c578063d85c3d631461011f5761007d565b80632f80bb1d1461008257806386e3a7cf146100ae578063bd21704a146100d1575b600080fd5b6100956100903660046124db565b610132565b6040516100a5949392919061281f565b60405180910390f35b6100c16100bc366004612635565b6102e9565b6040516100a594939291906128ba565b6100c16100df366004612583565b61042a565b6100ec6104d2565b6040516100a591906127fd565b6100c1610107366004612583565b6104f6565b61009561011a3660046124db565b61058b565b6100c161012d36600461259e565b610720565b6000606080600061014286610818565b67ffffffffffffffff8111801561015857600080fd5b50604051908082528060200260200182016040528015610182578160200160208202803683370190505b50925061018e86610818565b67ffffffffffffffff811180156101a457600080fd5b506040519080825280602002602001820160405280156101ce578160200160208202803683370190505b50915060005b60008060006101e28a610829565b925092509250600080600061023d6040518060a00160405280876001600160a01b03168152602001886001600160a01b031681526020018e81526020018662ffffff16815260200160006001600160a01b031681525061042a565b50925092509250818a888151811061025157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508089888151811061027e57fe5b602002602001019063ffffffff16908163ffffffff1681525050829b5086806001019750506102ac8d61085a565b156102c1576102ba8d610862565b9c506102d5565b508a9950600096506102e095505050505050565b5050505050506101d4565b92959194509250565b60008060008060008060008088602001516001600160a01b031689600001516001600160a01b031610905060008960800151905060008a60a001516001600160a01b03166000141561033c575060408a01515b6000604051806080016040528085151581526020016001151581526020018d6060015162ffffff1681526020018d60a001516001600160a01b0316600014610388578d60a001516103ae565b856103a75773fffd8963efd1fc6a506488495d951d5263988d256103ae565b6401000276a45b6001600160a01b031681525090506103d6836103cd8e6040015161087f565b60000383610895565b909c509a509097509550600087136103ee57856103f0565b865b9a50600087136104035786600003610408565b856000035b9450811561041c5781851461041c57600080fd5b505050505050509193509193565b6000806000806000610449866000015187602001518860600151610cf8565b905060006040518060c0016040528088600001516001600160a01b0316815260200188602001516001600160a01b0316815260200188604001518152602001886060015162ffffff168152602001836001600160a01b0316815260200160006001600160a01b031681525090506104bf816102e9565b5091999098509096509294509192505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000610515866000015187602001518860600151610cf8565b905060006040518060c0016040528088600001516001600160a01b0316815260200188602001516001600160a01b0316815260200188604001518152602001836001600160a01b03168152602001886060015162ffffff16815260200160006001600160a01b031681525090506104bf81610720565b6000606080600061059b86610818565b67ffffffffffffffff811180156105b157600080fd5b506040519080825280602002602001820160405280156105db578160200160208202803683370190505b5092506105e786610818565b67ffffffffffffffff811180156105fd57600080fd5b50604051908082528060200260200182016040528015610627578160200160208202803683370190505b50915060005b600080600061063b8a610829565b92509250925060008060006106966040518060a00160405280886001600160a01b03168152602001876001600160a01b031681526020018e81526020018662ffffff16815260200160006001600160a01b03168152506104f6565b50925092509250818a88815181106106aa57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050808988815181106106d757fe5b602002602001019063ffffffff16908163ffffffff1681525050829b5086806001019750506107058d61085a565b156102c1576107138d610862565b9c5050505050505061062d565b600080600080600080600087602001516001600160a01b031688600001516001600160a01b03161090506000886060015190506000604051806080016040528084151581526020016000151581526020018b6080015162ffffff1681526020018b60a001516001600160a01b031660001461079f578b60a001516107c5565b846107be5773fffd8963efd1fc6a506488495d951d5263988d256107c5565b6401000276a45b6001600160a01b031681525090506107ea826107e48c6040015161087f565b83610895565b909a509850909550935060008513610805578460000361080a565b836000035b985050505050509193509193565b80516017601319909101045b919050565b600080806108378482610d36565b9250610844846014610de6565b9050610851846017610d36565b91509193909250565b516042111590565b805160609061087990839060179060161901610e8d565b92915050565b6000600160ff1b821061089157600080fd5b5090565b6000808313602083015280806001816108ad88610fe0565b905060006040518060e001604052808981526020016000815260200183600001516001600160a01b03168152602001836020015160020b81526020016000815260200160006001600160801b031681526020018a6001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561093957600080fd5b505afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906126af565b6001600160801b0316905290505b8051158015906109a9575086606001516001600160a01b031681604001516001600160a01b031614155b15610cb4576109b661238c565b6040808301516001600160a01b03168252830151606083015189516109de928d9290916110fb565b15156040830152600290810b810b60208301819052620d89e719910b1215610a0f57620d89e7196020820152610a2e565b6020810151620d89e860029190910b1315610a2e57620d89e860208201525b610a3b81602001516112f7565b6001600160a01b0316606082015260408201518851610abe9190610a7b5789606001516001600160a01b031683606001516001600160a01b031611610a99565b89606001516001600160a01b031683606001516001600160a01b0316105b610aa7578260600151610aad565b89606001515b60c0850151855160408d0151611629565b60c085015260a084015260808301526001600160a01b03166040830152602088015115610b2457610af88160c0015182608001510161087f565b825103825260a0810151610b1a90610b0f9061087f565b60208401519061181b565b6020830152610b5f565b610b318160a0015161087f565b825101825260c08101516080820151610b5991610b4e910161087f565b602084015190611831565b60208301525b80606001516001600160a01b031682604001516001600160a01b03161415610c7357806040015115610c4957602081015160405163f30dba9360e01b81526000916001600160a01b038d169163f30dba9391610bbd91600401612811565b6101006040518083038186803b158015610bd657600080fd5b505afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e91906126c9565b505050505050915050886000015115610c25576000035b610c338360c0015182611847565b6001600160801b031660c0840152506001909301925b8751610c59578060200151610c62565b60018160200151035b600290810b900b6060830152610cae565b80600001516001600160a01b031682604001516001600160a01b031614610cae57610ca182604001516118fd565b600290810b900b60608301525b5061097f565b60208701518751151590151514610cd357602081015181518903610ce0565b8060000151880381602001515b604090920151909a9199509750919550909350505050565b6000610d2e7f0000000000000000000000000000000000000000000000000000000000000000610d29868686611c1c565b611c72565b949350505050565b600081826014011015610d85576040805162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b604482015290519081900360640190fd5b8160140183511015610dd6576040805162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b604482015290519081900360640190fd5b500160200151600160601b900490565b600081826003011015610e34576040805162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b604482015290519081900360640190fd5b8160030183511015610e84576040805162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b604482015290519081900360640190fd5b50016003015190565b60608182601f011015610ed8576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b828284011015610f20576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b81830184511015610f6c576040805162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015290519081900360640190fd5b606082158015610f8b5760405191506000825260208201604052610fd5565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610fc4578051835260209283019201610fac565b5050858452601f01601f1916604052505b5090505b9392505050565b610fe86123c8565b816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561102157600080fd5b505afa158015611035573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611059919061276f565b5050505050600290810b900b6020808401919091526001600160a01b039182168352604080516334324e9f60e21b815290519285169263d0c93a7c92600480840193919291829003018186803b1580156110b257600080fd5b505afa1580156110c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ea9190612569565b600290810b900b6040820152919050565b60008060008560020b8560020b8161110f57fe5b05905060008560020b12801561113657508560020b8560020b8161112f57fe5b0760020b15155b1561114057600019015b83156112175760008061115283611d56565b6040805163299ce14b60e11b8152600184810b6004830152915193955091935060ff84161b8001600019019160009183916001600160a01b038e1691635339c296916024808301926020929190829003018186803b1580156111b357600080fd5b505afa1580156111c7573d6000803e3d6000fd5b505050506040513d60208110156111dd57600080fd5b50511680151596509050856111f957898360ff1686030261120c565b8961120382611d68565b840360ff168603025b9650505050506112ed565b60008061122683600101611d56565b91509150600060018260ff166001901b031990506000818b6001600160a01b0316635339c296866040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561128457600080fd5b505afa158015611298573d6000803e3d6000fd5b505050506040513d60208110156112ae57600080fd5b50511680151596509050856112d057898360ff0360ff168660010101026112e6565b89836112db83611e08565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b1261130e578260020b611316565b8260020b6000035b9050620d89e8811115611354576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661136857600160801b61137a565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156113ae576ffff97272373d413259a46990580e213a0260801c5b60048216156113cd576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156113ec576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561140b576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561142a576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611449576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611468576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611488576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156114a8576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156114c8576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156114e8576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611508576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611528576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611548576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611568576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611589576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156115a9576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156115c8576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156115e5576b048a170391f7dc42444e8fa20260801c5b60008460020b13156116005780600019816115fc57fe5b0490505b640100000000810615611614576001611617565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906116ae5760006116628989620f42400362ffffff16620f4240611ef2565b90508261167b576116768c8c8c6001611fa1565b611688565b6116888b8d8c600161201a565b9550858110611699578a96506116a8565b6116a58c8b83866120c5565b96505b506116f8565b816116c5576116c08b8b8b600061201a565b6116d2565b6116d28a8c8b6000611fa1565b93508388600003106116e6578995506116f8565b6116f58b8a8a60000385612111565b95505b6001600160a01b038a811690871614821561175b578080156117175750815b61172d57611728878d8c600161201a565b61172f565b855b955080801561173c575081155b6117525761174d878d8c6000611fa1565b611754565b845b94506117a5565b8080156117655750815b61177b576117768c888c6001611fa1565b61177d565b855b955080801561178a575081155b6117a05761179b8c888c600061201a565b6117a2565b845b94505b811580156117b557508860000385115b156117c1578860000394505b8180156117e057508a6001600160a01b0316876001600160a01b031614155b156117ef57858903935061180c565b611809868962ffffff168a620f42400362ffffff1661215d565b93505b50505095509550955095915050565b8082038281131560008312151461087957600080fd5b8181018281121560008312151461087957600080fd5b60008082600f0b12156118ac57826001600160801b03168260000384039150816001600160801b0316106118a7576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b610879565b826001600160801b03168284019150816001600160801b03161015610879576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b03831610801590611939575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b61196e576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110611a0257607f810383901c9150611a0c565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14611c0d57886001600160a01b0316611bf1826112f7565b6001600160a01b03161115611c065781611c08565b805b611c0f565b815b9998505050505050505050565b611c246123c8565b826001600160a01b0316846001600160a01b03161115611c42579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600081602001516001600160a01b031682600001516001600160a01b031610611c9a57600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301206001600160f81b031960a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b60020b600881901d9161010090910790565b6000808211611d7657600080fd5b600160801b8210611d8957608091821c91015b680100000000000000008210611da157604091821c91015b6401000000008210611db557602091821c91015b620100008210611dc757601091821c91015b6101008210611dd857600891821c91015b60108210611de857600491821c91015b60048210611df857600291821c91015b6002821061082457600101919050565b6000808211611e1657600080fd5b5060ff6001600160801b03821615611e3157607f1901611e39565b608082901c91505b67ffffffffffffffff821615611e5257603f1901611e5a565b604082901c91505b63ffffffff821615611e6f57601f1901611e77565b602082901c91505b61ffff821615611e8a57600f1901611e92565b601082901c91505b60ff821615611ea45760071901611eac565b600882901c91505b600f821615611ebe5760031901611ec6565b600482901c91505b6003821615611ed85760011901611ee0565b600282901c91505b60018216156108245760001901919050565b6000808060001985870986860292508281109083900303905080611f285760008411611f1d57600080fd5b508290049050610fd9565b808411611f3457600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000836001600160a01b0316856001600160a01b03161115611fc1579293925b81611fee57611fe9836001600160801b03168686036001600160a01b0316600160601b611ef2565b612011565b612011836001600160801b03168686036001600160a01b0316600160601b61215d565b95945050505050565b6000836001600160a01b0316856001600160a01b0316111561203a579293925b600160601b600160e01b03606084901b166001600160a01b03868603811690871661206457600080fd5b8361209457866001600160a01b03166120878383896001600160a01b0316611ef2565b8161208e57fe5b046120ba565b6120ba6120ab8383896001600160a01b031661215d565b886001600160a01b0316612197565b979650505050505050565b600080856001600160a01b0316116120dc57600080fd5b6000846001600160801b0316116120f257600080fd5b8161210457611fe985858560016121a2565b6120118585856001612283565b600080856001600160a01b03161161212857600080fd5b6000846001600160801b03161161213e57600080fd5b8161215057611fe98585856000612283565b61201185858560006121a2565b600061216a848484611ef2565b90506000828061217657fe5b8486091115610fd957600019811061218d57600080fd5b6001019392505050565b808204910615150190565b600081156122155760006001600160a01b038411156121d8576121d384600160601b876001600160801b0316611ef2565b6121f0565b6001600160801b038516606085901b816121ee57fe5b045b905061220d6122086001600160a01b03881683612366565b612376565b915050610d2e565b60006001600160a01b038411156122435761223e84600160601b876001600160801b031661215d565b61225a565b61225a606085901b6001600160801b038716612197565b905080866001600160a01b03161161227157600080fd5b6001600160a01b038616039050610d2e565b600082612291575083610d2e565b600160601b600160e01b03606085901b16821561231f576001600160a01b038616848102908582816122bf57fe5b0414156122f0578181018281106122ee576122e483896001600160a01b03168361215d565b9350505050610d2e565b505b61231682612311878a6001600160a01b0316868161230a57fe5b0490612366565b612197565b92505050610d2e565b6001600160a01b0386168481029085828161233657fe5b0414801561234357508082115b61234c57600080fd5b8082036122e4612208846001600160a01b038b168461215d565b8082018281101561087957600080fd5b806001600160a01b038116811461082457600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080516060810182526000808252602082018190529181019190915290565b803561082481612908565b8051801515811461082457600080fd5b8051600281900b811461082457600080fd5b600060a08284031215612426578081fd5b60405160a0810181811067ffffffffffffffff8211171561244357fe5b604052905080823561245481612908565b8152602083013561246481612908565b60208201526040838101359082015261247f606084016124c8565b6060820152608083013561249281612908565b6080919091015292915050565b80516001600160801b038116811461082457600080fd5b805161ffff8116811461082457600080fd5b803562ffffff8116811461082457600080fd5b600080604083850312156124ed578182fd5b823567ffffffffffffffff80821115612504578384fd5b818501915085601f830112612517578384fd5b813560208282111561252557fe5b612537601f8301601f191682016128e4565b9250818352878183860101111561254c578586fd5b818185018285013790820181019490945295939092013593505050565b60006020828403121561257a578081fd5b610fd982612403565b600060a08284031215612594578081fd5b610fd98383612415565b600060c082840312156125af578081fd5b60405160c0810181811067ffffffffffffffff821117156125cc57fe5b60405282356125da81612908565b815260208301356125ea81612908565b602082015260408381013590820152606083013561260781612908565b6060820152612618608084016124c8565b608082015261262960a084016123e8565b60a08201529392505050565b600060c08284031215612646578081fd5b60405160c0810181811067ffffffffffffffff8211171561266357fe5b604052823561267181612908565b8152602083013561268181612908565b60208201526040838101359082015261269c606084016124c8565b6060820152608083013561261881612908565b6000602082840312156126c0578081fd5b610fd98261249f565b600080600080600080600080610100898b0312156126e5578384fd5b6126ee8961249f565b9750602089015180600f0b8114612703578485fd5b80975050604089015195506060890151945060808901518060060b8114612728578485fd5b60a08a015190945061273981612908565b60c08a015190935063ffffffff81168114612752578283fd5b915061276060e08a016123f3565b90509295985092959890939650565b600080600080600080600060e0888a031215612789578081fd5b875161279481612908565b96506127a260208901612403565b95506127b0604089016124b6565b94506127be606089016124b6565b93506127cc608089016124b6565b925060a088015160ff811681146127e1578182fd5b91506127ef60c089016123f3565b905092959891949750929550565b6001600160a01b0391909116815260200190565b60029190910b815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b818110156128685784516001600160a01b031683529383019391830191600101612843565b505084810360408601528651808252908201925081870190845b818110156128a457825163ffffffff1685529383019391830191600101612882565b5050505060609290920192909252949350505050565b9384526001600160a01b0392909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff8111828210171561290057fe5b604052919050565b6001600160a01b038116811461291d57600080fd5b5056fea164736f6c6343000706000a'; } } diff --git a/src/briefcase/protocols/calibur/libraries/CalldataDecoder.sol b/src/briefcase/protocols/calibur/libraries/CalldataDecoder.sol index f1811d1b..ef0604a7 100644 --- a/src/briefcase/protocols/calibur/libraries/CalldataDecoder.sol +++ b/src/briefcase/protocols/calibur/libraries/CalldataDecoder.sol @@ -14,7 +14,7 @@ library CalldataDecoder { /// @notice Removes the selector from the calldata and returns the encoded params. function removeSelector(bytes calldata data) internal pure returns (bytes calldata params) { - assembly ('memory-safe') { + assembly ("memory-safe") { if lt(data.length, 4) { mstore(0, SLICE_ERROR_SELECTOR) revert(0x1c, 4) @@ -30,7 +30,7 @@ library CalldataDecoder { // @param _arg The index of the argument to extract function toBytes(bytes calldata _bytes, uint256 _arg) internal pure returns (bytes calldata res) { uint256 length; - assembly ('memory-safe') { + assembly ("memory-safe") { // The offset of the `_arg`-th element is `32 * arg`, which stores the offset of the length pointer. // shl(5, x) is equivalent to mul(32, x) let lengthPtr := @@ -57,7 +57,7 @@ library CalldataDecoder { // @param _arg The index of the argument to extract function safeToBytes(bytes calldata _bytes, uint256 _arg) internal pure returns (bytes calldata res) { uint256 length; - assembly ('memory-safe') { + assembly ("memory-safe") { // The offset of the `_arg`-th element is `32 * arg`, which stores the offset of the length pointer. // shl(5, x) is equivalent to mul(32, x) let lengthPtr := diff --git a/src/briefcase/protocols/calibur/libraries/ERC7739Utils.sol b/src/briefcase/protocols/calibur/libraries/ERC7739Utils.sol index 5f9ee60a..f709311a 100644 --- a/src/briefcase/protocols/calibur/libraries/ERC7739Utils.sol +++ b/src/briefcase/protocols/calibur/libraries/ERC7739Utils.sol @@ -1,9 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.23; -import { - MessageHashUtils -} from '../../lib-external/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol'; +import {MessageHashUtils} from + '../../lib-external/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol'; import {PersonalSignLib} from './PersonalSignLib.sol'; import {TypedDataSignLib} from './TypedDataSignLib.sol'; @@ -79,7 +78,7 @@ library ERC7739Utils { } } // If we didn't find a valid contentsName, return empty strings - assembly ('memory-safe') { + assembly ("memory-safe") { contentsName.offset := 0 contentsName.length := 0 contentsType.offset := 0 diff --git a/src/briefcase/protocols/calibur/libraries/KeyLib.sol b/src/briefcase/protocols/calibur/libraries/KeyLib.sol index 9b3d3475..0aa9a444 100644 --- a/src/briefcase/protocols/calibur/libraries/KeyLib.sol +++ b/src/briefcase/protocols/calibur/libraries/KeyLib.sol @@ -22,6 +22,7 @@ struct Key { library KeyLib { /// @notice The sentinel hash value used to represent the root key + bytes32 public constant ROOT_KEY_HASH = bytes32(0); /// @notice Hashes a key diff --git a/src/briefcase/protocols/calibur/libraries/TransientNativeAllowance.sol b/src/briefcase/protocols/calibur/libraries/TransientNativeAllowance.sol index e59b9e2b..a1b1e52c 100644 --- a/src/briefcase/protocols/calibur/libraries/TransientNativeAllowance.sol +++ b/src/briefcase/protocols/calibur/libraries/TransientNativeAllowance.sol @@ -8,7 +8,7 @@ pragma solidity ^0.8.24; library TransientNativeAllowance { /// @notice calculates which storage slot a transient native allowance should be stored in for a given spender function _computeSlot(address spender) internal pure returns (bytes32 hashSlot) { - assembly ('memory-safe') { + assembly ("memory-safe") { mstore(0, and(spender, 0xffffffffffffffffffffffffffffffffffffffff)) hashSlot := keccak256(0, 32) } @@ -17,7 +17,7 @@ library TransientNativeAllowance { /// @notice Returns the transient allowance for a given spender function get(address spender) internal view returns (uint256 allowance) { bytes32 hashSlot = _computeSlot(spender); - assembly ('memory-safe') { + assembly ("memory-safe") { allowance := tload(hashSlot) } } @@ -25,7 +25,7 @@ library TransientNativeAllowance { /// @notice Sets the transient allowance for a given spender function set(address spender, uint256 allowance) internal { bytes32 hashSlot = _computeSlot(spender); - assembly ('memory-safe') { + assembly ("memory-safe") { tstore(hashSlot, allowance) } } diff --git a/src/briefcase/protocols/calibur/libraries/WrappedSignatureLib.sol b/src/briefcase/protocols/calibur/libraries/WrappedSignatureLib.sol index a5afd5e3..546dbf87 100644 --- a/src/briefcase/protocols/calibur/libraries/WrappedSignatureLib.sol +++ b/src/briefcase/protocols/calibur/libraries/WrappedSignatureLib.sol @@ -34,7 +34,7 @@ library WrappedSignatureLib { { signature = data.safeToBytes(0); hookData = data.safeToBytes(1); - assembly ('memory-safe') { + assembly ("memory-safe") { if lt(signature.length, 64) { mstore(0, INVALID_SIGNATURE_LENGTH_SELECTOR) revert(0x1c, 4) @@ -56,7 +56,7 @@ library WrappedSignatureLib { } signature = data.safeToBytes(1); hookData = data.safeToBytes(2); - assembly ('memory-safe') { + assembly ("memory-safe") { if lt(signature.length, 64) { mstore(0, INVALID_SIGNATURE_LENGTH_SELECTOR) revert(0x1c, 4) diff --git a/src/briefcase/protocols/lib-external/base64/base64.sol b/src/briefcase/protocols/lib-external/base64/base64.sol index 85cd4b0f..1b0ea288 100644 --- a/src/briefcase/protocols/lib-external/base64/base64.sol +++ b/src/briefcase/protocols/lib-external/base64/base64.sol @@ -83,9 +83,7 @@ library Base64 { let lastBytes := mload(add(data, mload(data))) if eq(and(lastBytes, 0xFF), 0x3d) { decodedLen := sub(decodedLen, 1) - if eq(and(lastBytes, 0xFFFF), 0x3d3d) { - decodedLen := sub(decodedLen, 1) - } + if eq(and(lastBytes, 0xFFFF), 0x3d3d) { decodedLen := sub(decodedLen, 1) } } // set the actual output length diff --git a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/Base64.sol b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/Base64.sol index f2830bd3..94220f37 100644 --- a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/Base64.sol +++ b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/Base64.sol @@ -85,9 +85,7 @@ library Base64 { mstore8(sub(resultPtr, 1), 0x3d) mstore8(sub(resultPtr, 2), 0x3d) } - case 2 { - mstore8(sub(resultPtr, 1), 0x3d) - } + case 2 { mstore8(sub(resultPtr, 1), 0x3d) } } return result; diff --git a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/Panic.sol b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/Panic.sol index bfcc7216..b45e5949 100644 --- a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/Panic.sol +++ b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/Panic.sol @@ -48,7 +48,7 @@ library Panic { /// @dev Reverts with a panic code. Recommended to use with /// the internal constants with predefined codes. function panic(uint256 code) internal pure { - assembly ('memory-safe') { + assembly ("memory-safe") { mstore(0x00, 0x4e487b71) mstore(0x20, code) revert(0x1c, 0x24) diff --git a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol index 6329c913..7effccec 100644 --- a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol +++ b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol @@ -28,7 +28,7 @@ library MessageHashUtils { * See {ECDSA-recover}. */ function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) { - assembly ('memory-safe') { + assembly ("memory-safe") { mstore(0x00, '\x19Ethereum Signed Message:\n32') // 32 is the bytes-length of messageHash mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20) @@ -73,7 +73,7 @@ library MessageHashUtils { * See {ECDSA-recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) { - assembly ('memory-safe') { + assembly ("memory-safe") { let ptr := mload(0x40) mstore(ptr, hex'1901') mstore(add(ptr, 0x02), domainSeparator) diff --git a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/cryptography/P256.sol b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/cryptography/P256.sol index 73678fe8..06d5f632 100644 --- a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/cryptography/P256.sol +++ b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/cryptography/P256.sol @@ -147,7 +147,7 @@ library P256 { * In particular this function checks that x < P and y < P. */ function isValidPublicKey(bytes32 x, bytes32 y) internal pure returns (bool result) { - assembly ('memory-safe') { + assembly ("memory-safe") { let p := P let lhs := mulmod(y, y, p) // y^2 let rhs := addmod(mulmod(addmod(mulmod(x, x, p), A, p), x, p), B, p) // ((x^2 + a) * x) + b = x^3 + ax + b @@ -175,7 +175,7 @@ library P256 { if (jz == 0) return (0, 0); uint256 p = P; // cache P on the stack uint256 zinv = Math.invModPrime(jz, p); - assembly ('memory-safe') { + assembly ("memory-safe") { let zzinv := mulmod(zinv, zinv, p) ax := mulmod(jx, zzinv, p) ay := mulmod(jy, mulmod(zzinv, zinv, p), p) @@ -198,7 +198,7 @@ library P256 { pure returns (uint256 rx, uint256 ry, uint256 rz) { - assembly ('memory-safe') { + assembly ("memory-safe") { let p := P let z1 := mload(add(p1, 0x40)) let zz1 := mulmod(z1, z1, p) // zz1 = z1² @@ -214,17 +214,13 @@ library P256 { let hh := mulmod(h, h, p) // h² // x' = r²-h³-2*u1*h² - rx := addmod( - addmod(mulmod(r, r, p), sub(p, mulmod(h, hh, p)), p), - sub(p, mulmod(2, mulmod(u1, hh, p), p)), - p - ) + rx := + addmod(addmod(mulmod(r, r, p), sub(p, mulmod(h, hh, p)), p), sub(p, mulmod(2, mulmod(u1, hh, p), p)), p) // y' = r*(u1*h²-x')-s1*h³ - ry := addmod( - mulmod(r, addmod(mulmod(u1, hh, p), sub(p, rx), p), p), - sub(p, mulmod(s1, mulmod(h, hh, p), p)), - p - ) + ry := + addmod( + mulmod(r, addmod(mulmod(u1, hh, p), sub(p, rx), p), p), sub(p, mulmod(s1, mulmod(h, hh, p), p)), p + ) // z' = h*z1*z2 rz := mulmod(h, mulmod(z1, z2, p), p) } @@ -258,7 +254,7 @@ library P256 { * Reference: https://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian.html#doubling-dbl-1998-cmo-2 */ function _jDouble(uint256 x, uint256 y, uint256 z) private pure returns (uint256 rx, uint256 ry, uint256 rz) { - assembly ('memory-safe') { + assembly ("memory-safe") { let p := P let yy := mulmod(y, y, p) let zz := mulmod(z, z, p) diff --git a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/math/Math.sol b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/math/Math.sol index 3db4d891..2b041470 100644 --- a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/math/Math.sol +++ b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/math/Math.sol @@ -15,6 +15,7 @@ library Math { Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero + } /** @@ -336,7 +337,7 @@ library Math { */ function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) { if (m == 0) return (false, 0); - assembly ('memory-safe') { + assembly ("memory-safe") { let ptr := mload(0x40) // | Offset | Content | Content (Hex) | // |-----------|------------|--------------------------------------------------------------------| @@ -386,7 +387,7 @@ library Math { // Encode call args in result and move the free memory pointer result = abi.encodePacked(b.length, e.length, mLen, b, e, m); - assembly ('memory-safe') { + assembly ("memory-safe") { let dataPtr := add(result, 0x20) // Write result on top of args to avoid allocating extra memory. success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen) diff --git a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/math/SafeCast.sol b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/math/SafeCast.sol index c9b6cd3b..b1df457a 100644 --- a/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/math/SafeCast.sol +++ b/src/briefcase/protocols/lib-external/openzeppelin-contracts/contracts/utils/math/SafeCast.sol @@ -1155,7 +1155,7 @@ library SafeCast { * @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump. */ function toUint(bool b) internal pure returns (uint256 u) { - assembly ('memory-safe') { + assembly ("memory-safe") { u := iszero(iszero(b)) } } diff --git a/src/briefcase/protocols/lib-external/solady/src/utils/LibString.sol b/src/briefcase/protocols/lib-external/solady/src/utils/LibString.sol index 50add4a4..0dad0522 100644 --- a/src/briefcase/protocols/lib-external/solady/src/utils/LibString.sol +++ b/src/briefcase/protocols/lib-external/solady/src/utils/LibString.sol @@ -626,8 +626,7 @@ library LibString { assembly { result := mload(0x40) let n := 0 - for {} // Scan for '\0'. - byte(n, s) { n := add(n, 1) } {} + for {} byte(n, s) { n := add(n, 1) } {} // Scan for '\0'. mstore(result, n) // Store the length. let o := add(result, 0x20) mstore(o, s) // Store the bytes of the string. @@ -640,8 +639,7 @@ library LibString { function normalizeSmallString(bytes32 s) internal pure returns (bytes32 result) { /// @solidity memory-safe-assembly assembly { - for {} // Scan for '\0'. - byte(result, s) { result := add(result, 1) } {} + for {} byte(result, s) { result := add(result, 1) } {} // Scan for '\0'. mstore(0x00, s) mstore(result, 0x00) result := mload(0x00) @@ -837,13 +835,14 @@ library LibString { assembly { // We don't need to zero right pad the string, // since this is our own custom non-standard packing scheme. - result := mul( - // Load the length and the bytes. - mload(add(a, 0x1f)), - // `length != 0 && length < 32`. Abuses underflow. - // Assumes that the length is valid and within the block gas limit. - lt(sub(mload(a), 1), 0x1f) - ) + result := + mul( + // Load the length and the bytes. + mload(add(a, 0x1f)), + // `length != 0 && length < 32`. Abuses underflow. + // Assumes that the length is valid and within the block gas limit. + lt(sub(mload(a), 1), 0x1f) + ) } } @@ -869,15 +868,14 @@ library LibString { let aLen := mload(a) // We don't need to zero right pad the strings, // since this is our own custom non-standard packing scheme. - result := mul( - or( // Load the length and the bytes of `a` and `b`. - shl(shl(3, sub(0x1f, aLen)), mload(add(a, aLen))), - mload(sub(add(b, 0x1e), aLen)) - ), - // `totalLen != 0 && totalLen < 31`. Abuses underflow. - // Assumes that the lengths are valid and within the block gas limit. - lt(sub(add(aLen, mload(b)), 1), 0x1e) - ) + result := + mul( + or( // Load the length and the bytes of `a` and `b`. + shl(shl(3, sub(0x1f, aLen)), mload(add(a, aLen))), mload(sub(add(b, 0x1e), aLen))), + // `totalLen != 0 && totalLen < 31`. Abuses underflow. + // Assumes that the lengths are valid and within the block gas limit. + lt(sub(add(aLen, mload(b)), 1), 0x1e) + ) } } diff --git a/src/briefcase/protocols/lib-external/webauthn-sol/lib/FreshCryptoLib/solidity/src/FCL_elliptic.sol b/src/briefcase/protocols/lib-external/webauthn-sol/lib/FreshCryptoLib/solidity/src/FCL_elliptic.sol index 61fa7a4b..0bd27dae 100644 --- a/src/briefcase/protocols/lib-external/webauthn-sol/lib/FreshCryptoLib/solidity/src/FCL_elliptic.sol +++ b/src/briefcase/protocols/lib-external/webauthn-sol/lib/FreshCryptoLib/solidity/src/FCL_elliptic.sol @@ -144,7 +144,7 @@ library FCL_Elliptic_ZZ { /// @return result The modular inverse of the input integer. If the modular inverse doesn't exist, it revert the tx function SqrtMod(uint256 self) internal view returns (uint256 result) { - assembly ('memory-safe') { + assembly ("memory-safe") { // load the free memory pointer value let pointer := mload(0x40) @@ -185,10 +185,10 @@ library FCL_Elliptic_ZZ { return result; } - /** * /* @dev Convert from affine rep to XYZZ rep */ + function ecAff_SetZZ(uint256 x0, uint256 y0) internal pure returns (uint256[4] memory P) { unchecked { P[2] = 1; //ZZ @@ -215,7 +215,11 @@ library FCL_Elliptic_ZZ { * /* @dev Convert from XYZZ rep to affine rep */ /* https://hyperelliptic.org/EFD/g1p/auto-shortw-xyzz-3.html#addition-add-2008-s*/ - function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) internal view returns (uint256 x1, uint256 y1) { + function ecZZ_SetAff(uint256 x, uint256 y, uint256 zz, uint256 zzz) + internal + view + returns (uint256 x1, uint256 y1) + { uint256 zzzInv = FCL_pModInv(zzz); //1/zzz y1 = mulmod(y, zzzInv, p); //Y/zzz uint256 _b = mulmod(zz, zzzInv, p); //1/z @@ -254,7 +258,6 @@ library FCL_Elliptic_ZZ { * @dev Sutherland2008 add a ZZ point with a normalized point and greedy formulae * warning: assume that P1(x1,y1)!=P2(x2,y2), true in multiplication loop with prime order (cofactor 1) */ - function ecZZ_AddN(uint256 x1, uint256 y1, uint256 zz1, uint256 zzz1, uint256 x2, uint256 y2) internal pure @@ -288,7 +291,6 @@ library FCL_Elliptic_ZZ { function ecZZ_SetZero() internal pure returns (uint256 x, uint256 y, uint256 zz, uint256 zzz) { return (0, 0, 0, 0); } - /** * @dev Check if point is the neutral of the curve */ @@ -332,7 +334,6 @@ library FCL_Elliptic_ZZ { /** * @dev Add two elliptic curve points in affine coordinates. Deal with P=Q */ - function ecAff_add(uint256 x0, uint256 y0, uint256 x1, uint256 y1) internal view returns (uint256, uint256) { uint256 zz0; uint256 zzz0; @@ -358,11 +359,7 @@ library FCL_Elliptic_ZZ { uint256 Q1, //affine rep for input point Q uint256 scalar_u, uint256 scalar_v - ) - internal - view - returns (uint256 X) - { + ) internal view returns (uint256 X) { uint256 zz; uint256 zzz; uint256 Y; @@ -525,11 +522,7 @@ library FCL_Elliptic_ZZ { uint256 Q1, //affine rep for input point Q uint256 scalar_u, uint256 scalar_v - ) - internal - view - returns (uint256 X, uint256 Y) - { + ) internal view returns (uint256 X, uint256 Y) { uint256 zz; uint256 zzz; uint256 index = 255; @@ -681,9 +674,7 @@ library FCL_Elliptic_ZZ { function ecZZ_mulmuladd_S8_extcode(uint256 scalar_u, uint256 scalar_v, address dataPointer) internal view - returns ( - uint256 X /*, uint Y*/ - ) + returns (uint256 X /*, uint Y*/ ) { unchecked { uint256 zz; // third and coordinates of the point @@ -695,21 +686,12 @@ library FCL_Elliptic_ZZ { zz = zz - 1; //tbd case of msb octobit is null T[0] = 64 - * (128 - * ((scalar_v >> zz) & 1) - + 64 - * ((scalar_v >> (zz - 64)) & 1) - + 32 - * ((scalar_v >> (zz - 128)) & 1) - + 16 - * ((scalar_v >> (zz - 192)) & 1) - + 8 - * ((scalar_u >> zz) & 1) - + 4 - * ((scalar_u >> (zz - 64)) & 1) - + 2 - * ((scalar_u >> (zz - 128)) & 1) - + ((scalar_u >> (zz - 192)) & 1)); + * ( + 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1) + + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1) + + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1) + + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1) + ); } assembly { extcodecopy(dataPointer, T, mload(T), 64) @@ -836,9 +818,7 @@ library FCL_Elliptic_ZZ { function ecZZ_mulmuladd_S8_hackmem(uint256 scalar_u, uint256 scalar_v, uint256 dataPointer) internal view - returns ( - uint256 X /*, uint Y*/ - ) + returns (uint256 X /*, uint Y*/ ) { uint256 zz; // third and coordinates of the point @@ -850,21 +830,12 @@ library FCL_Elliptic_ZZ { zz = zz - 1; //tbd case of msb octobit is null T[0] = 64 - * (128 - * ((scalar_v >> zz) & 1) - + 64 - * ((scalar_v >> (zz - 64)) & 1) - + 32 - * ((scalar_v >> (zz - 128)) & 1) - + 16 - * ((scalar_v >> (zz - 192)) & 1) - + 8 - * ((scalar_u >> zz) & 1) - + 4 - * ((scalar_u >> (zz - 64)) & 1) - + 2 - * ((scalar_u >> (zz - 128)) & 1) - + ((scalar_u >> (zz - 192)) & 1)); + * ( + 128 * ((scalar_v >> zz) & 1) + 64 * ((scalar_v >> (zz - 64)) & 1) + + 32 * ((scalar_v >> (zz - 128)) & 1) + 16 * ((scalar_v >> (zz - 192)) & 1) + + 8 * ((scalar_u >> zz) & 1) + 4 * ((scalar_u >> (zz - 64)) & 1) + + 2 * ((scalar_u >> (zz - 128)) & 1) + ((scalar_u >> (zz - 192)) & 1) + ); } assembly { codecopy(T, add(mload(T), dataPointer), 64) @@ -958,7 +929,6 @@ library FCL_Elliptic_ZZ { * generation of contract bytecode for precomputations is done using sagemath code * (see sage directory, WebAuthn_precompute.sage) */ - function ecdsa_precomputed_hackmem(bytes32 message, uint256[2] calldata rs, uint256 endcontract) internal view @@ -985,4 +955,4 @@ library FCL_Elliptic_ZZ { } return X == 0; } //end ecdsa_precomputed_verify() -} //EOF +} diff --git a/src/briefcase/protocols/lib-external/webauthn-sol/lib/openzeppelin-contracts/contracts/utils/Base64.sol b/src/briefcase/protocols/lib-external/webauthn-sol/lib/openzeppelin-contracts/contracts/utils/Base64.sol index 9415c139..e6936440 100644 --- a/src/briefcase/protocols/lib-external/webauthn-sol/lib/openzeppelin-contracts/contracts/utils/Base64.sol +++ b/src/briefcase/protocols/lib-external/webauthn-sol/lib/openzeppelin-contracts/contracts/utils/Base64.sol @@ -105,9 +105,7 @@ library Base64 { mstore8(sub(resultPtr, 1), 0x3d) mstore8(sub(resultPtr, 2), 0x3d) } - case 2 { - mstore8(sub(resultPtr, 1), 0x3d) - } + case 2 { mstore8(sub(resultPtr, 1), 0x3d) } } } diff --git a/src/briefcase/protocols/lib-external/webauthn-sol/src/WebAuthn.sol b/src/briefcase/protocols/lib-external/webauthn-sol/src/WebAuthn.sol index 65304ccd..0f6039c2 100644 --- a/src/briefcase/protocols/lib-external/webauthn-sol/src/WebAuthn.sol +++ b/src/briefcase/protocols/lib-external/webauthn-sol/src/WebAuthn.sol @@ -112,8 +112,9 @@ library WebAuthn { // 12. Verify that the value of C.challenge equals the base64url encoding of options.challenge. bytes memory expectedChallenge = bytes(string.concat('"challenge":"', Base64.encodeURL(challenge), '"')); - string memory actualChallenge = webAuthnAuth.clientDataJSON - .slice(webAuthnAuth.challengeIndex, webAuthnAuth.challengeIndex + expectedChallenge.length); + string memory actualChallenge = webAuthnAuth.clientDataJSON.slice( + webAuthnAuth.challengeIndex, webAuthnAuth.challengeIndex + expectedChallenge.length + ); if (keccak256(bytes(actualChallenge)) != keccak256(expectedChallenge)) { return false; } diff --git a/src/briefcase/protocols/mixed-quoter/libraries/Path.sol b/src/briefcase/protocols/mixed-quoter/libraries/Path.sol index 3460e4f9..09622993 100644 --- a/src/briefcase/protocols/mixed-quoter/libraries/Path.sol +++ b/src/briefcase/protocols/mixed-quoter/libraries/Path.sol @@ -37,7 +37,11 @@ library Path { /// @return tokenA The first token of the given pool /// @return fee The fee level of the pool /// @return tokenB The second token of the given pool - function decodeFirstV3Pool(bytes calldata path) internal pure returns (address tokenA, uint24 fee, address tokenB) { + function decodeFirstV3Pool(bytes calldata path) + internal + pure + returns (address tokenA, uint24 fee, address tokenB) + { // calls the function in V3Path library (tokenA, fee, tokenB) = path.decodeFirstPool(); fee = (fee << Constants.FEE_SHIFT) >> Constants.FEE_SHIFT; @@ -80,7 +84,11 @@ library Path { Currency currency0 = Currency.wrap(token0); Currency currency1 = Currency.wrap(token1); return PoolKey({ - currency0: currency0, currency1: currency1, fee: fee, tickSpacing: int24(tickSpacing), hooks: IHooks(hooks) + currency0: currency0, + currency1: currency1, + fee: fee, + tickSpacing: int24(tickSpacing), + hooks: IHooks(hooks) }); } diff --git a/src/briefcase/protocols/permit2/interfaces/IPermit2.sol b/src/briefcase/protocols/permit2/interfaces/IPermit2.sol index 13bb8265..035cc187 100644 --- a/src/briefcase/protocols/permit2/interfaces/IPermit2.sol +++ b/src/briefcase/protocols/permit2/interfaces/IPermit2.sol @@ -7,6 +7,5 @@ import {ISignatureTransfer} from './ISignatureTransfer.sol'; /// @notice Permit2 handles signature-based transfers in SignatureTransfer and allowance-based transfers in AllowanceTransfer. /// @dev Users must approve Permit2 before calling any of the transfer functions. interface IPermit2 is ISignatureTransfer, IAllowanceTransfer { - // IPermit2 unifies the two interfaces so users have maximal flexibility with their approval. - - } +// IPermit2 unifies the two interfaces so users have maximal flexibility with their approval. +} diff --git a/src/briefcase/protocols/permit2/libraries/Permit2Lib.sol b/src/briefcase/protocols/permit2/libraries/Permit2Lib.sol index 34553a3b..1e30b654 100644 --- a/src/briefcase/protocols/permit2/libraries/Permit2Lib.sol +++ b/src/briefcase/protocols/permit2/libraries/Permit2Lib.sol @@ -36,15 +36,16 @@ library Permit2Lib { bool success; // Call the token contract as normal, capturing whether it succeeded. assembly { - success := and( - // Set success to whether the call reverted, if not we check it either - // returned exactly 1 (can't just be non-zero data), or had no return data. - or(eq(mload(0), 1), iszero(returndatasize())), - // Counterintuitively, this call() must be positioned after the or() in the - // surrounding and() because and() evaluates its arguments from right to left. - // We use 0 and 32 to copy up to 32 bytes of return data into the first slot of scratch space. - call(gas(), token, 0, add(inputData, 32), mload(inputData), 0, 32) - ) + success := + and( + // Set success to whether the call reverted, if not we check it either + // returned exactly 1 (can't just be non-zero data), or had no return data. + or(eq(mload(0), 1), iszero(returndatasize())), + // Counterintuitively, this call() must be positioned after the or() in the + // surrounding and() because and() evaluates its arguments from right to left. + // We use 0 and 32 to copy up to 32 bytes of return data into the first slot of scratch space. + call(gas(), token, 0, add(inputData, 32), mload(inputData), 0, 32) + ) } // We'll fall back to using Permit2 if calling transferFrom on the token directly reverted. @@ -86,16 +87,17 @@ library Permit2Lib { // If the token is WETH9, we know it doesn't have a DOMAIN_SEPARATOR, and we'll skip this step. // We make sure to mask the token address as its higher order bits aren't guaranteed to be clean. if iszero(eq(and(token, 0xffffffffffffffffffffffffffffffffffffffff), WETH9_ADDRESS)) { - success := and( - // Should resolve false if its not 32 bytes or its first word is 0. - and(iszero(iszero(mload(0))), eq(returndatasize(), 32)), - // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. - // Counterintuitively, this call must be positioned second to the and() call in the - // surrounding and() call or else returndatasize() will be zero during the computation. - // We send a maximum of 5000 gas to prevent tokens with fallbacks from using a ton of gas. - // which should be plenty to allow tokens to fetch their DOMAIN_SEPARATOR from storage, etc. - staticcall(5000, token, add(inputData, 32), mload(inputData), 0, 32) - ) + success := + and( + // Should resolve false if its not 32 bytes or its first word is 0. + and(iszero(iszero(mload(0))), eq(returndatasize(), 32)), + // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. + // Counterintuitively, this call must be positioned second to the and() call in the + // surrounding and() call or else returndatasize() will be zero during the computation. + // We send a maximum of 5000 gas to prevent tokens with fallbacks from using a ton of gas. + // which should be plenty to allow tokens to fetch their DOMAIN_SEPARATOR from storage, etc. + staticcall(5000, token, add(inputData, 32), mload(inputData), 0, 32) + ) domainSeparator := mload(0) // Copy the return value into the domainSeparator variable. } diff --git a/src/briefcase/protocols/permit2/libraries/PermitHash.sol b/src/briefcase/protocols/permit2/libraries/PermitHash.sol index 22ce4c59..ee21f1ea 100644 --- a/src/briefcase/protocols/permit2/libraries/PermitHash.sol +++ b/src/briefcase/protocols/permit2/libraries/PermitHash.sol @@ -98,9 +98,8 @@ library PermitHash { bytes32 witness, string calldata witnessTypeString ) internal view returns (bytes32) { - bytes32 typeHash = keccak256( - abi.encodePacked(_PERMIT_BATCH_WITNESS_TRANSFER_FROM_TYPEHASH_STUB, witnessTypeString) - ); + bytes32 typeHash = + keccak256(abi.encodePacked(_PERMIT_BATCH_WITNESS_TRANSFER_FROM_TYPEHASH_STUB, witnessTypeString)); uint256 numPermitted = permit.permitted.length; bytes32[] memory tokenPermissionHashes = new bytes32[](numPermitted); diff --git a/src/briefcase/protocols/swap-router-contracts/interfaces/IApproveAndCall.sol b/src/briefcase/protocols/swap-router-contracts/interfaces/IApproveAndCall.sol index baee8891..9d565c58 100644 --- a/src/briefcase/protocols/swap-router-contracts/interfaces/IApproveAndCall.sol +++ b/src/briefcase/protocols/swap-router-contracts/interfaces/IApproveAndCall.sol @@ -65,5 +65,8 @@ interface IApproveAndCall { /// @notice Calls the position manager's increaseLiquidity function /// @param params Calldata to pass along to the position manager /// @return result The result from the call - function increaseLiquidity(IncreaseLiquidityParams calldata params) external payable returns (bytes memory result); + function increaseLiquidity(IncreaseLiquidityParams calldata params) + external + payable + returns (bytes memory result); } diff --git a/src/briefcase/protocols/swap-router-contracts/interfaces/IMixedRouteQuoterV1.sol b/src/briefcase/protocols/swap-router-contracts/interfaces/IMixedRouteQuoterV1.sol index f8c2065b..2c640f9a 100644 --- a/src/briefcase/protocols/swap-router-contracts/interfaces/IMixedRouteQuoterV1.sol +++ b/src/briefcase/protocols/swap-router-contracts/interfaces/IMixedRouteQuoterV1.sol @@ -59,7 +59,9 @@ interface IMixedRouteQuoterV1 { /// tokenOut The token being swapped out /// amountIn The desired input amount /// @return amountOut The amount of `tokenOut` that would be received - function quoteExactInputSingleV2(QuoteExactInputSingleV2Params memory params) external returns (uint256 amountOut); + function quoteExactInputSingleV2(QuoteExactInputSingleV2Params memory params) + external + returns (uint256 amountOut); /// @dev ExactOutput swaps are not supported by this new Quoter which is specialized for supporting routes /// crossing both V2 liquidity pairs and V3 pools. diff --git a/src/briefcase/protocols/universal-router/libraries/Locker.sol b/src/briefcase/protocols/universal-router/libraries/Locker.sol index 9415e2f1..aa506545 100644 --- a/src/briefcase/protocols/universal-router/libraries/Locker.sol +++ b/src/briefcase/protocols/universal-router/libraries/Locker.sol @@ -10,13 +10,13 @@ library Locker { function set(address locker) internal { // The locker is always msg.sender or address(0) so does not need to be cleaned - assembly ('memory-safe') { + assembly ("memory-safe") { tstore(LOCKER_SLOT, locker) } } function get() internal view returns (address locker) { - assembly ('memory-safe') { + assembly ("memory-safe") { locker := tload(LOCKER_SLOT) } } diff --git a/src/briefcase/protocols/universal-router/libraries/MaxInputAmount.sol b/src/briefcase/protocols/universal-router/libraries/MaxInputAmount.sol index 37c5f343..ea99e4df 100644 --- a/src/briefcase/protocols/universal-router/libraries/MaxInputAmount.sol +++ b/src/briefcase/protocols/universal-router/libraries/MaxInputAmount.sol @@ -7,13 +7,13 @@ library MaxInputAmount { bytes32 constant MAX_AMOUNT_IN_SLOT = 0xaf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f692; function set(uint256 maxAmountIn) internal { - assembly ('memory-safe') { + assembly ("memory-safe") { tstore(MAX_AMOUNT_IN_SLOT, maxAmountIn) } } function get() internal view returns (uint256 maxAmountIn) { - assembly ('memory-safe') { + assembly ("memory-safe") { maxAmountIn := tload(MAX_AMOUNT_IN_SLOT) } } diff --git a/src/briefcase/protocols/util-contracts/external/IPermit2.sol b/src/briefcase/protocols/util-contracts/external/IPermit2.sol index 46b490df..d2dd1a0d 100644 --- a/src/briefcase/protocols/util-contracts/external/IPermit2.sol +++ b/src/briefcase/protocols/util-contracts/external/IPermit2.sol @@ -6,6 +6,5 @@ import {IAllowanceTransfer} from './IAllowanceTransfer.sol'; /// @notice Permit2 handles signature-based transfers in SignatureTransfer and allowance-based transfers in AllowanceTransfer. /// @dev Users must approve Permit2 before calling any of the transfer functions. interface IPermit2 is IAllowanceTransfer { - // IPermit2 unifies the two interfaces so users have maximal flexibility with their approval. - - } +// IPermit2 unifies the two interfaces so users have maximal flexibility with their approval. +} diff --git a/src/briefcase/protocols/v2-periphery/interfaces/IUniswapV2Migrator.sol b/src/briefcase/protocols/v2-periphery/interfaces/IUniswapV2Migrator.sol index 1ee71419..7e8d8251 100644 --- a/src/briefcase/protocols/v2-periphery/interfaces/IUniswapV2Migrator.sol +++ b/src/briefcase/protocols/v2-periphery/interfaces/IUniswapV2Migrator.sol @@ -1,5 +1,6 @@ pragma solidity >=0.5.0; interface IUniswapV2Migrator { - function migrate(address token, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external; + function migrate(address token, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) + external; } diff --git a/src/briefcase/protocols/v2-periphery/interfaces/IUniswapV2Router01.sol b/src/briefcase/protocols/v2-periphery/interfaces/IUniswapV2Router01.sol index ceacabfd..805ac43f 100644 --- a/src/briefcase/protocols/v2-periphery/interfaces/IUniswapV2Router01.sol +++ b/src/briefcase/protocols/v2-periphery/interfaces/IUniswapV2Router01.sol @@ -110,6 +110,12 @@ interface IUniswapV2Router01 { external pure returns (uint256 amountIn); - function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); - function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); + function getAmountsOut(uint256 amountIn, address[] calldata path) + external + view + returns (uint256[] memory amounts); + function getAmountsIn(uint256 amountOut, address[] calldata path) + external + view + returns (uint256[] memory amounts); } diff --git a/src/briefcase/protocols/v3-core/interfaces/pool/IUniswapV3PoolActions.sol b/src/briefcase/protocols/v3-core/interfaces/pool/IUniswapV3PoolActions.sol index 7c5d49ca..101ca93d 100644 --- a/src/briefcase/protocols/v3-core/interfaces/pool/IUniswapV3PoolActions.sol +++ b/src/briefcase/protocols/v3-core/interfaces/pool/IUniswapV3PoolActions.sol @@ -52,7 +52,9 @@ interface IUniswapV3PoolActions { /// @param amount How much liquidity to burn /// @return amount0 The amount of token0 sent to the recipient /// @return amount1 The amount of token1 sent to the recipient - function burn(int24 tickLower, int24 tickUpper, uint128 amount) external returns (uint256 amount0, uint256 amount1); + function burn(int24 tickLower, int24 tickUpper, uint128 amount) + external + returns (uint256 amount0, uint256 amount1); /// @notice Swap token0 for token1, or token1 for token0 /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback diff --git a/src/briefcase/protocols/v3-core/libraries/Oracle.sol b/src/briefcase/protocols/v3-core/libraries/Oracle.sol index da9ecccf..602db057 100644 --- a/src/briefcase/protocols/v3-core/libraries/Oracle.sol +++ b/src/briefcase/protocols/v3-core/libraries/Oracle.sol @@ -52,7 +52,10 @@ library Oracle { returns (uint16 cardinality, uint16 cardinalityNext) { self[0] = Observation({ - blockTimestamp: time, tickCumulative: 0, secondsPerLiquidityCumulativeX128: 0, initialized: true + blockTimestamp: time, + tickCumulative: 0, + secondsPerLiquidityCumulativeX128: 0, + initialized: true }); return (1, 1); } @@ -266,11 +269,11 @@ library Oracle { + ((atOrAfter.tickCumulative - beforeOrAt.tickCumulative) / observationTimeDelta) * targetDelta, beforeOrAt.secondsPerLiquidityCumulativeX128 + uint160( - (uint256( - atOrAfter.secondsPerLiquidityCumulativeX128 - - beforeOrAt.secondsPerLiquidityCumulativeX128 - ) - * targetDelta) / observationTimeDelta + ( + uint256( + atOrAfter.secondsPerLiquidityCumulativeX128 - beforeOrAt.secondsPerLiquidityCumulativeX128 + ) * targetDelta + ) / observationTimeDelta ) ); } diff --git a/src/briefcase/protocols/v3-core/libraries/SqrtPriceMath.sol b/src/briefcase/protocols/v3-core/libraries/SqrtPriceMath.sol index 92fc48b9..901bd840 100644 --- a/src/briefcase/protocols/v3-core/libraries/SqrtPriceMath.sol +++ b/src/briefcase/protocols/v3-core/libraries/SqrtPriceMath.sol @@ -37,10 +37,8 @@ library SqrtPriceMath { uint256 product; if ((product = amount * sqrtPX96) / amount == sqrtPX96) { uint256 denominator = numerator1 + product; - if ( - denominator >= numerator1 + if (denominator >= numerator1) { // always fits in 160 bits - ) { return uint160(FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator)); } } @@ -74,15 +72,19 @@ library SqrtPriceMath { // if we're adding (subtracting), rounding down requires rounding the quotient down (up) // in both cases, avoid a mulDiv for most inputs if (add) { - uint256 quotient = (amount <= type(uint160).max + uint256 quotient = ( + amount <= type(uint160).max ? (amount << FixedPoint96.RESOLUTION) / liquidity - : FullMath.mulDiv(amount, FixedPoint96.Q96, liquidity)); + : FullMath.mulDiv(amount, FixedPoint96.Q96, liquidity) + ); return uint256(sqrtPX96).add(quotient).toUint160(); } else { - uint256 quotient = (amount <= type(uint160).max + uint256 quotient = ( + amount <= type(uint160).max ? UnsafeMath.divRoundingUp(amount << FixedPoint96.RESOLUTION, liquidity) - : FullMath.mulDivRoundingUp(amount, FixedPoint96.Q96, liquidity)); + : FullMath.mulDivRoundingUp(amount, FixedPoint96.Q96, liquidity) + ); require(sqrtPX96 > quotient); // always fits 160 bits diff --git a/src/briefcase/protocols/v3-periphery/interfaces/IERC721Permit.sol b/src/briefcase/protocols/v3-periphery/interfaces/IERC721Permit.sol index ad8236ea..71771388 100644 --- a/src/briefcase/protocols/v3-periphery/interfaces/IERC721Permit.sol +++ b/src/briefcase/protocols/v3-periphery/interfaces/IERC721Permit.sol @@ -21,5 +21,7 @@ interface IERC721Permit is IERC721 { /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s` /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s` /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v` - function permit(address spender, uint256 tokenId, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external payable; + function permit(address spender, uint256 tokenId, uint256 deadline, uint8 v, bytes32 r, bytes32 s) + external + payable; } diff --git a/src/briefcase/protocols/v3-periphery/interfaces/ISelfPermit.sol b/src/briefcase/protocols/v3-periphery/interfaces/ISelfPermit.sol index 3f792f7d..a7204219 100644 --- a/src/briefcase/protocols/v3-periphery/interfaces/ISelfPermit.sol +++ b/src/briefcase/protocols/v3-periphery/interfaces/ISelfPermit.sol @@ -12,7 +12,9 @@ interface ISelfPermit { /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s` /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s` /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v` - function selfPermit(address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external payable; + function selfPermit(address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) + external + payable; /// @notice Permits this contract to spend a given token from `msg.sender` /// @dev The `owner` is always msg.sender and the `spender` is always address(this). diff --git a/src/briefcase/protocols/v3-periphery/libraries/BytesLib.sol b/src/briefcase/protocols/v3-periphery/libraries/BytesLib.sol index 2a7682db..3ea23db0 100644 --- a/src/briefcase/protocols/v3-periphery/libraries/BytesLib.sol +++ b/src/briefcase/protocols/v3-periphery/libraries/BytesLib.sol @@ -48,9 +48,7 @@ library BytesLib { } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) - } { - mstore(mc, mload(cc)) - } + } { mstore(mc, mload(cc)) } mstore(tempBytes, _length) diff --git a/src/briefcase/protocols/v3-periphery/libraries/LiquidityAmounts.sol b/src/briefcase/protocols/v3-periphery/libraries/LiquidityAmounts.sol index c91ee764..059764f2 100644 --- a/src/briefcase/protocols/v3-periphery/libraries/LiquidityAmounts.sol +++ b/src/briefcase/protocols/v3-periphery/libraries/LiquidityAmounts.sol @@ -60,9 +60,7 @@ library LiquidityAmounts { uint256 amount0, uint256 amount1 ) internal pure returns (uint128 liquidity) { - if (sqrtRatioAX96 > sqrtRatioBX96) { - (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); - } + if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); if (sqrtRatioX96 <= sqrtRatioAX96) { liquidity = getLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0); @@ -122,9 +120,7 @@ library LiquidityAmounts { uint160 sqrtRatioBX96, uint128 liquidity ) internal pure returns (uint256 amount0, uint256 amount1) { - if (sqrtRatioAX96 > sqrtRatioBX96) { - (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); - } + if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); if (sqrtRatioX96 <= sqrtRatioAX96) { amount0 = getAmount0ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity); diff --git a/src/briefcase/protocols/v3-periphery/libraries/NFTSVG.sol b/src/briefcase/protocols/v3-periphery/libraries/NFTSVG.sol index d0eba6fa..1baeef71 100644 --- a/src/briefcase/protocols/v3-periphery/libraries/NFTSVG.sol +++ b/src/briefcase/protocols/v3-periphery/libraries/NFTSVG.sol @@ -183,11 +183,11 @@ library NFTSVG { ); } - function generateSVGCardMantle( - string memory quoteTokenSymbol, - string memory baseTokenSymbol, - string memory feeTier - ) private pure returns (string memory svg) { + function generateSVGCardMantle(string memory quoteTokenSymbol, string memory baseTokenSymbol, string memory feeTier) + private + pure + returns (string memory svg) + { svg = string( abi.encodePacked( ' ', @@ -231,7 +231,11 @@ library NFTSVG { ); } - function getCurve(int24 tickLower, int24 tickUpper, int24 tickSpacing) internal pure returns (string memory curve) { + function getCurve(int24 tickLower, int24 tickUpper, int24 tickSpacing) + internal + pure + returns (string memory curve) + { int24 tickRange = (tickUpper - tickLower) / tickSpacing; if (tickRange <= 4) { curve = curve1; diff --git a/src/briefcase/protocols/v3-periphery/libraries/PositionValue.sol b/src/briefcase/protocols/v3-periphery/libraries/PositionValue.sol index 6a2eb125..b2596398 100644 --- a/src/briefcase/protocols/v3-periphery/libraries/PositionValue.sol +++ b/src/briefcase/protocols/v3-periphery/libraries/PositionValue.sol @@ -71,7 +71,8 @@ library PositionValue { returns (uint256 amount0, uint256 amount1) { ( - ,, + , + , address token0, address token1, uint24 fee, @@ -117,19 +118,17 @@ library PositionValue { feeParams.tickUpper ); - amount0 = - FullMath.mulDiv( - poolFeeGrowthInside0LastX128 - feeParams.positionFeeGrowthInside0LastX128, - feeParams.liquidity, - FixedPoint128.Q128 - ) + feeParams.tokensOwed0; + amount0 = FullMath.mulDiv( + poolFeeGrowthInside0LastX128 - feeParams.positionFeeGrowthInside0LastX128, + feeParams.liquidity, + FixedPoint128.Q128 + ) + feeParams.tokensOwed0; - amount1 = - FullMath.mulDiv( - poolFeeGrowthInside1LastX128 - feeParams.positionFeeGrowthInside1LastX128, - feeParams.liquidity, - FixedPoint128.Q128 - ) + feeParams.tokensOwed1; + amount1 = FullMath.mulDiv( + poolFeeGrowthInside1LastX128 - feeParams.positionFeeGrowthInside1LastX128, + feeParams.liquidity, + FixedPoint128.Q128 + ) + feeParams.tokensOwed1; } function _getFeeGrowthInside(IUniswapV3Pool pool, int24 tickLower, int24 tickUpper) diff --git a/src/briefcase/protocols/v4-core/libraries/BitMath.sol b/src/briefcase/protocols/v4-core/libraries/BitMath.sol index 632cea4b..6c20495b 100644 --- a/src/briefcase/protocols/v4-core/libraries/BitMath.sol +++ b/src/briefcase/protocols/v4-core/libraries/BitMath.sol @@ -12,7 +12,7 @@ library BitMath { function mostSignificantBit(uint256 x) internal pure returns (uint8 r) { require(x > 0); - assembly ('memory-safe') { + assembly ("memory-safe") { r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x)) r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x)))) r := or(r, shl(5, lt(0xffffffff, shr(r, x)))) @@ -31,7 +31,7 @@ library BitMath { function leastSignificantBit(uint256 x) internal pure returns (uint8 r) { require(x > 0); - assembly ('memory-safe') { + assembly ("memory-safe") { // Isolate the least significant bit. x := and(x, sub(0, x)) // For the upper 3 bits of the result, use a De Bruijn-like lookup. diff --git a/src/briefcase/protocols/v4-core/libraries/CurrencyDelta.sol b/src/briefcase/protocols/v4-core/libraries/CurrencyDelta.sol index 19efd180..2c037463 100644 --- a/src/briefcase/protocols/v4-core/libraries/CurrencyDelta.sol +++ b/src/briefcase/protocols/v4-core/libraries/CurrencyDelta.sol @@ -8,7 +8,7 @@ import {Currency} from '../types/Currency.sol'; library CurrencyDelta { /// @notice calculates which storage slot a delta should be stored in for a given account and currency function _computeSlot(address target, Currency currency) internal pure returns (bytes32 hashSlot) { - assembly ('memory-safe') { + assembly ("memory-safe") { mstore(0, and(target, 0xffffffffffffffffffffffffffffffffffffffff)) mstore(32, and(currency, 0xffffffffffffffffffffffffffffffffffffffff)) hashSlot := keccak256(0, 64) @@ -17,7 +17,7 @@ library CurrencyDelta { function getDelta(Currency currency, address target) internal view returns (int256 delta) { bytes32 hashSlot = _computeSlot(target, currency); - assembly ('memory-safe') { + assembly ("memory-safe") { delta := tload(hashSlot) } } @@ -31,11 +31,11 @@ library CurrencyDelta { { bytes32 hashSlot = _computeSlot(target, currency); - assembly ('memory-safe') { + assembly ("memory-safe") { previous := tload(hashSlot) } next = previous + delta; - assembly ('memory-safe') { + assembly ("memory-safe") { tstore(hashSlot, next) } } diff --git a/src/briefcase/protocols/v4-core/libraries/CurrencyReserves.sol b/src/briefcase/protocols/v4-core/libraries/CurrencyReserves.sol index 8dc88572..409d85d1 100644 --- a/src/briefcase/protocols/v4-core/libraries/CurrencyReserves.sol +++ b/src/briefcase/protocols/v4-core/libraries/CurrencyReserves.sol @@ -13,26 +13,26 @@ library CurrencyReserves { bytes32 constant CURRENCY_SLOT = 0x27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b9; function getSyncedCurrency() internal view returns (Currency currency) { - assembly ('memory-safe') { + assembly ("memory-safe") { currency := tload(CURRENCY_SLOT) } } function resetCurrency() internal { - assembly ('memory-safe') { + assembly ("memory-safe") { tstore(CURRENCY_SLOT, 0) } } function syncCurrencyAndReserves(Currency currency, uint256 value) internal { - assembly ('memory-safe') { + assembly ("memory-safe") { tstore(CURRENCY_SLOT, and(currency, 0xffffffffffffffffffffffffffffffffffffffff)) tstore(RESERVES_OF_SLOT, value) } } function getSyncedReserves() internal view returns (uint256 value) { - assembly ('memory-safe') { + assembly ("memory-safe") { value := tload(RESERVES_OF_SLOT) } } diff --git a/src/briefcase/protocols/v4-core/libraries/CustomRevert.sol b/src/briefcase/protocols/v4-core/libraries/CustomRevert.sol index 65398110..5d707330 100644 --- a/src/briefcase/protocols/v4-core/libraries/CustomRevert.sol +++ b/src/briefcase/protocols/v4-core/libraries/CustomRevert.sol @@ -12,7 +12,7 @@ library CustomRevert { /// @dev Reverts with the selector of a custom error in the scratch space function revertWith(bytes4 selector) internal pure { - assembly ('memory-safe') { + assembly ("memory-safe") { mstore(0, selector) revert(0, 0x04) } @@ -20,7 +20,7 @@ library CustomRevert { /// @dev Reverts with a custom error with an address argument in the scratch space function revertWith(bytes4 selector, address addr) internal pure { - assembly ('memory-safe') { + assembly ("memory-safe") { mstore(0, selector) mstore(0x04, and(addr, 0xffffffffffffffffffffffffffffffffffffffff)) revert(0, 0x24) @@ -29,7 +29,7 @@ library CustomRevert { /// @dev Reverts with a custom error with an int24 argument in the scratch space function revertWith(bytes4 selector, int24 value) internal pure { - assembly ('memory-safe') { + assembly ("memory-safe") { mstore(0, selector) mstore(0x04, signextend(2, value)) revert(0, 0x24) @@ -38,7 +38,7 @@ library CustomRevert { /// @dev Reverts with a custom error with a uint160 argument in the scratch space function revertWith(bytes4 selector, uint160 value) internal pure { - assembly ('memory-safe') { + assembly ("memory-safe") { mstore(0, selector) mstore(0x04, and(value, 0xffffffffffffffffffffffffffffffffffffffff)) revert(0, 0x24) @@ -47,7 +47,7 @@ library CustomRevert { /// @dev Reverts with a custom error with two int24 arguments function revertWith(bytes4 selector, int24 value1, int24 value2) internal pure { - assembly ('memory-safe') { + assembly ("memory-safe") { let fmp := mload(0x40) mstore(fmp, selector) mstore(add(fmp, 0x04), signextend(2, value1)) @@ -58,7 +58,7 @@ library CustomRevert { /// @dev Reverts with a custom error with two uint160 arguments function revertWith(bytes4 selector, uint160 value1, uint160 value2) internal pure { - assembly ('memory-safe') { + assembly ("memory-safe") { let fmp := mload(0x40) mstore(fmp, selector) mstore(add(fmp, 0x04), and(value1, 0xffffffffffffffffffffffffffffffffffffffff)) @@ -69,7 +69,7 @@ library CustomRevert { /// @dev Reverts with a custom error with two address arguments function revertWith(bytes4 selector, address value1, address value2) internal pure { - assembly ('memory-safe') { + assembly ("memory-safe") { let fmp := mload(0x40) mstore(fmp, selector) mstore(add(fmp, 0x04), and(value1, 0xffffffffffffffffffffffffffffffffffffffff)) @@ -86,7 +86,7 @@ library CustomRevert { bytes4 additionalContext ) internal pure { bytes4 wrappedErrorSelector = WrappedError.selector; - assembly ('memory-safe') { + assembly ("memory-safe") { // Ensure the size of the revert data is a multiple of 32 bytes let encodedDataSize := mul(div(add(returndatasize(), 31), 32), 32) diff --git a/src/briefcase/protocols/v4-core/libraries/FullMath.sol b/src/briefcase/protocols/v4-core/libraries/FullMath.sol index e06e3185..2dc13788 100644 --- a/src/briefcase/protocols/v4-core/libraries/FullMath.sol +++ b/src/briefcase/protocols/v4-core/libraries/FullMath.sol @@ -20,7 +20,7 @@ library FullMath { // variables such that product = prod1 * 2**256 + prod0 uint256 prod0 = a * b; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product - assembly ('memory-safe') { + assembly ("memory-safe") { let mm := mulmod(a, b, not(0)) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } @@ -31,7 +31,7 @@ library FullMath { // Handle non-overflow cases, 256 by 256 division if (prod1 == 0) { - assembly ('memory-safe') { + assembly ("memory-safe") { result := div(prod0, denominator) } return result; @@ -44,11 +44,11 @@ library FullMath { // Make division exact by subtracting the remainder from [prod1 prod0] // Compute remainder using mulmod uint256 remainder; - assembly ('memory-safe') { + assembly ("memory-safe") { remainder := mulmod(a, b, denominator) } // Subtract 256 bit number from 512 bit number - assembly ('memory-safe') { + assembly ("memory-safe") { prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } @@ -58,18 +58,18 @@ library FullMath { // Always >= 1. uint256 twos = (0 - denominator) & denominator; // Divide denominator by power of two - assembly ('memory-safe') { + assembly ("memory-safe") { denominator := div(denominator, twos) } // Divide [prod1 prod0] by the factors of two - assembly ('memory-safe') { + assembly ("memory-safe") { prod0 := div(prod0, twos) } // Shift in bits from prod1 into prod0. For this we need // to flip `twos` such that it is 2**256 / twos. // If twos is zero, then it becomes one - assembly ('memory-safe') { + assembly ("memory-safe") { twos := add(div(sub(0, twos), twos), 1) } prod0 |= prod1 * twos; diff --git a/src/briefcase/protocols/v4-core/libraries/Hooks.sol b/src/briefcase/protocols/v4-core/libraries/Hooks.sol index 6bad02d6..30c105e2 100644 --- a/src/briefcase/protocols/v4-core/libraries/Hooks.sol +++ b/src/briefcase/protocols/v4-core/libraries/Hooks.sol @@ -93,8 +93,7 @@ library Hooks { || permissions.afterDonate != self.hasPermission(AFTER_DONATE_FLAG) || permissions.beforeSwapReturnDelta != self.hasPermission(BEFORE_SWAP_RETURNS_DELTA_FLAG) || permissions.afterSwapReturnDelta != self.hasPermission(AFTER_SWAP_RETURNS_DELTA_FLAG) - || permissions.afterAddLiquidityReturnDelta - != self.hasPermission(AFTER_ADD_LIQUIDITY_RETURNS_DELTA_FLAG) + || permissions.afterAddLiquidityReturnDelta != self.hasPermission(AFTER_ADD_LIQUIDITY_RETURNS_DELTA_FLAG) || permissions.afterRemoveLiquidityReturnDelta != self.hasPermission(AFTER_REMOVE_LIQUIDITY_RETURNS_DELTA_FLAG) ) { @@ -130,14 +129,14 @@ library Hooks { /// @return result The complete data returned by the hook function callHook(IHooks self, bytes memory data) internal returns (bytes memory result) { bool success; - assembly ('memory-safe') { + assembly ("memory-safe") { success := call(gas(), self, 0, add(data, 0x20), mload(data), 0, 0) } // Revert with FailedHookCall, containing any error message to bubble up if (!success) CustomRevert.bubbleUpAndRevertWith(address(self), bytes4(data), HookCallFailed.selector); // The call was successful, fetch the returned data - assembly ('memory-safe') { + assembly ("memory-safe") { // allocate result byte array from the free memory pointer result := mload(0x40) // store new free memory pointer at the end of the array padded to 32 bytes @@ -290,18 +289,16 @@ library Hooks { bytes calldata hookData, BeforeSwapDelta beforeSwapHookReturn ) internal returns (BalanceDelta, BalanceDelta) { - if (msg.sender == address(self)) { - return (swapDelta, BalanceDeltaLibrary.ZERO_DELTA); - } + if (msg.sender == address(self)) return (swapDelta, BalanceDeltaLibrary.ZERO_DELTA); int128 hookDeltaSpecified = beforeSwapHookReturn.getSpecifiedDelta(); int128 hookDeltaUnspecified = beforeSwapHookReturn.getUnspecifiedDelta(); if (self.hasPermission(AFTER_SWAP_FLAG)) { hookDeltaUnspecified += self.callHookWithReturnDelta( - abi.encodeCall(IHooks.afterSwap, (msg.sender, key, params, swapDelta, hookData)), - self.hasPermission(AFTER_SWAP_RETURNS_DELTA_FLAG) - ).toInt128(); + abi.encodeCall(IHooks.afterSwap, (msg.sender, key, params, swapDelta, hookData)), + self.hasPermission(AFTER_SWAP_RETURNS_DELTA_FLAG) + ).toInt128(); } BalanceDelta hookDelta; diff --git a/src/briefcase/protocols/v4-core/libraries/LiquidityMath.sol b/src/briefcase/protocols/v4-core/libraries/LiquidityMath.sol index 478ed946..ce5cfcd4 100644 --- a/src/briefcase/protocols/v4-core/libraries/LiquidityMath.sol +++ b/src/briefcase/protocols/v4-core/libraries/LiquidityMath.sol @@ -8,7 +8,7 @@ library LiquidityMath { /// @param y The delta by which liquidity should be changed /// @return z The liquidity delta function addDelta(uint128 x, int128 y) internal pure returns (uint128 z) { - assembly ('memory-safe') { + assembly ("memory-safe") { z := add(and(x, 0xffffffffffffffffffffffffffffffff), signextend(15, y)) if shr(128, z) { // revert SafeCastOverflow() diff --git a/src/briefcase/protocols/v4-core/libraries/Lock.sol b/src/briefcase/protocols/v4-core/libraries/Lock.sol index 085f65db..cea38bf7 100644 --- a/src/briefcase/protocols/v4-core/libraries/Lock.sol +++ b/src/briefcase/protocols/v4-core/libraries/Lock.sol @@ -8,20 +8,20 @@ library Lock { bytes32 internal constant IS_UNLOCKED_SLOT = 0xc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab23; function unlock() internal { - assembly ('memory-safe') { + assembly ("memory-safe") { // unlock tstore(IS_UNLOCKED_SLOT, true) } } function lock() internal { - assembly ('memory-safe') { + assembly ("memory-safe") { tstore(IS_UNLOCKED_SLOT, false) } } function isUnlocked() internal view returns (bool unlocked) { - assembly ('memory-safe') { + assembly ("memory-safe") { unlocked := tload(IS_UNLOCKED_SLOT) } } diff --git a/src/briefcase/protocols/v4-core/libraries/NonzeroDeltaCount.sol b/src/briefcase/protocols/v4-core/libraries/NonzeroDeltaCount.sol index 1f555b3c..3221df0c 100644 --- a/src/briefcase/protocols/v4-core/libraries/NonzeroDeltaCount.sol +++ b/src/briefcase/protocols/v4-core/libraries/NonzeroDeltaCount.sol @@ -10,13 +10,13 @@ library NonzeroDeltaCount { 0x7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b; function read() internal view returns (uint256 count) { - assembly ('memory-safe') { + assembly ("memory-safe") { count := tload(NONZERO_DELTA_COUNT_SLOT) } } function increment() internal { - assembly ('memory-safe') { + assembly ("memory-safe") { let count := tload(NONZERO_DELTA_COUNT_SLOT) count := add(count, 1) tstore(NONZERO_DELTA_COUNT_SLOT, count) @@ -26,7 +26,7 @@ library NonzeroDeltaCount { /// @notice Potential to underflow. Ensure checks are performed by integrating contracts to ensure this does not happen. /// Current usage ensures this will not happen because we call decrement with known boundaries (only up to the number of times we call increment). function decrement() internal { - assembly ('memory-safe') { + assembly ("memory-safe") { let count := tload(NONZERO_DELTA_COUNT_SLOT) count := sub(count, 1) tstore(NONZERO_DELTA_COUNT_SLOT, count) diff --git a/src/briefcase/protocols/v4-core/libraries/ParseBytes.sol b/src/briefcase/protocols/v4-core/libraries/ParseBytes.sol index ce3f2abf..0b24207b 100644 --- a/src/briefcase/protocols/v4-core/libraries/ParseBytes.sol +++ b/src/briefcase/protocols/v4-core/libraries/ParseBytes.sol @@ -7,21 +7,21 @@ pragma solidity ^0.8.0; library ParseBytes { function parseSelector(bytes memory result) internal pure returns (bytes4 selector) { // equivalent: (selector,) = abi.decode(result, (bytes4, int256)); - assembly ('memory-safe') { + assembly ("memory-safe") { selector := mload(add(result, 0x20)) } } function parseFee(bytes memory result) internal pure returns (uint24 lpFee) { // equivalent: (,, lpFee) = abi.decode(result, (bytes4, int256, uint24)); - assembly ('memory-safe') { + assembly ("memory-safe") { lpFee := mload(add(result, 0x60)) } } function parseReturnDelta(bytes memory result) internal pure returns (int256 hookReturn) { // equivalent: (, hookReturnDelta) = abi.decode(result, (bytes4, int256)); - assembly ('memory-safe') { + assembly ("memory-safe") { hookReturn := mload(add(result, 0x40)) } } diff --git a/src/briefcase/protocols/v4-core/libraries/Pool.sol b/src/briefcase/protocols/v4-core/libraries/Pool.sol index 2329b287..eead8f27 100644 --- a/src/briefcase/protocols/v4-core/libraries/Pool.sol +++ b/src/briefcase/protocols/v4-core/libraries/Pool.sol @@ -211,10 +211,8 @@ library Pool { // right, when we'll need _more_ currency0 (it's becoming more valuable) so user must provide it delta = toBalanceDelta( SqrtPriceMath.getAmount0Delta( - TickMath.getSqrtPriceAtTick(tickLower), - TickMath.getSqrtPriceAtTick(tickUpper), - liquidityDelta - ).toInt128(), + TickMath.getSqrtPriceAtTick(tickLower), TickMath.getSqrtPriceAtTick(tickUpper), liquidityDelta + ).toInt128(), 0 ); } else if (tick < tickUpper) { @@ -232,10 +230,8 @@ library Pool { delta = toBalanceDelta( 0, SqrtPriceMath.getAmount1Delta( - TickMath.getSqrtPriceAtTick(tickLower), - TickMath.getSqrtPriceAtTick(tickUpper), - liquidityDelta - ).toInt128() + TickMath.getSqrtPriceAtTick(tickLower), TickMath.getSqrtPriceAtTick(tickUpper), liquidityDelta + ).toInt128() ); } } @@ -393,7 +389,7 @@ library Pool { // cannot overflow due to limits on the size of protocolFee and params.amountSpecified // this rounds down to favor LPs over the protocol uint256 delta = (swapFee == protocolFee) - ? step.feeAmount // lp fee is 0, so the entire fee is owed to the protocol instead + ? step.feeAmount // lp fee is 0, so the entire fee is owed to the protocol instead : (step.amountIn + step.feeAmount) * protocolFee / ProtocolFeeLibrary.PIPS_DENOMINATOR; // subtract it from the total fee and add it to the protocol fee step.feeAmount -= delta; @@ -405,9 +401,8 @@ library Pool { if (result.liquidity > 0) { unchecked { // FullMath.mulDiv isn't needed as the numerator can't overflow uint256 since tokens have a max supply of type(uint128).max - step.feeGrowthGlobalX128 += UnsafeMath.simpleMulDiv( - step.feeAmount, FixedPoint128.Q128, result.liquidity - ); + step.feeGrowthGlobalX128 += + UnsafeMath.simpleMulDiv(step.feeAmount, FixedPoint128.Q128, result.liquidity); } } @@ -546,7 +541,7 @@ library Pool { // when the lower (upper) tick is crossed left to right, liquidity must be added (removed) // when the lower (upper) tick is crossed right to left, liquidity must be removed (added) int128 liquidityNet = upper ? liquidityNetBefore - liquidityDelta : liquidityNetBefore + liquidityDelta; - assembly ('memory-safe') { + assembly ("memory-safe") { // liquidityGrossAfter and liquidityNet are packed in the first slot of `info` // So we can store them with a single sstore by packing them ourselves first sstore( @@ -577,7 +572,7 @@ library Pool { int24 MAX_TICK = TickMath.MAX_TICK; int24 MIN_TICK = TickMath.MIN_TICK; // tick spacing will never be 0 since TickMath.MIN_TICK_SPACING is 1 - assembly ('memory-safe') { + assembly ("memory-safe") { tickSpacing := signextend(2, tickSpacing) let minTick := sub(sdiv(MIN_TICK, tickSpacing), slt(smod(MIN_TICK, tickSpacing), 0)) let maxTick := sdiv(MAX_TICK, tickSpacing) diff --git a/src/briefcase/protocols/v4-core/libraries/Position.sol b/src/briefcase/protocols/v4-core/libraries/Position.sol index 395d97f1..4024fc11 100644 --- a/src/briefcase/protocols/v4-core/libraries/Position.sol +++ b/src/briefcase/protocols/v4-core/libraries/Position.sol @@ -51,7 +51,7 @@ library Position { returns (bytes32 positionKey) { // positionKey = keccak256(abi.encodePacked(owner, tickLower, tickUpper, salt)) - assembly ('memory-safe') { + assembly ("memory-safe") { let fmp := mload(0x40) mstore(add(fmp, 0x26), salt) // [0x26, 0x46) mstore(add(fmp, 0x06), tickUpper) // [0x23, 0x26) diff --git a/src/briefcase/protocols/v4-core/libraries/ProtocolFeeLibrary.sol b/src/briefcase/protocols/v4-core/libraries/ProtocolFeeLibrary.sol index 3d2ac9d9..c155b86a 100644 --- a/src/briefcase/protocols/v4-core/libraries/ProtocolFeeLibrary.sol +++ b/src/briefcase/protocols/v4-core/libraries/ProtocolFeeLibrary.sol @@ -24,7 +24,7 @@ library ProtocolFeeLibrary { function isValidProtocolFee(uint24 self) internal pure returns (bool valid) { // Equivalent to: getZeroForOneFee(self) <= MAX_PROTOCOL_FEE && getOneForZeroFee(self) <= MAX_PROTOCOL_FEE - assembly ('memory-safe') { + assembly ("memory-safe") { let isZeroForOneFeeOk := lt(and(self, 0xfff), FEE_0_THRESHOLD) let isOneForZeroFeeOk := lt(and(self, 0xfff000), FEE_1_THRESHOLD) valid := and(isZeroForOneFeeOk, isOneForZeroFeeOk) @@ -37,7 +37,7 @@ library ProtocolFeeLibrary { /// @dev here `self` is just a single direction's protocol fee, not a packed type of 2 protocol fees function calculateSwapFee(uint16 self, uint24 lpFee) internal pure returns (uint24 swapFee) { // protocolFee + lpFee - (protocolFee * lpFee / 1_000_000) - assembly ('memory-safe') { + assembly ("memory-safe") { self := and(self, 0xfff) lpFee := and(lpFee, 0xffffff) let numerator := mul(self, lpFee) diff --git a/src/briefcase/protocols/v4-core/libraries/SqrtPriceMath.sol b/src/briefcase/protocols/v4-core/libraries/SqrtPriceMath.sol index 79b637d2..b7850ce0 100644 --- a/src/briefcase/protocols/v4-core/libraries/SqrtPriceMath.sol +++ b/src/briefcase/protocols/v4-core/libraries/SqrtPriceMath.sol @@ -55,7 +55,7 @@ library SqrtPriceMath { // if the product overflows, we know the denominator underflows // in addition, we must check that the denominator does not underflow // equivalent: if (product / amount != sqrtPX96 || numerator1 <= product) revert PriceOverflow(); - assembly ('memory-safe') { + assembly ("memory-safe") { if iszero( and( eq(div(product, amount), and(sqrtPX96, 0xffffffffffffffffffffffffffffffffffffffff)), @@ -90,18 +90,22 @@ library SqrtPriceMath { // if we're adding (subtracting), rounding down requires rounding the quotient down (up) // in both cases, avoid a mulDiv for most inputs if (add) { - uint256 quotient = (amount <= type(uint160).max + uint256 quotient = ( + amount <= type(uint160).max ? (amount << FixedPoint96.RESOLUTION) / liquidity - : FullMath.mulDiv(amount, FixedPoint96.Q96, liquidity)); + : FullMath.mulDiv(amount, FixedPoint96.Q96, liquidity) + ); return (uint256(sqrtPX96) + quotient).toUint160(); } else { - uint256 quotient = (amount <= type(uint160).max + uint256 quotient = ( + amount <= type(uint160).max ? UnsafeMath.divRoundingUp(amount << FixedPoint96.RESOLUTION, liquidity) - : FullMath.mulDivRoundingUp(amount, FixedPoint96.Q96, liquidity)); + : FullMath.mulDivRoundingUp(amount, FixedPoint96.Q96, liquidity) + ); // equivalent: if (sqrtPX96 <= quotient) revert NotEnoughLiquidity(); - assembly ('memory-safe') { + assembly ("memory-safe") { if iszero(gt(and(sqrtPX96, 0xffffffffffffffffffffffffffffffffffffffff), quotient)) { mstore(0, 0x4323a555) // selector for NotEnoughLiquidity() revert(0x1c, 0x04) @@ -127,7 +131,7 @@ library SqrtPriceMath { returns (uint160) { // equivalent: if (sqrtPX96 == 0 || liquidity == 0) revert InvalidPriceOrLiquidity(); - assembly ('memory-safe') { + assembly ("memory-safe") { if or( iszero(and(sqrtPX96, 0xffffffffffffffffffffffffffffffffffffffff)), iszero(and(liquidity, 0xffffffffffffffffffffffffffffffff)) @@ -156,7 +160,7 @@ library SqrtPriceMath { returns (uint160) { // equivalent: if (sqrtPX96 == 0 || liquidity == 0) revert InvalidPriceOrLiquidity(); - assembly ('memory-safe') { + assembly ("memory-safe") { if or( iszero(and(sqrtPX96, 0xffffffffffffffffffffffffffffffffffffffff)), iszero(and(liquidity, 0xffffffffffffffffffffffffffffffff)) @@ -189,7 +193,7 @@ library SqrtPriceMath { if (sqrtPriceAX96 > sqrtPriceBX96) (sqrtPriceAX96, sqrtPriceBX96) = (sqrtPriceBX96, sqrtPriceAX96); // equivalent: if (sqrtPriceAX96 == 0) revert InvalidPrice(); - assembly ('memory-safe') { + assembly ("memory-safe") { if iszero(and(sqrtPriceAX96, 0xffffffffffffffffffffffffffffffffffffffff)) { mstore(0, 0x00bfc921) // selector for InvalidPrice() revert(0x1c, 0x04) @@ -200,21 +204,16 @@ library SqrtPriceMath { uint256 numerator2 = sqrtPriceBX96 - sqrtPriceAX96; return roundUp - ? UnsafeMath.divRoundingUp( - FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtPriceBX96), sqrtPriceAX96 - ) + ? UnsafeMath.divRoundingUp(FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtPriceBX96), sqrtPriceAX96) : FullMath.mulDiv(numerator1, numerator2, sqrtPriceBX96) / sqrtPriceAX96; } } /// @notice Equivalent to: `a >= b ? a - b : b - a` function absDiff(uint160 a, uint160 b) internal pure returns (uint256 res) { - assembly ('memory-safe') { + assembly ("memory-safe") { let diff := - sub( - and(a, 0xffffffffffffffffffffffffffffffffffffffff), - and(b, 0xffffffffffffffffffffffffffffffffffffffff) - ) + sub(and(a, 0xffffffffffffffffffffffffffffffffffffffff), and(b, 0xffffffffffffffffffffffffffffffffffffffff)) // mask = 0 if a >= b else -1 (all 1s) let mask := sar(255, diff) // if a >= b, res = a - b = 0 ^ (a - b) @@ -248,7 +247,7 @@ library SqrtPriceMath { * Cannot overflow because `type(uint128).max * type(uint160).max >> 96 < (1 << 192)`. */ amount1 = FullMath.mulDiv(_liquidity, numerator, denominator); - assembly ('memory-safe') { + assembly ("memory-safe") { amount1 := add(amount1, and(gt(mulmod(_liquidity, numerator, denominator), 0), roundUp)) } } diff --git a/src/briefcase/protocols/v4-core/libraries/StateLibrary.sol b/src/briefcase/protocols/v4-core/libraries/StateLibrary.sol index c5510698..2c0d3a34 100644 --- a/src/briefcase/protocols/v4-core/libraries/StateLibrary.sol +++ b/src/briefcase/protocols/v4-core/libraries/StateLibrary.sol @@ -50,7 +50,7 @@ library StateLibrary { // 24 bits |24bits|24bits |24 bits|160 bits // 0x000000 |000bb8|000000 |ffff75 |0000000000000000fe3aa841ba359daa0ea9eff7 // ---------- | fee |protocolfee | tick | sqrtPriceX96 - assembly ('memory-safe') { + assembly ("memory-safe") { // bottom 160 bits of data sqrtPriceX96 := and(data, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) // next 24 bits of data @@ -87,7 +87,7 @@ library StateLibrary { // read all 3 words of the TickInfo struct bytes32[] memory data = manager.extsload(slot, 3); - assembly ('memory-safe') { + assembly ("memory-safe") { let firstWord := mload(add(data, 32)) liquidityNet := sar(128, firstWord) liquidityGross := and(firstWord, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) @@ -113,7 +113,7 @@ library StateLibrary { bytes32 slot = _getTickInfoSlot(poolId, tick); bytes32 value = manager.extsload(slot); - assembly ('memory-safe') { + assembly ("memory-safe") { liquidityNet := sar(128, value) liquidityGross := and(value, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) } @@ -137,7 +137,7 @@ library StateLibrary { // offset by 1 word, since the first word is liquidityGross + liquidityNet bytes32[] memory data = manager.extsload(bytes32(uint256(slot) + 1), 2); - assembly ('memory-safe') { + assembly ("memory-safe") { feeGrowthOutside0X128 := mload(add(data, 32)) feeGrowthOutside1X128 := mload(add(data, 64)) } @@ -167,7 +167,7 @@ library StateLibrary { // read the 2 words of feeGrowthGlobal bytes32[] memory data = manager.extsload(slot_feeGrowthGlobal0X128, 2); - assembly ('memory-safe') { + assembly ("memory-safe") { feeGrowthGlobal0 := mload(add(data, 32)) feeGrowthGlobal1 := mload(add(data, 64)) } @@ -198,7 +198,11 @@ library StateLibrary { * @param tick The tick to retrieve the bitmap for. * @return tickBitmap The bitmap of the tick. */ - function getTickBitmap(IPoolManager manager, PoolId poolId, int16 tick) internal view returns (uint256 tickBitmap) { + function getTickBitmap(IPoolManager manager, PoolId poolId, int16 tick) + internal + view + returns (uint256 tickBitmap) + { // slot key of Pool.State value: `pools[poolId]` bytes32 stateSlot = _getPoolStateSlot(poolId); @@ -257,7 +261,7 @@ library StateLibrary { // read all 3 words of the Position.State struct bytes32[] memory data = manager.extsload(slot, 3); - assembly ('memory-safe') { + assembly ("memory-safe") { liquidity := mload(add(data, 32)) feeGrowthInside0LastX128 := mload(add(data, 64)) feeGrowthInside1LastX128 := mload(add(data, 96)) diff --git a/src/briefcase/protocols/v4-core/libraries/SwapMath.sol b/src/briefcase/protocols/v4-core/libraries/SwapMath.sol index 076df243..3c6f7218 100644 --- a/src/briefcase/protocols/v4-core/libraries/SwapMath.sol +++ b/src/briefcase/protocols/v4-core/libraries/SwapMath.sol @@ -22,7 +22,7 @@ library SwapMath { pure returns (uint160 sqrtPriceTargetX96) { - assembly ('memory-safe') { + assembly ("memory-safe") { // a flag to toggle between sqrtPriceNextX96 and sqrtPriceLimitX96 // when zeroForOne == true, nextOrLimit reduces to sqrtPriceNextX96 >= sqrtPriceLimitX96 // sqrtPriceTargetX96 = max(sqrtPriceNextX96, sqrtPriceLimitX96) @@ -70,7 +70,7 @@ library SwapMath { // `amountIn` is capped by the target price sqrtPriceNextX96 = sqrtPriceTargetX96; feeAmount = _feePips == MAX_SWAP_FEE - ? amountIn // amountIn is always 0 here, as amountRemainingLessFee == 0 and amountRemainingLessFee >= amountIn + ? amountIn // amountIn is always 0 here, as amountRemainingLessFee == 0 and amountRemainingLessFee >= amountIn : FullMath.mulDivRoundingUp(amountIn, _feePips, MAX_SWAP_FEE - _feePips); } else { // exhaust the remaining amount diff --git a/src/briefcase/protocols/v4-core/libraries/TickBitmap.sol b/src/briefcase/protocols/v4-core/libraries/TickBitmap.sol index 83376a09..a1c138b3 100644 --- a/src/briefcase/protocols/v4-core/libraries/TickBitmap.sol +++ b/src/briefcase/protocols/v4-core/libraries/TickBitmap.sol @@ -16,14 +16,15 @@ library TickBitmap { function compress(int24 tick, int24 tickSpacing) internal pure returns (int24 compressed) { // compressed = tick / tickSpacing; // if (tick < 0 && tick % tickSpacing != 0) compressed--; - assembly ('memory-safe') { + assembly ("memory-safe") { tick := signextend(2, tick) tickSpacing := signextend(2, tickSpacing) - compressed := sub( - sdiv(tick, tickSpacing), - // if (tick < 0 && tick % tickSpacing != 0) then tick % tickSpacing < 0, vice versa - slt(smod(tick, tickSpacing), 0) - ) + compressed := + sub( + sdiv(tick, tickSpacing), + // if (tick < 0 && tick % tickSpacing != 0) then tick % tickSpacing < 0, vice versa + slt(smod(tick, tickSpacing), 0) + ) } } @@ -32,7 +33,7 @@ library TickBitmap { /// @return wordPos The key in the mapping containing the word in which the bit is stored /// @return bitPos The bit position in the word where the flag is stored function position(int24 tick) internal pure returns (int16 wordPos, uint8 bitPos) { - assembly ('memory-safe') { + assembly ("memory-safe") { // signed arithmetic shift right wordPos := sar(8, signextend(2, tick)) bitPos := and(tick, 0xff) @@ -49,7 +50,7 @@ library TickBitmap { // (int16 wordPos, uint8 bitPos) = position(tick / tickSpacing); // uint256 mask = 1 << bitPos; // self[wordPos] ^= mask; - assembly ('memory-safe') { + assembly ("memory-safe") { tick := signextend(2, tick) tickSpacing := signextend(2, tickSpacing) // ensure that the tick is spaced diff --git a/src/briefcase/protocols/v4-core/libraries/TickMath.sol b/src/briefcase/protocols/v4-core/libraries/TickMath.sol index f9f55fc6..433da285 100644 --- a/src/briefcase/protocols/v4-core/libraries/TickMath.sol +++ b/src/briefcase/protocols/v4-core/libraries/TickMath.sol @@ -57,7 +57,7 @@ library TickMath { function getSqrtPriceAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) { unchecked { uint256 absTick; - assembly ('memory-safe') { + assembly ("memory-safe") { tick := signextend(2, tick) // mask = 0 if tick >= 0 else -1 (all 1s) let mask := sar(255, tick) @@ -76,7 +76,7 @@ library TickMath { // price = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000; // or price = int(2**128 / sqrt(1.0001)) if (absTick & 0x1) else 1 << 128 uint256 price; - assembly ('memory-safe') { + assembly ("memory-safe") { price := xor(shl(128, 1), mul(xor(shl(128, 1), 0xfffcb933bd6fad37aa2d162d1a594001), and(absTick, 0x1))) } if (absTick & 0x2 != 0) price = (price * 0xfff97272373d413259a46990580e213a) >> 128; @@ -99,7 +99,7 @@ library TickMath { if (absTick & 0x40000 != 0) price = (price * 0x2216e584f5fa1ea926041bedfe98) >> 128; if (absTick & 0x80000 != 0) price = (price * 0x48a170391f7dc42444e8fa2) >> 128; - assembly ('memory-safe') { + assembly ("memory-safe") { // if (tick > 0) price = type(uint256).max / price; if sgt(tick, 0) { price := div(not(0), price) } @@ -138,85 +138,85 @@ library TickMath { int256 log_2 = (int256(msb) - 128) << 64; - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(63, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(62, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(61, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(60, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(59, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(58, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(57, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(56, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(55, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(54, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(53, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(52, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(51, f)) r := shr(f, r) } - assembly ('memory-safe') { + assembly ("memory-safe") { r := shr(127, mul(r, r)) let f := shr(128, r) log_2 := or(log_2, shl(50, f)) diff --git a/src/briefcase/protocols/v4-core/libraries/TransientStateLibrary.sol b/src/briefcase/protocols/v4-core/libraries/TransientStateLibrary.sol index e433f341..dfcfbc05 100644 --- a/src/briefcase/protocols/v4-core/libraries/TransientStateLibrary.sol +++ b/src/briefcase/protocols/v4-core/libraries/TransientStateLibrary.sol @@ -11,6 +11,7 @@ import {NonzeroDeltaCount} from './NonzeroDeltaCount.sol'; library TransientStateLibrary { /// @notice returns the reserves for the synced currency /// @param manager The pool manager contract. + /// @return uint256 The reserves of the currency. /// @dev returns 0 if the reserves are not synced or value is 0. /// Checks the synced currency to only return valid reserve values (after a sync and before a settle). @@ -33,7 +34,7 @@ library TransientStateLibrary { /// @param currency The currency for which to lookup the delta function currencyDelta(IPoolManager manager, address target, Currency currency) internal view returns (int256) { bytes32 key; - assembly ('memory-safe') { + assembly ("memory-safe") { mstore(0, and(target, 0xffffffffffffffffffffffffffffffffffffffff)) mstore(32, and(currency, 0xffffffffffffffffffffffffffffffffffffffff)) key := keccak256(0, 64) diff --git a/src/briefcase/protocols/v4-core/libraries/UnsafeMath.sol b/src/briefcase/protocols/v4-core/libraries/UnsafeMath.sol index 4764df1b..ed88beca 100644 --- a/src/briefcase/protocols/v4-core/libraries/UnsafeMath.sol +++ b/src/briefcase/protocols/v4-core/libraries/UnsafeMath.sol @@ -10,7 +10,7 @@ library UnsafeMath { /// @param y The divisor /// @return z The quotient, ceil(x / y) function divRoundingUp(uint256 x, uint256 y) internal pure returns (uint256 z) { - assembly ('memory-safe') { + assembly ("memory-safe") { z := add(div(x, y), gt(mod(x, y), 0)) } } @@ -22,7 +22,7 @@ library UnsafeMath { /// @param denominator The divisor /// @return result The 256-bit result, floor(a×b÷denominator) function simpleMulDiv(uint256 a, uint256 b, uint256 denominator) internal pure returns (uint256 result) { - assembly ('memory-safe') { + assembly ("memory-safe") { result := div(mul(a, b), denominator) } } diff --git a/src/briefcase/protocols/v4-core/types/BalanceDelta.sol b/src/briefcase/protocols/v4-core/types/BalanceDelta.sol index 026375b6..92480102 100644 --- a/src/briefcase/protocols/v4-core/types/BalanceDelta.sol +++ b/src/briefcase/protocols/v4-core/types/BalanceDelta.sol @@ -12,7 +12,7 @@ using BalanceDeltaLibrary for BalanceDelta global; using SafeCast for int256; function toBalanceDelta(int128 _amount0, int128 _amount1) pure returns (BalanceDelta balanceDelta) { - assembly ('memory-safe') { + assembly ("memory-safe") { balanceDelta := or(shl(128, _amount0), and(sub(shl(128, 1), 1), _amount1)) } } @@ -20,7 +20,7 @@ function toBalanceDelta(int128 _amount0, int128 _amount1) pure returns (BalanceD function add(BalanceDelta a, BalanceDelta b) pure returns (BalanceDelta) { int256 res0; int256 res1; - assembly ('memory-safe') { + assembly ("memory-safe") { let a0 := sar(128, a) let a1 := signextend(15, a) let b0 := sar(128, b) @@ -34,7 +34,7 @@ function add(BalanceDelta a, BalanceDelta b) pure returns (BalanceDelta) { function sub(BalanceDelta a, BalanceDelta b) pure returns (BalanceDelta) { int256 res0; int256 res1; - assembly ('memory-safe') { + assembly ("memory-safe") { let a0 := sar(128, a) let a1 := signextend(15, a) let b0 := sar(128, b) @@ -59,13 +59,13 @@ library BalanceDeltaLibrary { BalanceDelta public constant ZERO_DELTA = BalanceDelta.wrap(0); function amount0(BalanceDelta balanceDelta) internal pure returns (int128 _amount0) { - assembly ('memory-safe') { + assembly ("memory-safe") { _amount0 := sar(128, balanceDelta) } } function amount1(BalanceDelta balanceDelta) internal pure returns (int128 _amount1) { - assembly ('memory-safe') { + assembly ("memory-safe") { _amount1 := signextend(15, balanceDelta) } } diff --git a/src/briefcase/protocols/v4-core/types/BeforeSwapDelta.sol b/src/briefcase/protocols/v4-core/types/BeforeSwapDelta.sol index ee419879..2b041605 100644 --- a/src/briefcase/protocols/v4-core/types/BeforeSwapDelta.sol +++ b/src/briefcase/protocols/v4-core/types/BeforeSwapDelta.sol @@ -10,7 +10,7 @@ function toBeforeSwapDelta(int128 deltaSpecified, int128 deltaUnspecified) pure returns (BeforeSwapDelta beforeSwapDelta) { - assembly ('memory-safe') { + assembly ("memory-safe") { beforeSwapDelta := or(shl(128, deltaSpecified), and(sub(shl(128, 1), 1), deltaUnspecified)) } } @@ -23,7 +23,7 @@ library BeforeSwapDeltaLibrary { /// extracts int128 from the upper 128 bits of the BeforeSwapDelta /// returned by beforeSwap function getSpecifiedDelta(BeforeSwapDelta delta) internal pure returns (int128 deltaSpecified) { - assembly ('memory-safe') { + assembly ("memory-safe") { deltaSpecified := sar(128, delta) } } @@ -31,7 +31,7 @@ library BeforeSwapDeltaLibrary { /// extracts int128 from the lower 128 bits of the BeforeSwapDelta /// returned by beforeSwap and afterSwap function getUnspecifiedDelta(BeforeSwapDelta delta) internal pure returns (int128 deltaUnspecified) { - assembly ('memory-safe') { + assembly ("memory-safe") { deltaUnspecified := signextend(15, delta) } } diff --git a/src/briefcase/protocols/v4-core/types/Currency.sol b/src/briefcase/protocols/v4-core/types/Currency.sol index d175133f..6d1c598a 100644 --- a/src/briefcase/protocols/v4-core/types/Currency.sol +++ b/src/briefcase/protocols/v4-core/types/Currency.sol @@ -43,7 +43,7 @@ library CurrencyLibrary { bool success; if (currency.isAddressZero()) { - assembly ('memory-safe') { + assembly ("memory-safe") { // Transfer the ETH and revert if it fails. success := call(gas(), to, amount, 0, 0, 0, 0) } @@ -52,7 +52,7 @@ library CurrencyLibrary { CustomRevert.bubbleUpAndRevertWith(to, bytes4(0), NativeTransferFailed.selector); } } else { - assembly ('memory-safe') { + assembly ("memory-safe") { // Get a pointer to some free memory. let fmp := mload(0x40) @@ -61,16 +61,17 @@ library CurrencyLibrary { mstore(add(fmp, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(fmp, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. - success := and( - // Set success to whether the call reverted, if not we check it either - // returned exactly 1 (can't just be non-zero data), or had no return data. - or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), - // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. - // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. - // Counterintuitively, this call must be positioned second to the or() call in the - // surrounding and() call or else returndatasize() will be zero during the computation. - call(gas(), currency, 0, fmp, 68, 0, 32) - ) + success := + and( + // Set success to whether the call reverted, if not we check it either + // returned exactly 1 (can't just be non-zero data), or had no return data. + or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), + // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. + // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. + // Counterintuitively, this call must be positioned second to the or() call in the + // surrounding and() call or else returndatasize() will be zero during the computation. + call(gas(), currency, 0, fmp, 68, 0, 32) + ) // Now clean the memory we used mstore(fmp, 0) // 4 byte `selector` and 28 bytes of `to` were stored here diff --git a/src/briefcase/protocols/v4-core/types/PoolId.sol b/src/briefcase/protocols/v4-core/types/PoolId.sol index d209a8aa..ce222352 100644 --- a/src/briefcase/protocols/v4-core/types/PoolId.sol +++ b/src/briefcase/protocols/v4-core/types/PoolId.sol @@ -9,7 +9,7 @@ type PoolId is bytes32; library PoolIdLibrary { /// @notice Returns value equal to keccak256(abi.encode(poolKey)) function toId(PoolKey memory poolKey) internal pure returns (PoolId poolId) { - assembly ('memory-safe') { + assembly ("memory-safe") { // 0xa0 represents the total size of the poolKey struct (5 slots of 32 bytes) poolId := keccak256(poolKey, 0xa0) } diff --git a/src/briefcase/protocols/v4-core/types/Slot0.sol b/src/briefcase/protocols/v4-core/types/Slot0.sol index 07a5c891..0fdef81a 100644 --- a/src/briefcase/protocols/v4-core/types/Slot0.sol +++ b/src/briefcase/protocols/v4-core/types/Slot0.sol @@ -39,57 +39,56 @@ library Slot0Library { // #### GETTERS #### function sqrtPriceX96(Slot0 _packed) internal pure returns (uint160 _sqrtPriceX96) { - assembly ('memory-safe') { + assembly ("memory-safe") { _sqrtPriceX96 := and(MASK_160_BITS, _packed) } } function tick(Slot0 _packed) internal pure returns (int24 _tick) { - assembly ('memory-safe') { + assembly ("memory-safe") { _tick := signextend(2, shr(TICK_OFFSET, _packed)) } } function protocolFee(Slot0 _packed) internal pure returns (uint24 _protocolFee) { - assembly ('memory-safe') { + assembly ("memory-safe") { _protocolFee := and(MASK_24_BITS, shr(PROTOCOL_FEE_OFFSET, _packed)) } } function lpFee(Slot0 _packed) internal pure returns (uint24 _lpFee) { - assembly ('memory-safe') { + assembly ("memory-safe") { _lpFee := and(MASK_24_BITS, shr(LP_FEE_OFFSET, _packed)) } } // #### SETTERS #### function setSqrtPriceX96(Slot0 _packed, uint160 _sqrtPriceX96) internal pure returns (Slot0 _result) { - assembly ('memory-safe') { + assembly ("memory-safe") { _result := or(and(not(MASK_160_BITS), _packed), and(MASK_160_BITS, _sqrtPriceX96)) } } function setTick(Slot0 _packed, int24 _tick) internal pure returns (Slot0 _result) { - assembly ('memory-safe') { + assembly ("memory-safe") { _result := or(and(not(shl(TICK_OFFSET, MASK_24_BITS)), _packed), shl(TICK_OFFSET, and(MASK_24_BITS, _tick))) } } function setProtocolFee(Slot0 _packed, uint24 _protocolFee) internal pure returns (Slot0 _result) { - assembly ('memory-safe') { - _result := or( - and(not(shl(PROTOCOL_FEE_OFFSET, MASK_24_BITS)), _packed), - shl(PROTOCOL_FEE_OFFSET, and(MASK_24_BITS, _protocolFee)) - ) + assembly ("memory-safe") { + _result := + or( + and(not(shl(PROTOCOL_FEE_OFFSET, MASK_24_BITS)), _packed), + shl(PROTOCOL_FEE_OFFSET, and(MASK_24_BITS, _protocolFee)) + ) } } function setLpFee(Slot0 _packed, uint24 _lpFee) internal pure returns (Slot0 _result) { - assembly ('memory-safe') { - _result := or( - and(not(shl(LP_FEE_OFFSET, MASK_24_BITS)), _packed), - shl(LP_FEE_OFFSET, and(MASK_24_BITS, _lpFee)) - ) + assembly ("memory-safe") { + _result := + or(and(not(shl(LP_FEE_OFFSET, MASK_24_BITS)), _packed), shl(LP_FEE_OFFSET, and(MASK_24_BITS, _lpFee))) } } } diff --git a/src/briefcase/protocols/v4-periphery/interfaces/IV4Quoter.sol b/src/briefcase/protocols/v4-periphery/interfaces/IV4Quoter.sol index ff39e288..aeb24041 100644 --- a/src/briefcase/protocols/v4-periphery/interfaces/IV4Quoter.sol +++ b/src/briefcase/protocols/v4-periphery/interfaces/IV4Quoter.sol @@ -42,7 +42,9 @@ interface IV4Quoter is IImmutableState, IMsgSender { /// exactAmount The desired input amount /// @return amountOut The output quote for the exactIn swap /// @return gasEstimate Estimated gas units used for the swap - function quoteExactInput(QuoteExactParams memory params) external returns (uint256 amountOut, uint256 gasEstimate); + function quoteExactInput(QuoteExactParams memory params) + external + returns (uint256 amountOut, uint256 gasEstimate); /// @notice Returns the delta amounts for a given exact output swap of a single pool /// @param params The params for the quote, encoded as `QuoteExactSingleParams` @@ -63,5 +65,7 @@ interface IV4Quoter is IImmutableState, IMsgSender { /// exactAmount The desired output amount /// @return amountIn The input quote for the exactOut swap /// @return gasEstimate Estimated gas units used for the swap - function quoteExactOutput(QuoteExactParams memory params) external returns (uint256 amountIn, uint256 gasEstimate); + function quoteExactOutput(QuoteExactParams memory params) + external + returns (uint256 amountIn, uint256 gasEstimate); } diff --git a/src/briefcase/protocols/v4-periphery/libraries/CalldataDecoder.sol b/src/briefcase/protocols/v4-periphery/libraries/CalldataDecoder.sol index e4647dcd..5316c3a4 100644 --- a/src/briefcase/protocols/v4-periphery/libraries/CalldataDecoder.sol +++ b/src/briefcase/protocols/v4-periphery/libraries/CalldataDecoder.sol @@ -27,7 +27,7 @@ library CalldataDecoder { pure returns (bytes calldata actions, bytes[] calldata params) { - assembly ('memory-safe') { + assembly ("memory-safe") { // Strict encoding requires that the data begin with: // 0x00: 0x40 (offset to `actions.length`) // 0x20: 0x60 + actions.length (offset to `params.length`) @@ -77,7 +77,7 @@ library CalldataDecoder { returns (uint256 tokenId, uint256 liquidity, uint128 amount0, uint128 amount1, bytes calldata hookData) { // no length check performed, as there is a length check in `toBytes` - assembly ('memory-safe') { + assembly ("memory-safe") { tokenId := calldataload(params.offset) liquidity := calldataload(add(params.offset, 0x20)) amount0 := calldataload(add(params.offset, 0x40)) @@ -94,7 +94,7 @@ library CalldataDecoder { returns (uint256 tokenId, uint128 amount0Max, uint128 amount1Max, bytes calldata hookData) { // no length check performed, as there is a length check in `toBytes` - assembly ('memory-safe') { + assembly ("memory-safe") { tokenId := calldataload(params.offset) amount0Max := calldataload(add(params.offset, 0x20)) amount1Max := calldataload(add(params.offset, 0x40)) @@ -119,7 +119,7 @@ library CalldataDecoder { ) { // no length check performed, as there is a length check in `toBytes` - assembly ('memory-safe') { + assembly ("memory-safe") { poolKey := params.offset tickLower := calldataload(add(params.offset, 0xa0)) tickUpper := calldataload(add(params.offset, 0xc0)) @@ -146,7 +146,7 @@ library CalldataDecoder { ) { // no length check performed, as there is a length check in `toBytes` - assembly ('memory-safe') { + assembly ("memory-safe") { poolKey := params.offset tickLower := calldataload(add(params.offset, 0xa0)) tickUpper := calldataload(add(params.offset, 0xc0)) @@ -165,7 +165,7 @@ library CalldataDecoder { returns (uint256 tokenId, uint128 amount0Min, uint128 amount1Min, bytes calldata hookData) { // no length check performed, as there is a length check in `toBytes` - assembly ('memory-safe') { + assembly ("memory-safe") { tokenId := calldataload(params.offset) amount0Min := calldataload(add(params.offset, 0x20)) amount1Min := calldataload(add(params.offset, 0x40)) @@ -181,7 +181,7 @@ library CalldataDecoder { returns (IV4Router.ExactInputParams calldata swapParams) { // ExactInputParams is a variable length struct so we just have to look up its location - assembly ('memory-safe') { + assembly ("memory-safe") { // only safety checks for the minimum length, where path is empty // 0xa0 = 5 * 0x20 -> 3 elements, path offset, and path length 0 if lt(params.length, 0xa0) { @@ -199,7 +199,7 @@ library CalldataDecoder { returns (IV4Router.ExactInputSingleParams calldata swapParams) { // ExactInputSingleParams is a variable length struct so we just have to look up its location - assembly ('memory-safe') { + assembly ("memory-safe") { // only safety checks for the minimum length, where hookData is empty // 0x140 = 10 * 0x20 -> 8 elements, bytes offset, and bytes length 0 if lt(params.length, 0x140) { @@ -217,7 +217,7 @@ library CalldataDecoder { returns (IV4Router.ExactOutputParams calldata swapParams) { // ExactOutputParams is a variable length struct so we just have to look up its location - assembly ('memory-safe') { + assembly ("memory-safe") { // only safety checks for the minimum length, where path is empty // 0xa0 = 5 * 0x20 -> 3 elements, path offset, and path length 0 if lt(params.length, 0xa0) { @@ -235,7 +235,7 @@ library CalldataDecoder { returns (IV4Router.ExactOutputSingleParams calldata swapParams) { // ExactOutputSingleParams is a variable length struct so we just have to look up its location - assembly ('memory-safe') { + assembly ("memory-safe") { // only safety checks for the minimum length, where hookData is empty // 0x140 = 10 * 0x20 -> 8 elements, bytes offset, and bytes length 0 if lt(params.length, 0x140) { @@ -248,7 +248,7 @@ library CalldataDecoder { /// @dev equivalent to: abi.decode(params, (Currency)) in calldata function decodeCurrency(bytes calldata params) internal pure returns (Currency currency) { - assembly ('memory-safe') { + assembly ("memory-safe") { if lt(params.length, 0x20) { mstore(0, SLICE_ERROR_SELECTOR) revert(0x1c, 4) @@ -259,7 +259,7 @@ library CalldataDecoder { /// @dev equivalent to: abi.decode(params, (Currency, Currency)) in calldata function decodeCurrencyPair(bytes calldata params) internal pure returns (Currency currency0, Currency currency1) { - assembly ('memory-safe') { + assembly ("memory-safe") { if lt(params.length, 0x40) { mstore(0, SLICE_ERROR_SELECTOR) revert(0x1c, 4) @@ -275,7 +275,7 @@ library CalldataDecoder { pure returns (Currency currency0, Currency currency1, address _address) { - assembly ('memory-safe') { + assembly ("memory-safe") { if lt(params.length, 0x60) { mstore(0, SLICE_ERROR_SELECTOR) revert(0x1c, 4) @@ -292,7 +292,7 @@ library CalldataDecoder { pure returns (Currency currency, address _address) { - assembly ('memory-safe') { + assembly ("memory-safe") { if lt(params.length, 0x40) { mstore(0, SLICE_ERROR_SELECTOR) revert(0x1c, 4) @@ -308,7 +308,7 @@ library CalldataDecoder { pure returns (Currency currency, address _address, uint256 amount) { - assembly ('memory-safe') { + assembly ("memory-safe") { if lt(params.length, 0x60) { mstore(0, SLICE_ERROR_SELECTOR) revert(0x1c, 4) @@ -320,8 +320,12 @@ library CalldataDecoder { } /// @dev equivalent to: abi.decode(params, (Currency, uint256)) in calldata - function decodeCurrencyAndUint256(bytes calldata params) internal pure returns (Currency currency, uint256 amount) { - assembly ('memory-safe') { + function decodeCurrencyAndUint256(bytes calldata params) + internal + pure + returns (Currency currency, uint256 amount) + { + assembly ("memory-safe") { if lt(params.length, 0x40) { mstore(0, SLICE_ERROR_SELECTOR) revert(0x1c, 4) @@ -333,7 +337,7 @@ library CalldataDecoder { /// @dev equivalent to: abi.decode(params, (uint256)) in calldata function decodeUint256(bytes calldata params) internal pure returns (uint256 amount) { - assembly ('memory-safe') { + assembly ("memory-safe") { if lt(params.length, 0x20) { mstore(0, SLICE_ERROR_SELECTOR) revert(0x1c, 4) @@ -348,7 +352,7 @@ library CalldataDecoder { pure returns (Currency currency, uint256 amount, bool boolean) { - assembly ('memory-safe') { + assembly ("memory-safe") { if lt(params.length, 0x60) { mstore(0, SLICE_ERROR_SELECTOR) revert(0x1c, 4) @@ -364,7 +368,7 @@ library CalldataDecoder { /// @param _arg The index of the argument to extract function toBytes(bytes calldata _bytes, uint256 _arg) internal pure returns (bytes calldata res) { uint256 length; - assembly ('memory-safe') { + assembly ("memory-safe") { // The offset of the `_arg`-th element is `32 * arg`, which stores the offset of the length pointer. // shl(5, x) is equivalent to mul(32, x) let lengthPtr := diff --git a/src/briefcase/protocols/v4-periphery/libraries/ERC721PermitHash.sol b/src/briefcase/protocols/v4-periphery/libraries/ERC721PermitHash.sol index 2234bb02..3ead157a 100644 --- a/src/briefcase/protocols/v4-periphery/libraries/ERC721PermitHash.sol +++ b/src/briefcase/protocols/v4-periphery/libraries/ERC721PermitHash.sol @@ -20,7 +20,7 @@ library ERC721PermitHash { returns (bytes32 digest) { // equivalent to: keccak256(abi.encode(PERMIT_TYPEHASH, spender, tokenId, nonce, deadline)); - assembly ('memory-safe') { + assembly ("memory-safe") { let fmp := mload(0x40) mstore(fmp, PERMIT_TYPEHASH) mstore(add(fmp, 0x20), and(spender, 0xffffffffffffffffffffffffffffffffffffffff)) @@ -50,7 +50,7 @@ library ERC721PermitHash { returns (bytes32 digest) { // equivalent to: keccak256(abi.encode(PERMIT_FOR_ALL_TYPEHASH, operator, approved, nonce, deadline)); - assembly ('memory-safe') { + assembly ("memory-safe") { let fmp := mload(0x40) mstore(fmp, PERMIT_FOR_ALL_TYPEHASH) mstore(add(fmp, 0x20), and(operator, 0xffffffffffffffffffffffffffffffffffffffff)) diff --git a/src/briefcase/protocols/v4-periphery/libraries/PositionConfig.sol b/src/briefcase/protocols/v4-periphery/libraries/PositionConfig.sol index a51bf3d2..af5a5c2f 100644 --- a/src/briefcase/protocols/v4-periphery/libraries/PositionConfig.sol +++ b/src/briefcase/protocols/v4-periphery/libraries/PositionConfig.sol @@ -14,7 +14,7 @@ struct PositionConfig { library PositionConfigLibrary { function toId(PositionConfig calldata config) internal pure returns (bytes32 id) { // id = keccak256(abi.encodePacked(currency0, currency1, fee, tickSpacing, hooks, tickLower, tickUpper))) >> 1 - assembly ('memory-safe') { + assembly ("memory-safe") { let fmp := mload(0x40) mstore(add(fmp, 0x34), calldataload(add(config, 0xc0))) // tickUpper: [0x51, 0x54) mstore(add(fmp, 0x31), calldataload(add(config, 0xa0))) // tickLower: [0x4E, 0x51) diff --git a/src/briefcase/protocols/v4-periphery/libraries/PositionConfigId.sol b/src/briefcase/protocols/v4-periphery/libraries/PositionConfigId.sol index 4d709e9a..e6bdf84d 100644 --- a/src/briefcase/protocols/v4-periphery/libraries/PositionConfigId.sol +++ b/src/briefcase/protocols/v4-periphery/libraries/PositionConfigId.sol @@ -32,7 +32,7 @@ library PositionConfigIdLibrary { function hasSubscriber(PositionConfigId storage configId) internal view returns (bool subscribed) { bytes32 _id = configId.id; - assembly ('memory-safe') { + assembly ("memory-safe") { subscribed := shr(255, _id) } } diff --git a/src/briefcase/protocols/v4-periphery/libraries/PositionInfoLibrary.sol b/src/briefcase/protocols/v4-periphery/libraries/PositionInfoLibrary.sol index 01141c26..66a093c9 100644 --- a/src/briefcase/protocols/v4-periphery/libraries/PositionInfoLibrary.sol +++ b/src/briefcase/protocols/v4-periphery/libraries/PositionInfoLibrary.sol @@ -45,39 +45,39 @@ library PositionInfoLibrary { /// @dev This poolId is NOT compatible with the poolId used in UniswapV4 core. It is truncated to 25 bytes, and just used to lookup PoolKey in the poolKeys mapping. function poolId(PositionInfo info) internal pure returns (bytes25 _poolId) { - assembly ('memory-safe') { + assembly ("memory-safe") { _poolId := and(MASK_UPPER_200_BITS, info) } } function tickLower(PositionInfo info) internal pure returns (int24 _tickLower) { - assembly ('memory-safe') { + assembly ("memory-safe") { _tickLower := signextend(2, shr(TICK_LOWER_OFFSET, info)) } } function tickUpper(PositionInfo info) internal pure returns (int24 _tickUpper) { - assembly ('memory-safe') { + assembly ("memory-safe") { _tickUpper := signextend(2, shr(TICK_UPPER_OFFSET, info)) } } function hasSubscriber(PositionInfo info) internal pure returns (bool _hasSubscriber) { - assembly ('memory-safe') { + assembly ("memory-safe") { _hasSubscriber := and(MASK_8_BITS, info) } } /// @dev this does not actually set any storage function setSubscribe(PositionInfo info) internal pure returns (PositionInfo _info) { - assembly ('memory-safe') { + assembly ("memory-safe") { _info := or(info, SET_SUBSCRIBE) } } /// @dev this does not actually set any storage function setUnsubscribe(PositionInfo info) internal pure returns (PositionInfo _info) { - assembly ('memory-safe') { + assembly ("memory-safe") { _info := and(info, SET_UNSUBSCRIBE) } } @@ -95,10 +95,11 @@ library PositionInfoLibrary { { bytes25 _poolId = bytes25(PoolId.unwrap(_poolKey.toId())); assembly { - info := or( - or(and(MASK_UPPER_200_BITS, _poolId), shl(TICK_UPPER_OFFSET, and(MASK_24_BITS, _tickUpper))), - shl(TICK_LOWER_OFFSET, and(MASK_24_BITS, _tickLower)) - ) + info := + or( + or(and(MASK_UPPER_200_BITS, _poolId), shl(TICK_UPPER_OFFSET, and(MASK_24_BITS, _tickUpper))), + shl(TICK_LOWER_OFFSET, and(MASK_24_BITS, _tickLower)) + ) } } } diff --git a/src/briefcase/protocols/v4-periphery/libraries/QuoterRevert.sol b/src/briefcase/protocols/v4-periphery/libraries/QuoterRevert.sol index 1f539192..b96480e6 100644 --- a/src/briefcase/protocols/v4-periphery/libraries/QuoterRevert.sol +++ b/src/briefcase/protocols/v4-periphery/libraries/QuoterRevert.sol @@ -25,7 +25,7 @@ library QuoterRevert { function bubbleReason(bytes memory revertData) internal pure { // mload(revertData): the length of the revert data // add(revertData, 0x20): a pointer to the start of the revert data - assembly ('memory-safe') { + assembly ("memory-safe") { revert(add(revertData, 0x20), mload(revertData)) } } @@ -42,7 +42,7 @@ library QuoterRevert { // reason -> reason+0x1f is the length of the reason string // reason+0x20 -> reason+0x23 is the selector of QuoteSwap // reason+0x24 -> reason+0x43 is the quoteAmount - assembly ('memory-safe') { + assembly ("memory-safe") { quoteAmount := mload(add(reason, 0x24)) } } diff --git a/src/briefcase/protocols/v4-periphery/libraries/SVG.sol b/src/briefcase/protocols/v4-periphery/libraries/SVG.sol index 6f69a51e..fbcb9ea8 100644 --- a/src/briefcase/protocols/v4-periphery/libraries/SVG.sol +++ b/src/briefcase/protocols/v4-periphery/libraries/SVG.sol @@ -261,7 +261,11 @@ library SVG { /// @param tickUpper The upper tick /// @param tickSpacing The tick spacing /// @return curve The curve path - function getCurve(int24 tickLower, int24 tickUpper, int24 tickSpacing) internal pure returns (string memory curve) { + function getCurve(int24 tickLower, int24 tickUpper, int24 tickSpacing) + internal + pure + returns (string memory curve) + { int24 tickRange = (tickUpper - tickLower) / tickSpacing; if (tickRange <= 4) { curve = curve1; diff --git a/src/briefcase/protocols/v4-periphery/libraries/SafeCurrencyMetadata.sol b/src/briefcase/protocols/v4-periphery/libraries/SafeCurrencyMetadata.sol index 4362c514..35d61127 100644 --- a/src/briefcase/protocols/v4-periphery/libraries/SafeCurrencyMetadata.sol +++ b/src/briefcase/protocols/v4-periphery/libraries/SafeCurrencyMetadata.sol @@ -1,9 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import { - IERC20Metadata -} from '../../lib-external/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol'; +import {IERC20Metadata} from + '../../lib-external/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol'; import {AddressStringUtil} from './AddressStringUtil.sol'; /// @title SafeCurrencyMetadata diff --git a/src/briefcase/protocols/view-quoter-v3/libraries/QuoterMath.sol b/src/briefcase/protocols/view-quoter-v3/libraries/QuoterMath.sol index 994c4626..d7d13ff9 100644 --- a/src/briefcase/protocols/view-quoter-v3/libraries/QuoterMath.sol +++ b/src/briefcase/protocols/view-quoter-v3/libraries/QuoterMath.sol @@ -141,11 +141,11 @@ library QuoterMath { // compute values to swap to the target tick, price limit, or point where input/output amount is exhausted (state.sqrtPriceX96, step.amountIn, step.amountOut, step.feeAmount) = SwapMath.computeSwapStep( state.sqrtPriceX96, - (quoteParams.zeroForOne - ? step.sqrtPriceNextX96 < quoteParams.sqrtPriceLimitX96 - : step.sqrtPriceNextX96 > quoteParams.sqrtPriceLimitX96) - ? quoteParams.sqrtPriceLimitX96 - : step.sqrtPriceNextX96, + ( + quoteParams.zeroForOne + ? step.sqrtPriceNextX96 < quoteParams.sqrtPriceLimitX96 + : step.sqrtPriceNextX96 > quoteParams.sqrtPriceLimitX96 + ) ? quoteParams.sqrtPriceLimitX96 : step.sqrtPriceNextX96, state.liquidity, state.amountSpecifiedRemaining, quoteParams.fee